Skip to main content

agedum

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

Drive any agent CLI from an agent-neutral source shape, translating per harness at launch. You keep one set of sources; agedum renders them for whichever agent CLI you run.

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

agedum has two modes:

  • agedum <provider-name|config.json> [harness args] — the primary form. Read a provider config JSON (a name resolved under ~/.config/agents/providers, or a path), resolve its secrets from a .env, set the provider/model/auth environment, and launch the harness named in the config — inside the virtual-file context below. --prompt "<text>" seeds an initial prompt and stays interactive; --run "<text>" runs it non-interactively and exits. --dry-run prints the resolved env (secrets masked) + argv without launching.
  • agedum --wrapper <harness> -- <command> — compile the source to the harness's native layout in a throwaway dir, then run your command inside a private mount namespace (bubblewrap) where the compiled files appear at their expected paths — visible only to that process, never written into your real tree or $HOME. For Claude: AGENTS.mdCLAUDE.md and .agents/skills/<name>/.claude/skills/<name>/ (the base SKILL.md merged with an optional SKILL.claude.md overlay). Provider mode runs this same launch after setting the environment.

Status: Claude harness, project + global scope, implemented. Each scope lands at its own Claude location — project → ./CLAUDE.md + ./.claude/skills/, global (~/.config/agents/AGENTS.md + ~/.config/agents/skills/) → ~/.claude/CLAUDE.md

  • ~/.claude/skills/ (honours $CLAUDE_CONFIG_DIR). They're never merged; Claude reads both. Only those two ~/.claude paths are overlaid for the child — your ~/.claude.json auth and other settings are untouched.

