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 Code reads a project AGENTS.md plus user-scope ~/.kimi-code/AGENTS.md and .kimi-code/skills/ trees, 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. The read-only injected content is temporary; directory preparation, mountpoint stubs, writable provider seeds, and harness state can write host paths.

# 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.
  • Temporary context, persistent state. Compiled CLAUDE.md / skills are staged temporarily and exposed at their target paths only inside the launched process's mount namespace. Empty mountpoint stubs are swept when possible; prepared directories, writable Kimi/Cline seeds and harness state can remain. agedum refuses to overlay a git-tracked path; it is not a no-writes or confidentiality boundary. Write-confinement is opt-in.

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) + .kimi-code/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)
codex --wrapper codex Implemented — project + global scope; provider mode (custom endpoint + MCP)

Provider mode (agedum <provider-name>) is the normal entry point; it launches a harness from a provider config (JSON or versioned YAML), 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