Repository navigation
Releases
v0.4.2
Full Changelog: v0.4.1...v0.4.2
v0.4.1
v0.4.0
Agentry 0.3.0
Agentry 0.3 turns the plugin into a harness for a repo's own board. /agentry:exec builds a task whose
contract is already written, in its own git worktree. A second agent checks the work against the acceptance,
and /agentry:merge lands it only past your repo's gate. Each step is recorded in a ledger, so a cold session
can resume. /agentry:init learns the board you have or scaffolds one, and /agentry:start and
/agentry:close open and end a session the same way each time. The agentry command (board, lane, mem,
draft, run, lock) does the mechanical work; the plugin starts no server and ships no hooks. Memory is
now agentry mem, over the same files as before. The Workbench and the flow server are gone.
Upgrading from 0.2
Restart Claude Code after updating. The commands, agents and skills register on a restart, and a session
started before the update still holds the old servers.
- Memory is
agentry mem; the memory server is gone. Agents, commands and skills runagentry mem <verb>
in Bash (agentry mem --help) instead of themcp__plugin_agentry_mem__*tools. Replace any of those
names in your own prompts orCLAUDE.md. Existing stores read unchanged: the same Markdown files, roots
and environment variables (AGENTRY_GLOBAL_DIR,CLAUDE_PROJECT_DIR,AGENTRY_PROJECT_DIR). agentryis on the Bash tool's PATH while the plugin is enabled. Where it is not, run
node "${CLAUDE_PLUGIN_ROOT}/scripts/mem.mjs"(orboard.mjs,lane.mjs) with the same arguments.lane exec closewrites the lane's episode. It writes the episode to the memory store and stamps its id
in one call; pass the run's--lesson "<text>"and--used-memories <ids>to it. Writing the episode
yourself and passing--episode <id>still works, deprecated, for one version.- No hooks, so nothing primes memory at session start.
/agentry:startprints the ranked memories and
/agentry:goand/agentry:askbegin withagentry mem recall. The newmemory.primesets whatstartand
theexecbriefs carry. - The Workbench and the flow server are removed.
/agentry:workbenchis gone./agentry:go,spec,
plan,splitandfixwrite the spec, plan and task files as plain files under.agentry/work/<run>/,
and review and approval happen in the chat. /agentry:gowith no task asks what to work on. It no longer claims queued work.- The board commands need a board.
/agentry:exec,merge,newandboardread the repo's
.agentry/process.jsonand.agentry/workflow.json. Run/agentry:initonce to learn the board you have
or scaffold one. Every 0.2 command keeps its name,/agentry:workbenchapart. - Memory files land in your repo. Repo memory and each lane's episode now live in
<repo>/.agentry/memory/
in the main checkout, and show up untracked after the firstlane exec close. Commit them to share them
with your team, or add them to.gitignore. - The repo moved to
silentthreadstudio/agentry. GitHub redirects the old path. The marketplace name is
stillagentry-dev. .agentry/config.jsonhas new keys and is read strictly by the lane scripts. See/agentry:config.
A key outsideworkDir,mode,evolution,memory,mergeandlanesstops the step with an error that
names it.
Node 24 or newer is still required.
Added
/agentry:config— shows the effective.agentry/config.json(key, value, default, what it does) and
sets one key withkey=value, validated and merged, never clobbering the others. The keys areworkDir,
mode,evolution,memory.prime,memory.primeLimit,memory.captureCorrections,merge.push(ask,
auto,never;askby default) andlanes.maxWriters(3 by default). The lane scripts read the file
strictly: an unknown top-level key, or a bad value insidemergeorlanes, stops the step with an error
naming it.- The
agentry:conductoragent — the main-session agent for a repo that sets"agent": "agentry:conductor"in.claude/settings.json. It starts the session with/agentry:start, sends board
ids through/agentry:exec, landings through/agentry:merge, questions through/agentry:askand the
wrap-up through/agentry:close, drafts the owner's calls, and does small work itself./agentry:init
offers to set it as the default. lane merge <id> --resolve landedcloses a lane whose work is already on main — a verified lane (or one
stopped on a red gate after a passing verdict) whose commits reached main another way, through a
fast-forward of a combined branch or a squash, can now be closed. It readsgit cherryover the lane's own
commits: with every one on main by patch the ledger is merged (merge.how: "found-on-main",merge.landed
the matching main commits) with nothing picked, no commit made and the board left to the owner. A commit
with no matching patch refuses the close, named with its short SHA and subject, until the owner passes
--checkedafter checking it landed squashed or reworded; that answer is kept inresolutions[]. A stacked
parent closed this way counts as merged for its children,--cleanuptakes the worktree and branch down as
after a land, andboard statusstops nudging the lane as verified but not merged. A stuck land's
--resolve landed|rolled-backis unchanged.lane exec cut <id> --decision <D> [--keep <paths>] [--message "<subject>"] [--apply]— retires a lane
on the owner's call, recorded as a decision the board holds. It previews by default and writes nothing. With
--apply, the--keepfiles and folders land on main from the lane's tip as one commit, through the land's
own steps and the merge role's gate tier (rolled back on red, the lane as it was); the board'scutstatus
(the newlifecycle.on.cut,exec.kinds.<kind>.on.cutfor a debt kind) goes in one board commit, so main
is clean for the next land. The lane is closed, its uncommitted work saved, its worktree removed and its
branch kept asagentry/<id>.cut; the episode is printed andexec close <id>writes it. Without--keepnothing of
the branch lands. A cut killed mid-land is rolled back by the nextexec cut <id> --decision <D> --apply,
only over its own commits and writes; one killed after its board commit refuses and is finished by hand.
An agent out, a decision the board does not hold, a--keeppath the
branch does not change, an unseton.cutand a lane mid-land or merged are refused, with nothing written.lane exec adopt <id> --branch <b>— work built outside exec (an agent's worktree, a hand branch)
becomes the lane:start's checks and board write, a freshagentry/<id>cut from main,main..<b>'s own
commits picked onto it (its merge commits left out and named in the brief) and the uncommitted diff of
<b>'s worktree applied, asrestart --carrydoes.<b>and its worktree are only read, andcleanup:
prints how to remove them once the lane has landed. The first brief lists the adopted commits; commits
outside the contract's owns are a warning with thelane exec owns <id> --add <paths> --applyline. A
conflict leaves the lane building with the conflict in its worktree for the builder; any other error in
the carry takes the new lane down again and names what it could not remove.<b>must be a branch's own
name exactly as git lists it: a revision (<b>~0), another case of a name, a branch with a case twin, the
main branch and a branch a ledger tracks are refused, with nothing written.lane spikeand ways on for unlisted worktrees —agentry lane spike <branch|path> --for <id>files an
agent worktree no ledger knows as work meant for that item,--keep "<why>"keeps it on purpose (shown as
kept, never drift) and--forgetdrops it; with no flag it lists them, a branch gone since markedgone.
The list is local run state (.agentry/run/spikes.json), written at once. Drift now offers an unlisted
agent worktree its ways on, each with its command: land (lane merge <id> --branch <b>), continue (lane exec adopt <id> --branch <b>), file (lane spike) or remove (git worktree remove), never
/agentry:exec. One on a branch they all refuse (a case twin, a branch with no commits yet, a spelling no
branch is named) is offered only remove, with why; an orphanagentry/<id>worktree is offered no continue,
since it is the branch that lane would cut. A spike filed for an item is onespike-for <id>row until a lane takes its branch, an
adopted branch is no drift, and an unreadablespikes.jsonis aspikes-unreadablerow.lane note—agentry lane note <id> --owner "<call>"records a call the owner made on a lane, or on
the spike filed for the item, one line each; with no flag it lists them, and--recorded <n,n|all> --where "<file or section>"marks them written down.exec adoptmoves a spike's calls into the lane and
restartkeeps them; a spike holding calls not written down refuses--forgetand a re-file that changes
its item.exec close's episode counts them, andlane session closelists the ones not written down
(calls,callLines), merged lanes included, until they are marked;/agentry:closewrites them where
the repo keeps decisions and marks them.board next-id <kind> --family <prefix>— the next free id among every board id in that prefix family,
whatever kind holds it (ART-19afterART-18,<prefix>-1when there is none), so a kind whose ids are
chosen by hand no longer takes one another kind already uses. A family ending in a digit needs a separator
(R1does not readR19). The chosen-by-hand refusal names it, and/agentry:newproposes it when the
owner names a prefix.board commits --learn [--min <n>]— reads the last 500 first-parent commits of the default branch and
prints thecommitsrules they k...
v0.2.0
Full Changelog: v0.1.2...v0.2.0
Full Changelog: v0.1.2...v0.2.0
v0.1.2
v0.1.1
v0.1.0
What's Changed
- Actionable, consistent error handling across the 11 memory MCP tools by @Codestz in #1
- memory: clearer all-invalid feedback/distill error prose by @Codestz in #2
- check-plugin: content-hash dist-lockstep, not mtime by @Codestz in #3
New Contributors
Full Changelog: https://github.com/Codestz/agentry/commits/v0.1.0