agentleFS
TeamHelix-AITeamHelix-AI/helix/skills/helix-memory/SKILL.md

memory

Skill1 starsChanged 2 months agoApache-2.0View on GitHub

Read and write Helix Memory — the shared store of distilled knowledge that sits under every session, scoped to a project, a team or the whole organisation. Use when the user says "/helix-memory", "remember this", "what do we know about X", "why did the agent think that", when a decision or lesson is worth keeping beyond this session, or when a recalled memory turns out to be wrong and needs finding and fixing. Memory is advice, never enforcement — it shapes what an agent does and blocks nothing.

99 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use ecosystem-reference, fractal-delegation and 10 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • naman10parikhSkill

    ecosystem-reference

    Quick-access directory of Claude Code ecosystem repos, skills, plugins, MCPs, and patterns. Use when improving the harness.

    Also in 5 projects that use this

  • naman10parikhSkill

    fractal-delegation

    Also in 5 projects that use this

  • Maliot100XSkill

    send-user-message

    Send a proactive message to a paired user via their channel (Discord, Telegram, or WhatsApp). Use when the agent needs to notify, alert, or send an unsolicited message to a user — especially during heartbeat invocations, scheduled tasks, or when the agent wants to reach out without a prior user message in the current conversation. Triggers: 'send message to user', 'notify user', 'alert user', 'message the user on discord/telegram/whatsapp', or any need to proactively communicate with a paired sender.

    Also in 4 projects that use this

  • jh941213Skill

    docs-ci

    문서 CI(링크·OpenAPI lint·breaking 게이트·mermaid 검증)나 문서 드리프트 감지(docs.yaml 신선도 검사)를 설치하거나 돌릴 때 사용. 문서 내용 작성은 docs-architecture·docs-interfaces·docs-manuals.

    Also in 3 projects that use this

  • jh941213Skill

    docs-interfaces

    API·이벤트 인터페이스 문서(OpenAPI·swagger·AsyncAPI 명세, 엔드포인트 레퍼런스, API 구성도·시퀀스, API CHANGELOG)를 만들거나 코드와 맞출 때 사용. 시스템 구성도는 docs-architecture, API 설계 원칙은 api-design-principles.

    Also in 3 projects that use this

  • +6 more from naman10parikh
  • +1 more from jh941213

The file

We split this skill into the rules it gives an agent

10 rules. 0 are common, 5 are distinctive, and 5 are very specific to this project.

  • 0

    Common

    Most of the 82 edited versions we read keep these.

  • 5

    Distinctive

    This author's own choices. Worth a look.

  • 5

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    If HELIX_ORCHESTRATOR_RUN_ID or HELIX_SKILL_CREDENTIAL_FILE is set, this skill runs in Helix Console.

    line 11
  2. Very specific:

    Use the normal helix <surface> up, push, state, and wait commands.

    line 13
  3. Very specific:

    Do not start local servers or Fleet, open a browser, curl localhost, use --local, log in, or change profiles/projects.

    line 14
  4. Distinctive:

    Call the binary by its full path every time:

    line 36
  5. Very specific:

    Never put it in a shell variable or function.

    line 45
  6. Distinctive:

    An agent cannot enlarge what every future agent reads: Write freely; a memory earns its way into the core through being used.

    line 64
  7. Very specific:

    Add --json to anything. used and confirm answer with one human line and nothing machine-readable — deliberately.

    line 78
  8. Distinctive:

    One fact per memory: If the body has two unrelated claims, it is two memories.

    line 97
  9. Distinctive:

    If nothing ever reports use, everything decays and the store slowly empties of the things that were working.

    line 130
  10. Distinctive:

    Do not edit it quietly and move on.

    line 135

“Common” is measured: kept by at least 6 in 10 of the 82 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Helix Memory

Orchestrator cloud context (check before setup)

