agent-guild
A ready-made multi-agent setup for Claude Code, installed into a project with one command. A Sonnet orchestrator delegates to specialist subagents (Opus architect and grader, Sonnet coders, Haiku utility), and three features come wired in:
- Multiple agents:
architect,coder(parallel-safe),code-graderandutility, plus the orchestrator rules that decide who does what: routing, briefs and reports. See development-workflow.md. - Memory, in two layers, so context survives between sessions:
- memory-bank: current state (what's being worked on, decisions,
progress), in a git-tracked
memory/folder. - jev-mem: long-term facts, recalled by relevance through an MCP server and session hooks.
- memory-bank: current state (what's being worked on, decisions,
progress), in a git-tracked
- Spec-Driven Development (SDD), via sdd-feature: specs, design, interfaces, implementation and grading, with approval gates between phases. Opt-in per project.
uvx agent-guild /path/to/project
user
│ approvals (chat only)
▼
┌──────────────────────┐ reads/writes memory/ (state, gate status)
│ orchestrator (Sonnet)│ ───────────────▶ jevmem (facts) ← single writer
└──────────────────────┘ specs/, wireframes/
plans │ chunks │ grade │ chores │
▼ ▼ ▼ ▼
architect coder ×N code-grader utility
(Opus, RO) (Sonnet) (Opus, RO) (Haiku)
└── all read specs/, memory/, jevmem recall; report memory candidates + friction ──┘
Not affiliated with or endorsed by Anthropic. "Claude" and "Claude Code" are trademarks of Anthropic.
Files
| File | Install to | Role |
|---|---|---|
| development-workflow.md | imported from ~/.claude/CLAUDE.md |
Orchestrator rules: knowledge layers, routing, SDD phase → agent map, briefs, memory protocol |
| agents/architect.md | ~/.claude/agents/ |
Opus, read-only. Plans, SDD Phase 1 design decisions, Phase 2 interfaces, root causes |
| agents/coder.md | ~/.claude/agents/ |
Sonnet. Scoped implementation; parallel-safe |
| agents/code-grader.md | ~/.claude/agents/ |
Opus, read-only. SDD Phase 5. Body identical to the sdd-feature skill's grader; only the frontmatter differs |
| agents/utility.md | ~/.claude/agents/ |
Haiku. Checks, git, moves, bulk edits |
Design choices
- The orchestrator is the only writer of memory. Parallel coders writing
memory/would conflict, and someone has to decide what is worth remembering. Subagents can read memory, including jevmem recall, and return Memory candidates and Friction sections in their reports. - Subagents don't get the jevmem hooks. The
SessionStartandUserPromptSubmithooks fire in the main session only. So the agents that need history (architect, coder, grader) can callmemory_recallthemselves. - The files on disk are the hand-off. Once a wireframe,
SPEC.mdor interfaces exist, briefs point to them instead of restating them. That solves the cold-start problem without long prompts. disallowedToolsinstead of atoolsallowlist for architect, coder and grader. They inherit project MCP servers (e.g. code-navigation MCPs) without per-project edits, while jevmem writes and file edits stay blocked where needed.utilitykeeps a plain allowlist.- The grader runs on Opus. The code it grades was written by Sonnet coders, so a different, stronger model gives a more independent review.
- SDD is opt-in. The global workflow uses SDD only when a project's
AGENTS.md/CLAUDE.mdadopts the Phase Gate Protocol, or when you ask for thesdd-featureskill directly. Projects that don't want gates just leave the rule out. - Gates and gate status. SDD gates stay between the orchestrator and the user. The gate status is recorded in
memory/activeContext.md, so a new session resumes at the right gate.
Install
Quick: the installer (per project)
agent-guild copies everything into a project (plain copies, not links, so the project can edit them) and is
safe to re-run: files that differ from the shipped version are skipped unless you pass --force.
uvx agent-guild /path/to/project --dry-run
uvx agent-guild /path/to/project
It does, in the project:
- copies
agents/*.mdanddevelopment-workflow.mdinto.claude/; - copies the
memory-bank,jev-memoryandsdd-featureskills into.claude/skills/(cloned from GitHub, or from local clones with--sources-dir DIR); - adds three removable sections to
CLAUDE.md: Agents and delegation, Memory bank and Phase Gate Protocol. They live inCLAUDE.md, notAGENTS.md, because they are rules for Claude Code and its subagents;AGENTS.mdstays tool-neutral. If the project has anAGENTS.md,CLAUDE.mdstarts with@AGENTS.md. A section thatCLAUDE.mdorAGENTS.mdalready has is not added again; - adds the pinned jevmem server to
.mcp.jsonand the jevmem hooks to.claude/settings.json, merging into existing files; - sets
autoMemoryEnabled: falseand the project's model tosonnet.
| Flag | Effect |
|---|---|
--without sdd / memory-bank / jevmem |
Leave a component out. sdd also drops code-grader and the gate section; jevmem drops its skill, server, hooks and the auto-memory switch |
--model ALIAS |
Project main-session model; default sonnet (the per-project alternative to the global setting below), none leaves it unset |
--import-cursor-skills |
Also copy the project's .cursor/skills/* into .claude/skills/; skills that already exist are kept |
--personal-settings |
Put --model and autoMemoryEnabled in the git-ignored .claude/settings.local.json |
--import-auto-memory |
First import the project's existing auto-memory notes into jevmem |
--keep-auto-memory |
Don't switch auto-memory off |
--sources-dir DIR |
Use local clones named memory-bank/, jev-mem/, sdd-feature-skill/ instead of GitHub |
--git-exclude |
List the files this run creates in .git/info/exclude (local to your clone, never committed), so you can try the setup without it showing in git status. Off by default: files are added normally and your git settings apply. Edits to files git already tracks (e.g. an existing .mcp.json) can't be hidden; the tool warns about them |
--force, --dry-run |
Overwrite edited copies; show the plan without writing |
Still per machine, once: uvx jevmem config init and uvx --from jevmem jevmem warmup.
The manual steps below do the same thing by hand, and also cover the per-machine variant.
Manual install
Two parts:
- Agents and orchestrator rules: always per machine. They're how you work, not part of any one project.
- Memory and skills (jevmem MCP server and hooks, auto-memory switch, skills): per project (recommended) or per machine. Pick one per project, not both. Doing both injects jevmem notes twice and registers the server twice.
1. Agents and orchestrator rules (per machine)
mkdir -p ~/.claude/agents && ln -s /path/to/agent-guild/agents/*.md ~/.claude/agents/
printf '\n@/path/to/agent-guild/development-workflow.md\n' >> ~/.claude/CLAUDE.md
Orchestrator model: either globally, in ~/.claude/settings.json, replace "model": "opusplan" with
"model": "sonnet"; or only for a project, with "model": "sonnet" in its .claude/settings.json (or
.claude/settings.local.json to keep it personal). The installer does the latter by default.
jevmem's own settings (API key or local model, ~/.jevmem/config.jsonc) and its embedding model are per machine
either way:
uvx jevmem config init
uvx --from jevmem jevmem warmup
2a. Memory and skills per project (recommended)
Everything lives in the repo and is committed. Worktrees, branches and other contributors get the same setup, and nothing leaks into projects that don't use it.
Run these from the project's root.
Skills, into .claude/skills/:
npx skills add illescasDaniel/memory-bank -a claude-code -y
npx skills add illescasDaniel/sdd-feature-skill -a claude-code -y
The jev-memory skill isn't packaged for npx skills. Copy it from a clone of jev-mem:
cp -r jev-mem/.claude/skills/jev-memory .claude/skills/
jevmem MCP server, in the project's .mcp.json, pinned:
claude mcp add --scope project jevmem -- uvx --from "jevmem>=0.4.0,<0.5" jevmem-mcp
If you already registered jevmem at user scope (claude mcp add --scope user jevmem …), that works too. The server
only provides tools and injects nothing, and notes are stored per project (project:<repo name>) either way. Keep
just one registration, so the server isn't listed twice.
Hooks and auto-memory switch, in the project's .claude/settings.json:
{
"autoMemoryEnabled": false,
"hooks": {
"SessionStart": [{"hooks": [{"type": "command", "command": "uvx --from \"jevmem>=0.4.0,<0.5\" jevmem hook session-start", "timeout": 15}]}],
"UserPromptSubmit": [{"hooks": [{"type": "command", "command": "uvx --from \"jevmem>=0.4.0,<0.5\" jevmem hook user-prompt", "timeout": 20}]}]
}
}
Before setting autoMemoryEnabled: false, import the project's existing auto-memory notes (see
Importing auto-memory). To turn auto-memory off only for yourself, without committing the
change, put that key in .claude/settings.local.json instead.
Rules, in the project's AGENTS.md / CLAUDE.md:
- Memory bank: the snippet from the memory-bank README, then ask the agent to "set up the memory bank".
- SDD, if wanted: the Phase Gate Protocol snippet from the sdd-feature README, adjusted to the project's paths. Leave it out to keep SDD manual: the skill still works when you ask for it.
- Quality gate command, test conventions, code-navigation MCPs: the agents look for these there.
2b. Memory and skills per machine
For when you want the same setup in every project without touching repos. Don't combine it with 2a in the same project.
npx skills add illescasDaniel/memory-bank -a claude-code -g -y
npx skills add illescasDaniel/sdd-feature-skill -a claude-code -g -y
cp -r jev-mem/.claude/skills/jev-memory ~/.claude/skills/
claude mcp add --scope user jevmem -- uvx --from "jevmem>=0.4.0,<0.5" jevmem-mcp
In ~/.claude/settings.json, add "autoMemoryEnabled": false at the top level. Then merge these hooks into the
existing hooks block, next to the PreToolUse one:
"SessionStart": [{"hooks": [{"type": "command", "command": "uvx --from \"jevmem>=0.4.0,<0.5\" jevmem hook session-start", "timeout": 15}]}],
"UserPromptSubmit": [{"hooks": [{"type": "command", "command": "uvx --from \"jevmem>=0.4.0,<0.5\" jevmem hook user-prompt", "timeout": 20}]}]
Then remove the same hooks, server and skills from any project that already defines them.
The per-project rules in AGENTS.md / CLAUDE.md (memory bank snippet, optional SDD snippet, quality gate) are still
added per project.
Importing auto-memory
Claude Code's built-in auto-memory (~/.claude/projects/<encoded-path>/memory/*.md) is a second fact store that
overlaps with jevmem. Before switching it off for a project, import its notes. Run this from the project's root, so
the notes land in the same project:<name> scope that the hooks and MCP server use. Point --root at that project's
folder only, because the default imports every project's memory at once:
uvx jevmem import-claude-memory --root ~/.claude/projects/<encoded-project-path>
- Folder name: the project's absolute path with
/replaced by-. - Jev must be configured. Writes are screened by Jev, so the key or local model must be set up, or the notes are queued unscreened and hidden from recall.
- Check the result with
uvx jevmem list, andmemory_forgetanything stale.
After the switch, the old files stay on disk, but Claude no longer reads or writes them. To turn auto-memory off for a
single shell instead, set the environment variable CLAUDE_CODE_DISABLE_AUTO_MEMORY=1.
Development
git clone https://github.com/illescasDaniel/agent-guild && cd agent-guild
uv run pytest
uv run agent-guild /path/to/project --dry-run
From a checkout, the CLI reads agents/, templates/ and development-workflow.md at the repo root; the published
wheel bundles them.
License
Metadata
Release files for agent-guild 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| agent_guild-1.0.0.tar.gz | 27.4 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| agent_guild-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 55.1 kB
Release files / agent_guild-1.0.0.tar.gz
| Download URL | agent_guild-1.0.0.tar.gz |
|---|---|
| Size | 27.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
702e9e13adc49d2b552ea13c257f8c5d1c9cbcd7c0f3cb01f80a8b11e312caf6
|
|
BLAKE2b-256 checksum How to use checksums |
252062079b91a0b3ae6028da6cbbce091f826395b264b608c756a3ca5c375606
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.
Transparency logRelease files / agent_guild-1.0.0-py3-none-any.whl
| Download URL | agent_guild-1.0.0-py3-none-any.whl |
|---|---|
| Size | 27.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
128d63444103e309f48bd4ead2c1a4956ce20212b47a4ffb0d826b7dde2a24ee
|
|
BLAKE2b-256 checksum How to use checksums |
27bde429bde56cae5f7bf7b525a0efc7f7d9c13baf62ba0aebf982a7cdd5ba14
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.
Transparency logSecurity for agent-guild 1.0.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for agent_guild-1.0.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 21, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.