Observed since 20 Oct, 21:22 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
Drive any agent CLI from an agent-neutral source shape (AGENTS.md + .agents/skills), translating per harness at launch.
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.
AGENTS.md (plain markdown)..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|.yaml> [harness args] — the primary form. Read a
provider config — JSON, or YAML declaring schema: agedum-provider/v1 or /v2 —
(all relative refs resolved under ${AGENTS_PROVIDERS_DIR:-~/.config/agents/providers};
absolute paths are used as-is, with no CWD fallback),
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. Interactive --prompt is unsupported for kimi, reasonix,
and aider. --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 and its children. The injected content is temporary, not
a no-writes guarantee: mountpoint stubs, prepared state/injection directories, writable
provider seeds, and harness state can touch the host. For Claude:
AGENTS.md → CLAUDE.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. An optional global Claude overlay also bindssettings.json+ hookscripts/read-only; automatic project transcript hooks bind.claude/settings.local.jsonread-only when untracked. Do not rely on permission saves to that overlaid file. Your~/.claude.jsonauth is not overlaid.kimi (
--wrapper kimi) is also supported. kimi reads the projectAGENTS.mdnatively, so agedum leaves it in place; globalAGENTS.mdbinds to~/.kimi-code/AGENTS.md. Skills are binds: global →~/.kimi-code/skills/, project →./.kimi-code/skills/(both auto-read). Global targets honourKIMI_CODE_HOME; no instruction flags are appended.--runmaps tokimi --prompt "<text>"(no--promptis unsupported.opencode (
--wrapper opencode) is supported too — pure path-discovery, like Claude. The projectAGENTS.mdis read natively (./AGENTS.md); the globalAGENTS.mdbinds 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 requiresbwrapon PATH.Cline (
--wrapper cline) is supported as well — like opencode, pure path-discovery. The projectAGENTS.mdis read natively (Cline reads it as a cross-tool rules file); the globalAGENTS.mdbinds 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 mode —agedum <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 projectAGENTS.mdis read natively (one of its memory docs); the globalAGENTS.mdbinds 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 mode —agedum <provider>mapsmodelto--model <name>on thechat/runsubcommand and exports the token (reasonix reads it via the provider'sapi_key_env);--runmaps toreasonix run "<text>", while--promptis unsupported (chatcan'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'sAGENTS.mdat a read-only bound cache path named by aider's--readflag, 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 abaseUrlsetsOPENAI_API_BASE. Git integration is disabled by default (--no-git), because agedum's namespace shares the real.gitand aider auto-commits — setgit: trueto opt back in.--runmaps toaider --message "<text>";--promptis unsupported (--messageruns once and exits).
[!NOTE] pi (
--wrapper pi) is supported as well — the earendil-works pi agent, pure path-discovery like opencode/Cline/reasonix. The projectAGENTS.mdis read natively (cwd→root walk); the globalAGENTS.mdbinds to~/.pi/agent/AGENTS.md; skills bind to./.pi/skills/(project) and~/.pi/agent/skills/(global). No extra flags. In provider modemodel/provider/thinkingmap to CLI flags and the key rides the environment by name. pi has no base-URL flag, so abaseUrlmakes agedum generate~/.pi/agent/models.json(a provider namedagedum, key referenced by$VAR); asubagentModelgenerates~/.pi/agent/settings.jsonrouting every pi-subagents built-in agent — both merged onto your existing files.--promptseedspi "<text>";--runmaps topi --print "<text>".
[!NOTE] codex (
--wrapper codex) is supported as well — the OpenAI Codex CLI, pure path-discovery like opencode/Cline/reasonix/pi. The projectAGENTS.mdis read natively (work-dir→root walk); the globalAGENTS.mdbinds to~/.codex/AGENTS.md($CODEX_HOME-aware); skills bind to./.codex/skills/(project) and~/.codex/skills/(global). No extra flags. In provider modemodelmaps to-mand the key rides the environment by name. codex has no base-URL flag, so abaseUrlis passed as-c model_providers.…overrides (a provider namedagedum). Recent codex speaks only the Responses API, so a Chat-Completions endpoint (DeepSeek etc.) setschatCompletions: trueand agedum interposes a localResponsesToChatProxy(theFoldProxysibling) 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*.tomlinto~/.codex/agents/, personal scope), andcodexProjectAgents: <dir>(into.codex/agents/, project scope) — sandbox defaulted by agedum, delegates the primary can spawn.--promptseedscodex "<text>";--runmaps tocodex exec "<text>".
# 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 claude/my-claude.json # relative to the providers root, not CWD
agedum /absolute/path/my-claude.yaml # absolute config path
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 / *.yaml / *.yml 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 untracked — agedum refuses to overlay a git-tracked file (the
namespace shares your real .git). Keep targets gitignored as an operator prerequisite;
agedum does not enforce gitignore.
Full docs at agedum.vcoeur.com:
AGENTS.md + .agents/skills/ layout, and the project vs global scopespipx install agedum # standalone CLI (once published)
make dev-install # uv sync --all-groups
make test # pytest
make lint # ruff check + format --check
make run ARGS="--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.
Tag the commit vX.Y.Z and push the tag; the release workflow builds and
publishes to PyPI via OIDC trusted publishing.
MIT — see LICENSE.
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 0.70.0 | 18 Oct 2026 | 2 |
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 21:22 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:ebb1cff68a7da608964013b2a0012b084be6094eea68624451446cd9b6814844