If HELIX_ORCHESTRATOR_RUN_ID or HELIX_SKILL_CREDENTIAL_FILE is set, this skill runs in Helix Console. This section takes precedence over local setup and browser instructions below.

  • First call the plugin's bin/helix orchestrator-protocol (Windows: bin/helix.cmd orchestrator-protocol). It must print 1. Otherwise stop with an actionable request to update the Helix plugin/CLI; never run an older binary's setup commands.
  • Use the normal helix <surface> up, push, state, and wait commands. The CLI selects cloud transport and the assigned project automatically. Keep the same slug within this task.
  • Do not start local servers or Fleet, open a browser, curl localhost, use --local, log in, or change profiles/projects. Do not read or print the credential file. Do not remove the injected environment variables.
  • up returns the Console session URL. Use that URL wherever the local instructions request Board/Fleet links. Events go to Console; human responses and gate approvals still come from the person through the normal wait protocol.
  • On cloud or compatibility errors, report the error. Never fall back to local mode. Outside this context, follow the local behavior below unchanged.

One file, one fact. Memory is not a session surface — it sits underneath Canvas, Loop and Stream, shared across sessions, projects and people. The session apps produce events; Memory is where distilled knowledge lives and gets recalled from.

The failure the whole design is built against:

A wrong memory is worse than no memory, and a wrong shared memory is worse still.

Recall is automatic and nobody asks for it, so one bad organisation-wide entry misleads every agent in the company, silently, until somebody traces a bad decision back to it. That is why provenance, conflict detection and human-gated promotion all exist — and why you have less power here than the person does.

Setup

Call the binary by its full path every time:

${CLAUDE_PLUGIN_ROOT}/bin/helix memory <verb> [flags]

On Windows, ${CLAUDE_PLUGIN_ROOT}\bin\helix.cmd in place of bin/helix; the rest of the command is the same.

Never put it in a shell variable or function. The skill pre-approves this command, and that approval stops matching past a variable assignment — wrap it and every call prompts instead. Prose below names commands as memory <verb>; run them with the full path.

First run in a repo needs nothing. One store per machine, at ~/.helix/memory — the same store and the same server whichever project you are in. The project layer is a scope inside it, named after the repo directory, created on first write; nothing is ever written into the repo.

What you may and may not do

You mayYou may not
Write memories at the project layerWrite at team or organisation
Read everything, automatically and on demandPut your own memory into the automatic core
Report that you acted on a memoryConfirm a memory is still true — that is the person's
Propose that a memory move up a layerDecide that move

An agent cannot enlarge what every future agent reads. Write freely; a memory earns its way into the core through being used.

The commands

${CLAUDE_PLUGIN_ROOT}/bin/helix memory write --name <name> --body "<the fact>" [--type --areas --paths]
${CLAUDE_PLUGIN_ROOT}/bin/helix memory search <query> [--limit 10]   # keyword, widened one hop along typed edges
${CLAUDE_PLUGIN_ROOT}/bin/helix memory recall <path>                 # what this file brings with it
${CLAUDE_PLUGIN_ROOT}/bin/helix memory core [--explain]              # what you would be given here, and why
${CLAUDE_PLUGIN_ROOT}/bin/helix memory used <id>                     # you acted on it — this is the control loop
${CLAUDE_PLUGIN_ROOT}/bin/helix memory get <id|name> · list · doctor

Add --json to anything. used and confirm answer with one human line and nothing machine-readable — deliberately.

--session is not needed. The session is taken from the host, so a memory you write carries the session it came out of, and usage is attributed correctly when two sessions are open on one project.

Writing a memory worth keeping

${CLAUDE_PLUGIN_ROOT}/bin/helix memory write --name pnpm-not-npm --type feedback \
  --paths '**/package.json' \
  --body 'Always prefer pnpm to npm.

**Why:** npm rewrites the lockfile and breaks workspace resolution.

**How to apply:** use pnpm in every command, script and doc example.'
  • One fact per memory. If the body has two unrelated claims, it is two memories. Atomicity is what lets one be promoted, contradicted or decayed without dragging the other with it.
  • The --why matters more than the rule. A memory that says what without why cannot be judged when it stops being true.
  • --type is user · feedback · project · reference, and it is a real ranking signal — feedback belongs in the core, reference rarely does.
  • Bind it with --paths or --areas when it applies somewhere specific. Unbound means the whole layer, which is what an org-wide standard looks like. Bindings widen reach; they never narrow each other.
  • Link it with typed edges — supersedes, contradicts, depends_on, evidence_for, narrows. An edge may point at an artifact (commit:afd81b3), which is recorded and never followed.

