Unified configuration framework for AI coding agents — Claude Code, Copilot CLI, Pi, Codex, VS Code, opencode. One canonical TOML, one CLI, two deploy modes.
What you get
- One config at
~/.config/twagent/config.tomldescribes every skill, subagent, prompt, instruction template, and MCP server you care about. - One CLI (
twagent apply) renders Jinja templates, symlinks file artifacts, and compiles MCP configuration in each agent's native shape. - Runtime secrets stay as
${VAR}references (or Codex's environment-backed fields), sotwagentnever writes resolved credentials. - Two deploy modes: globally (each agent's default profile to
~/.claude/,~/.copilot/, etc.) or locally (into the current directory).
twagent apply --global # sync everything globally
twagent apply -s tw-claude # local: drop a profile into cwd
twagent apply --global -s e2e-emea # swap MCP env for the day
twagent apply --global -s e2e-emea -a copilot-cli # one agent only
Mental model
┌──────────────┐ ┌─────────────┐
│ Registries │ → │ Profiles │ → apply (local | global)
│ │ │ (composable │ │
│ instructions │ │ bundles) │ ▼
│ skills │ │ │ per-agent paths
│ subagents │ │ extends... │ (global or cwd-relative)
│ prompts │ │ │
│ servers │ │ │
└──────────────┘ └─────────────┘
- Artifacts live in registries — globally unique
name+sourcepath. - Profiles bundle artifact references, composable via
extends. - Agents declare capabilities and per-kind paths (global and per-project).
global_profileis the bridge: each agent names exactly one profile as its default loadout. When you runtwagent apply --global, the agent'sglobal_profileis resolved (including allextendschains) and the resulting artifacts are deployed to the agent'spaths.global.*locations.--selectis polymorphic (profile or artifact names, mixed) and exhaustive (only kinds in the selection deploy).
How global_profile works
[agents.copilot-cli]
global_profile = "tw-copilot" # ← this is the default loadout
[profiles.tw-copilot]
extends = ["core", "pr_review", "web_research"]
instructions = ["AGENT-md"]
[profiles.core]
skills = ["bkmr-memory", "twmux", "skill-creator", "tw-comprehend"]
[profiles.pr_review]
skills = ["tw-review", "tw-add-pr-review", "tw-check-pr"]
Running twagent apply --global resolves the full extends tree and deploys
all referenced skills, instructions, and servers to the agent's global paths.
Each agent can have a different global_profile, so Claude, Copilot, and
Pi can share profiles (via extends) while each carrying a distinct default
set.
Without a global_profile, apply --global skips that agent entirely — it
only deploys agents that declare one.
Install
uv tool install twagent
# or, from a clone:
make install
Python 3.13+. Optional: fzf >= 0.35 improves the --interactive picker.
First deploy
twagent edit --init # bootstrap a commented starter config
$EDITOR ~/.config/twagent/config.toml
twagent apply --global -n # preview
twagent apply --global # deploy
→ Full walkthrough: Quick Start (10 min) and Tutorial (30 min, two-agent setup).
Documentation
| Read | When |
|---|---|
| Overview | What twagent is, who it's for, supported agents. |
| Quick Start | First deploy in 10 minutes. |
| Tutorial | Realistic two-agent setup with project overlay and MCP secrets. |
| Reference: Commands | Every command, every flag. |
| Reference: Configuration | Full TOML schema with worked examples. |
| FAQ | Common questions and gotchas. |
Develop
uv sync
make test
make format
make lint
make build
License
BSD-3-Clause.
Release files for twagent 2.4.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| twagent-2.4.2.tar.gz | 82.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| twagent-2.4.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 137.1 kB
Release files / twagent-2.4.2.tar.gz
| Download URL | twagent-2.4.2.tar.gz |
|---|---|
| Size | 82.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d86af0b3828686dfb61d69a5ae84bc7755d55868207a046828e97a1dfe7d720c
|
|
BLAKE2b-256 checksum How to use checksums |
eaff08b34d0d93e22e1585b8cbc55594126cdbb8936f6161158c7337507ca1fb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.11
|
Release files / twagent-2.4.2-py3-none-any.whl
| Download URL | twagent-2.4.2-py3-none-any.whl |
|---|---|
| Size | 54.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
acc29a7c6865f667235afb18d80fede272ed736c00f5f6c40968486ba8550dd4
|
|
BLAKE2b-256 checksum How to use checksums |
d294b8dca718df971c6d4328e56c341823882fc230f6ab20df641ce3634e3315
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.11
|