kimi (--wrapper kimi) is also supported. kimi reads the project AGENTS.md natively, so agedum leaves it in place; it has no user-scope AGENTS.md, so the global AGENTS.md is injected via a transient --agent-file YAML (no --agent-file is added when there's no global scope). Skills are binds: global → ~/.kimi/skills/, project → ./.kimi/skills/ (both auto-read by kimi).

opencode (--wrapper opencode) is supported too — pure path-discovery, like Claude. The project AGENTS.md is read natively (./AGENTS.md); the global AGENTS.md binds to ~/.config/opencode/AGENTS.md; skills bind to ./.opencode/skills/ (project) and ~/.config/opencode/skills/ (global), both searched before .agents/skills/ so the overlaid copy wins. No extra flags. Wrapper mode is Linux-only and requires bwrap on PATH.

Cline (--wrapper cline) is supported as well — like opencode, pure path-discovery. The project AGENTS.md is read natively (Cline reads it as a cross-tool rules file); the global AGENTS.md binds to the cross-tool path ~/.agents/AGENTS.md; skills bind to ./.cline/skills/ (project) and ~/.cline/skills/ (global, $CLINE_DATA_DIR-aware). No extra flags. Cline also works in provider modeagedum <provider> maps the config to Cline's CLI flags (--model/--provider/--thinking/--plan) and passes the token via --key.

reasonix (--wrapper reasonix) is supported as well — the DeepSeek-native reasonix agent, pure path-discovery like opencode/Cline. The project AGENTS.md is read natively (one of its memory docs); the global AGENTS.md binds to ~/.config/reasonix/AGENTS.md; skills bind to ./.reasonix/skills/ (project) and ~/.reasonix/skills/ (global), both outranking .agents/skills/ so the overlaid copy wins. No extra flags. reasonix also works in provider modeagedum <provider> maps model to --model <name> on the chat/run subcommand and exports the token (reasonix reads it via the provider's api_key_env); --run maps to reasonix run "<text>", while --prompt is unsupported (chat can't be pre-seeded).

aider (--wrapper aider) is supported as well — but it differs from the others. aider has no native instruction discovery and no skills mechanism, so agedum injects each scope's AGENTS.md via aider's --read read-only-context flag (the instructions analogue of kimi's --agent-file; no binds), and does not inject skills. In provider mode the config maps to aider's CLI flags (--model / --weak-model / --editor-model / --reasoning-effort), the key rides the environment (litellm), and a baseUrl sets OPENAI_API_BASE. Git integration is disabled by default (--no-git), because agedum's namespace shares the real .git and aider auto-commits — set git: true to opt back in. --run maps to aider --message "<text>"; --prompt is unsupported (--message runs once and exits).

[!NOTE] pi (--wrapper pi) is supported as well — the earendil-works pi agent, pure path-discovery like opencode/Cline/reasonix. The project AGENTS.md is read natively (cwd→root walk); the global AGENTS.md binds to ~/.pi/agent/AGENTS.md; skills bind to ./.pi/skills/ (project) and ~/.pi/agent/skills/ (global). No extra flags. In provider mode model / provider / thinking map to CLI flags and the key rides the environment by name. pi has no base-URL flag, so a baseUrl makes agedum generate ~/.pi/agent/models.json (a provider named agedum, key referenced by $VAR); a subagentModel generates ~/.pi/agent/settings.json routing every pi-subagents built-in agent — both merged onto your existing files. --prompt seeds pi "<text>"; --run maps to pi --print "<text>".

[!NOTE] codex (--wrapper codex) is supported as well — the OpenAI Codex CLI, pure path-discovery like opencode/Cline/reasonix/pi. The project AGENTS.md is read natively (work-dir→root walk); the global AGENTS.md binds to ~/.codex/AGENTS.md ($CODEX_HOME-aware); skills bind to ./.codex/skills/ (project) and ~/.codex/skills/ (global). No extra flags. In provider mode model maps to -m and the key rides the environment by name. codex has no base-URL flag, so a baseUrl is passed as -c model_providers.… overrides (a provider named agedum). Recent codex speaks only the Responses API, so a Chat-Completions endpoint (DeepSeek etc.) sets chatCompletions: true and agedum interposes a local ResponsesToChatProxy (the FoldProxy sibling) that translates codex's Responses requests to/from /chat/completions. codex custom agents are bound three ways: subagentModel (one fast ~/.codex/agents/flash.toml), codexAgents: <dir> (bind every *.toml into ~/.codex/agents/, personal scope), and codexProjectAgents: <dir> (into .codex/agents/, project scope) — sandbox defaulted by agedum, delegates the primary can spawn. --prompt seeds codex "<text>"; --run maps to codex exec "<text>".

Usage

# Provider mode — launch a harness from a provider config, env resolved from .env:
agedum claude-deepseek-auto                       # resolve the named provider, launch claude
agedum claude-deepseek-auto -p "review this"      # extra args go to the harness
agedum claude-deepseek-auto --prompt "review this"  # seed an initial prompt, stay interactive
agedum claude-deepseek-auto --run "review this"     # run the prompt non-interactively, then exit
agedum ./providers/my-claude.json                 # a config path instead of a name
agedum claude-deepseek-auto --dry-run             # print resolved env, virtual files + argv

# Wrapper mode (low-level; provider mode builds on it) — virtual files, no provider env:
agedum --wrapper claude -- claude --model sonnet -p "review this"
agedum --wrapper cline -- cline task "review this"  # drive Cline with the same source
agedum --wrapper reasonix -- reasonix chat          # drive reasonix with the same source
agedum --wrapper aider -- aider --no-git            # drive aider (pass --no-git in wrapper mode)
agedum --wrapper pi -- pi                           # drive pi with the same source
agedum --wrapper codex -- codex                     # drive codex with the same source
agedum --wrapper claude --dry-run -- claude       # list what would be injected, don't run

agedum --providers                                # list the provider configs (name, harness, model)
agedum --version

agedum --providers lists every *.json config in $AGENTS_PROVIDERS_DIR (default ~/.config/agents/providers) as name harness model — the names you pass to agedum <name>.

agedum <name> is the normal way to launch. Wrapper mode is the lower-level entry it uses: everything after -- is the command, run verbatim, and --wrapper <harness> chooses the format; --dry-run prints the injected virtual files without running. Injected paths must be gitignored — agedum refuses to overlay a git-tracked file (the namespace shares your real .git).

Documentation

Full docs at agedum.vcoeur.com:

  • Source & scopes — the AGENTS.md + .agents/skills/ layout, and the project vs global scopes
  • Wrapper mode — run a command in the injected context; how each harness resolves
  • Provider mode — launch a harness from a provider config JSON
  • Harnesses — one page per harness: wrapper resolution + provider config
  • CLI reference and Internals — the mount-namespace launch and its safety rules

Install

pipx install agedum        # standalone CLI (once published)

Develop

make dev-install   # uv sync --all-groups
make test          # pytest
make lint          # ruff check + format --check
make run -- --version
make docs          # build the docs site (strict); docs-serve for live preview

Python ≥ 3.12, managed with uv. The version is derived from the git tag (vX.Y.Z) at build time via hatch-vcs — never committed.

Release

Tag the commit vX.Y.Z and push the tag; the release workflow builds and publishes to PyPI via OIDC trusted publishing.

License

MIT — see LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

agedum-0.54.0.tar.gz (333.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

agedum-0.54.0-py3-none-any.whl (92.8 kB view details)

Uploaded Python 3

File details

Details for the file agedum-0.54.0.tar.gz.

File metadata

  • Download URL: agedum-0.54.0.tar.gz
  • Upload date:
  • Size: 333.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for agedum-0.54.0.tar.gz
Algorithm Hash digest
SHA256 7d0a8c196bb53d54e88f765edaad553871170612821d1264f51e8c31950fa859
MD5 5ff8ed5e5f3a4a882ff81c51d65987b3
BLAKE2b-256 26c6af385d33a215de7fbcc89b6b78c1e16d5f42b7be7a9e9cfe36308770d1ae

See more details on using hashes here.

Provenance

The following attestation bundles were made for agedum-0.54.0.tar.gz:

Publisher: release.yml on vcoeur/agedum

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file agedum-0.54.0-py3-none-any.whl.

File metadata

  • Download URL: agedum-0.54.0-py3-none-any.whl
  • Upload date:
  • Size: 92.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for agedum-0.54.0-py3-none-any.whl
Algorithm Hash digest
SHA256 965cc10b106a293ab88b319be2b6903a94a6ec4105eb91d6638dfe6f3bf6aede
MD5 b5c180d74948a08d6c413506237b0e6d
BLAKE2b-256 b5041f03259615ffb49c4d8f361e0d3ef1fe144e6267a83bb6d7b918ea5142c0

See more details on using hashes here.

Provenance

The following attestation bundles were made for agedum-0.54.0-py3-none-any.whl:

Publisher: release.yml on vcoeur/agedum

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.54.0 This release

2 files

0.53.0

2 files

0.52.0

2 files

0.51.0

2 files

0.50.0

2 files

0.49.0

2 files

0.48.1

2 files

0.48.0

2 files

0.47.0

2 files

0.46.0

2 files

0.45.2

2 files

0.45.1

2 files

0.45.0

2 files

0.44.0

2 files

0.43.1

2 files

0.43.0

2 files

0.42.1

2 files

0.42.0

2 files

0.41.0

2 files

0.40.1

2 files

0.40.0

2 files

0.39.0

2 files

0.38.0

2 files

0.37.0

2 files

0.36.0

2 files

0.35.0

2 files

0.34.0

2 files

0.33.0

2 files

0.32.0

2 files

0.31.2

2 files

0.31.1

2 files

0.31.0

2 files

0.30.0

2 files

0.29.0

2 files

0.28.0

2 files

0.27.0

2 files

0.26.0

2 files

0.25.5

2 files

0.25.4

2 files

0.25.3

2 files

0.25.2

2 files

0.25.1

2 files

0.25.0

2 files

0.24.0

2 files

0.23.0

2 files

0.22.0

2 files

0.21.0

2 files

0.20.1

2 files

0.20.0

2 files

0.19.0

2 files

0.18.0

2 files

0.17.0

2 files

0.16.0

2 files

0.15.1

2 files

0.15.0

2 files

0.14.0

2 files

0.13.2

2 files

0.13.1

2 files

0.13.0

2 files

0.12.0

2 files

0.11.0

2 files

0.10.1

2 files

0.10.0

2 files

0.9.7

2 files

0.9.6

2 files

0.9.5

2 files

0.9.4

2 files

0.9.3

2 files

0.9.2

2 files

0.9.1

2 files

0.9.0

2 files

0.8.0

2 files

0.7.0

2 files

0.6.0

2 files

0.5.0

2 files

0.4.0

2 files

0.3.1

2 files

0.3.0

2 files

0.2.1

2 files

0.2.0

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page