Skip to content

agedum

Go on — one source, every agent.

Latin agedum — "go on! / get going!"

Agent CLIs each want their instructions and skills in their own place and format: Claude reads CLAUDE.md and .claude/skills/, kimi reads a project AGENTS.md but needs an --agent-file for user-scope instructions plus a ~/.kimi/skills/ tree, and the next one will be different again. agedum lets you keep one agent-neutral source and renders it for whichever harness you launch.

  • Instructions live in a root AGENTS.md — plain markdown.
  • Skills live in .agents/skills/<name>/ as SKILL.md, with optional task files, scripts, and a per-harness SKILL.<harness>.md overlay.

At launch agedum compiles that source to the harness's native layout in a throwaway directory, then runs your command inside a private mount namespace (bubblewrap) where the compiled files appear at their expected paths — visible only to that process and its children, never written into your real tree or $HOME.

# The normal way to launch: name a provider; agedum sets its model/auth env and
# injects your source, then runs the harness named in that provider's config.
agedum claude-deepseek -p "review this change"
agedum kimi            -p "review this change"
agedum opencode-deepseek run "review this change"

A provider config names the harness and its model/auth; agedum <name> resolves it from a .env, injects the source, and launches. Under the hood it uses wrapper mode (agedum --wrapper <harness> -- <command>), the lower-level entry that just injects the source and runs a command — reach for that directly only when you want the context with no provider env (e.g. native Claude with your own login).

Why agedum

You maintain agent context — house style, review checklists, project conventions, reusable skills — and you want it to follow you across agent CLIs without copy-pasting into each one's bespoke layout. agedum is the translation layer:

  • Author once. AGENTS.md + .agents/skills/ is the emerging cross-agent convention. Keep your sources in it; let agedum do the per-harness rendering.
  • Two scopes, kept distinct. A global source (~/.config/agents/) travels with you; a project source lives in the repo. agedum lands each at its own native location so the harness still sees them as user-scope vs project-scope — they are never silently merged.
  • No footprint. The compiled CLAUDE.md / skills exist only inside the launched process's mount namespace. Your working tree and $HOME are untouched; agedum refuses to overlay a git-tracked path.

How it fits together

flowchart LR
  src["AGENTS.md + .agents/skills/<br/>(project + global)"] --> agedum
  agedum -->|"--wrapper claude"| cl["CLAUDE.md + .claude/skills/"]
  agedum -->|"--wrapper kimi"| ki["AGENTS.md (native) + --agent-file + .kimi/skills/"]
  agedum -->|"--wrapper opencode"| oc["AGENTS.md (native) + .opencode/skills/"]
  agedum -->|"--wrapper cline"| cln["AGENTS.md (native) + .cline/skills/"]
  agedum -->|"--wrapper reasonix"| rx["AGENTS.md (native) + .reasonix/skills/"]
  agedum -->|"--wrapper aider"| ai["AGENTS.md via --read (no skills)"]
  agedum -->|"--wrapper pi"| pi["AGENTS.md (native) + .pi/skills/"]
  agedum -->|"--wrapper codex"| cx["AGENTS.md (native) + .codex/skills/"]
  cl --> ns["private mount namespace<br/>(bwrap)"]
  ki --> ns
  oc --> ns
  cln --> ns
  rx --> ns
  ai --> ns
  pi --> ns
  cx --> ns
  ns --> cmd["your command<br/>(claude / kimi / opencode / cline / reasonix / aider / pi / codex)"]
  1. Locate the source — project root + global config.
  2. Compile per harness — render to the harness's native shape.
  3. Inject + run — bind the compiled files into a private namespace and exec your command.

Status

Harness Flag Status
Claude --wrapper claude Implemented — project + global scope
kimi --wrapper kimi Implemented — project + global scope
opencode --wrapper opencode Implemented — project + global scope
Cline --wrapper cline Implemented — project + global scope; provider mode
reasonix --wrapper reasonix Implemented — project + global scope; provider mode
aider --wrapper aider Implemented — instructions via --read (no skills); provider mode
pi --wrapper pi Implemented — project + global scope; provider mode (custom endpoint + subagent routing)

Provider mode (agedum <provider-name>) is the normal entry point; it launches a harness from a provider config JSON, resolving its env from a .env. Wrapper mode (agedum --wrapper <harness> -- <command>) is the lower-level path it builds on.

agedum is Linux-only and requires bwrap (bubblewrap) on PATH for the virtual-FS launch.

Learn more