Write when a fact will still matter next month and is not derivable from the code. Not what the repo already says; not what only matters in this conversation.

How memories reach you

Three channels, one ranking, one store:

  1. At session start — the automatic core, under a hard token budget. You receive it; you do not ask for it.
  2. On what you are working on — memories bound to files in play arrive at the next prompt. Not at the moment a file opens: the hook that observes cannot add to the conversation, so observation and delivery are split.
  3. When you search — memory search, widened one hop so an answer arrives with its caveats attached.

Say when you used one. memory used <id> is not bookkeeping — it is the whole of the control loop. A memory acted on is promoted toward the core; one shown repeatedly and ignored is demoted; one never recalled at all decays to archive. If nothing ever reports use, everything decays and the store slowly empties of the things that were working.

When a memory is wrong

Do not edit it quietly and move on. Either:

  • memory search to find it, then tell the person what it says, where it came from and who wrote it — provenance is the point;
  • or record the disagreement as an edge (contradicts) so it surfaces as a conflict rather than a silent overwrite.

memory doctor reports broken files, dead edges and conflicts in two shapes: a declared contradiction, and the same name asserted at more than one layer.

Promotion is the person's

You may propose; you never decide. A memory reaching team or organisation needs a named human, and it happens in the browser:

${CLAUDE_PLUGIN_ROOT}/bin/helix memory serve --port 4840

Point the person there when something deserves to be true for everyone.

Hooks

memory hook install prints the settings.json fragment. Three hooks: the core at session start, path recording after a tool runs, and delivery at the next prompt. They never fail loudly — a broken install looks like nothing happening, never like an error on every turn.

State that survives between runs

A long job needs somewhere to put a cursor, a checkpoint, a partial result — and that is not a memory. Memory is distilled knowledge that gets handed to agents automatically; a resumption cursor handed to every future session would fill the recall budget with bookkeeping inside a week. So state is a separate collection, and nothing in it ever reaches recall.

${CLAUDE_PLUGIN_ROOT}/bin/helix memory state ns <name> --routine <r> [--visibility private|shared|scope]
${CLAUDE_PLUGIN_ROOT}/bin/helix memory state set <ns> <key> --routine <r>   # value on stdin, or --value
${CLAUDE_PLUGIN_ROOT}/bin/helix memory state get <ns> <key> --routine <r>
${CLAUDE_PLUGIN_ROOT}/bin/helix memory state list [<ns>] · rm · prune
${CLAUDE_PLUGIN_ROOT}/bin/helix memory state cadence                        # what ran, and what stopped
${CLAUDE_PLUGIN_ROOT}/bin/helix memory state promote <ns> <key> --body "…"  # turn a result into a memory

State belongs to a routine, not a session — surviving from one run to the next is the entire point. Pass --routine <name> or set HELIX_ROUTINE.

Private by default. shared reaches a named set of routines, scope reaches anything in the scope. Reading is shareable; writing never is — only the owning routine may write, because shared state anyone can overwrite is a race rather than state.

Entries expire — 30 days by default, per namespace. Bookkeeping should expire; nothing here is evidence.

When a result outlives its run, promote it: memory state promote writes a real memory whose provenance points back at the state entry and the session that produced it. That is the only path from state into recall, and it is deliberately something you decide rather than something that happens.

Nothing here schedules anything. memory state cadence reports what a routine has been doing — last ran, usually every day, overdue — because a routine that writes state on every run reveals its own rhythm. It can tell you a nightly job did not run last night. It cannot start one.

What Memory is not

Memory is advice. It shapes what you do and blocks nothing; breaking one produces no violation and no event. If something must actually be prevented, that is a policy, and a memory expressed as a rule is a rule that silently does not apply.

Sharp edges

  • Nothing schedules the promotion pass. Usage figures are as fresh as the last memory sweep. Run it, or offer to.
  • A store has a team layer only if someone configured one. Unconfigured means project and organisation and nothing between.
  • Reading records that memories were shown, which feeds demotion. Pass --no-track to look through the store without your looking counting.
  • There is no history. A hand edit replaces a memory with no trace of what it said before. Say so before editing one on someone's behalf.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.