Skip to main content

Drive any agent CLI from an agent-neutral source shape (AGENTS.md + .agents/skills), translating per harness at launch.

Project description

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 --wrapper <harness> -- <command> — at launch, 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).
  • agedum --build-script conf.json [out.sh] — compile a provider config JSON into a standalone shell wrapper that sources a .env, validates the required vars, exports the provider/model/auth environment, and execs agedum --wrapper. The two compose: the generated wrapper sets the environment, then hands off to the wrapper mode for skills/instructions injection.

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 + ~/.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.

Usage

# Wrapper mode — virtual files injected from the project + global source:
agedum --wrapper claude   -- claude --model sonnet -p "review this"
agedum --wrapper claude   -- claude                      # interactive
agedum --wrapper kimi     -- kimi -p "explain this code"
agedum --wrapper opencode -- opencode run "explain this code"

# Build-script mode — compile a provider config into a launcher script:
agedum --build-script providers/claude-deepseek-auto.json bin/claude-deepseek-auto.sh
agedum --build-script --check providers/claude-deepseek-auto.json bin/claude-deepseek-auto.sh

agedum --version

In wrapper mode, everything after -- is the command, run verbatim; --wrapper <harness> chooses the format. The two are decoupled, so one context can front any command. Injected paths must be gitignored — agedum refuses to overlay a git-tracked file (the namespace shares your real .git). The bare --claude / --kimi / --opencode flags remain as deprecated aliases for --wrapper <harness>.

Documentation

Full docs at agedum.vcoeur.com:

  • Source shape — the structure of AGENTS.md and .agents/skills/
  • Scopes — project vs global (user) scope, and where each lands
  • Harnesses — exactly what agedum does for each --wrapper <harness>
  • Build-script — compile a provider config JSON into a launcher script
  • 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.

Project details


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.7.0.tar.gz (172.0 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.7.0-py3-none-any.whl (22.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: agedum-0.7.0.tar.gz
  • Upload date:
  • Size: 172.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for agedum-0.7.0.tar.gz
Algorithm Hash digest
SHA256 d3bdae4e7f8ab120fd9850b24013790c317d5c4df3ebc5274d69a81f7e614dbb
MD5 a90fbeb610b9ec8970958636fe211f58
BLAKE2b-256 48204c13f41518b39eaaf0d16d6f9ac93d836066822fce038d152e4c1e1e3b69

See more details on using hashes here.

Provenance

The following attestation bundles were made for agedum-0.7.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.7.0-py3-none-any.whl.

File metadata

  • Download URL: agedum-0.7.0-py3-none-any.whl
  • Upload date:
  • Size: 22.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for agedum-0.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2bc5aef0bacb83b51f7ddfe969bb0584aa3e7dd7b865a4c003ff528efd66658d
MD5 6c803fa31dae24f35b398c4936439bf8
BLAKE2b-256 d3fc81bb310e764782b7b8a408dcaa151b5c029f22468313c4f6624a0d2f1d93

See more details on using hashes here.

Provenance

The following attestation bundles were made for agedum-0.7.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.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page