Install
openclaw skills install @femto/git-as-memoryGit-backed memory policy and CLI workflow for OpenClaw, Hermes, Claude Code, Codex, and other agents. Use when an agent should remember durable user preferen...
openclaw skills install @femto/git-as-memoryUse git-as-memory as a durable, auditable memory layer for agents. It stores memory in a dedicated Git ref, not in the working tree.
Default ref:
refs/git-as-memory/memory/v1
Supported agents: OpenClaw, Hermes, Claude Code, Codex, or any agent that can run shell commands.
Prefer gam if installed:
command -v gam
If missing, install one of:
npm install -g git-as-memory
pip install git-as-memory
No global install:
npx git-as-memory --help
python -m git_as_memory.cli --help
All commands require a Git repo. If --repo is omitted, use the current working repo.
Initialize once per repo; it is idempotent:
gam init --repo /path/to/repo
Write memory only for stable, reusable information.
Write when:
Do not write:
--type hypothesis.Before writing:
gam search "<keywords>" --repo /path/to/repo
--source explaining where the memory came from.After writing, report the memory key:
<type>/<id>
Use a small, consistent type set:
entity: user, project, organization, tool, or other entity preference/profile.semantic: durable fact, rule, convention, decision, or technical lesson.episodic: compact summary of a task/session/event.working: short-lived task context that may be deleted later.hypothesis: unverified inference that should be confirmed before acting on strongly.Use stable kebab-case ids. Prefer names that future agents can guess.
Good:
user-preference-concise-answers
project-release-workflow
openclaw-memory-policy
git-as-memory-storage-layout
Avoid random ids unless there is no stable concept.
gam write "User prefers concise technical answers with concrete commands." \
--repo /path/to/repo \
--type entity \
--id user-preference-concise-answers \
--tag user \
--tag preference \
--source "User corrected the agent for over-explaining and asked for practical output."
Multi-line:
printf '%s\n' "Decision summary..." | gam write --stdin \
--repo /path/to/repo \
--type semantic \
--id project-decision-example \
--source "Summarized from the current implementation session."
Use read when you know the key:
gam read entity/user-preference-concise-answers --repo /path/to/repo
show is equivalent when using id plus optional type:
gam show user-preference-concise-answers --type entity --repo /path/to/repo
Use search for content lookup:
gam search "release workflow" --repo /path/to/repo
gam search "concise answers" --repo /path/to/repo --json
Search is local substring matching over memory content, tags, metadata, and source text.
Use glob for memory key lookup, not arbitrary working-tree files. It matches <type>/<id> and bare ids:
gam glob "entity/*" --repo /path/to/repo
gam glob "user-*" --repo /path/to/repo
gam glob "*release*" --repo /path/to/repo
Use --files only for debugging the underlying Git tree:
gam glob "entity/*" --files --repo /path/to/repo
gam list --repo /path/to/repo
gam list --repo /path/to/repo --json
gam history user-preference-concise-answers --type entity --repo /path/to/repo
Direct Git inspection:
git -C /path/to/repo log --oneline refs/git-as-memory/memory/v1
git -C /path/to/repo ls-tree -r --name-only refs/git-as-memory/memory/v1
Prefer soft delete:
gam delete user-preference-concise-answers --type entity --repo /path/to/repo
Use purge only when the user explicitly asks to remove the current visible files:
gam purge user-preference-concise-answers --type entity --repo /path/to/repo
When starting a task in a repo:
gam search "<project/tool/user keywords>" --repo /path/to/repo
When a durable lesson appears:
When the user asks "what do you remember?":
gam list, gam glob, or gam search.gam read for relevant keys.gam history only if provenance or evolution matters.After a memory write, respond briefly:
Remembered: entity/user-preference-concise-answers
If you decide not to write memory, say why only when useful:
Not writing memory: this is a one-off task detail.