Install
openclaw skills install 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 preferences, project decisions, conventions, lessons learned, or query/audit Git-native memory with gam.
openclaw skills install 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.