Ennio is built around 7 pluggable slots. Each slot defines a trait, and Ennio ships with concrete implementations you can swap per-project.
| Slot | Trait Location | Purpose |
| Agent | ennio-core | The AI coding agent to run |
| Runtime | ennio-core | How the agent process is managed |
| Workspace | ennio-core | How the working directory is created |
| Tracker | ennio-core | Issue tracker integration (fetch issues, update status) |
| SCM | ennio-core | Source control (PR status, reviews, merge) |
| Notifier | ennio-core | Where notifications are sent |
| Terminal | ennio-core | Browser-based terminal access to sessions |
| Name | Description |
claude-code | Anthropic’s Claude Code CLI agent |
aider | Aider AI coding assistant |
codex | OpenAI Codex CLI |
opencode | OpenCode agent |
| Name | Description |
tmux | Runs the agent inside a tmux session (default). Supports attach, send-keys, capture-pane. |
process | Direct child process. Simpler but no terminal attach. |
ssh | Runs the agent on a remote machine via SSH + tmux. |
| Name | Description |
worktree | Creates a git worktree from the existing repo (default). Fast, shares git objects. |
clone | Full shallow clone of the repository. Fully isolated but slower. |
Both workspace types support:
symlinks — symlink files into the workspace (e.g., .env)
post_create — shell commands run after workspace creation (e.g., npm install)
| Name | Description |
github | GitHub Issues — fetch issue details, create branches from issue titles |
linear | Linear — fetch issue details and metadata |
| Name | Description |
github | GitHub PRs — check CI status, get reviews, merge PRs, auto-merge |
| Name | Description |
desktop | Desktop notifications via notify-send (Linux) or osascript (macOS) |
slack | Slack incoming webhooks |
webhook | Generic HTTP POST to any URL |
| Name | Description |
web | WebSocket-based terminal access through the browser |
Set global defaults and override per-project:
defaults:
runtime: tmux
agent: claude-code
workspace: worktree
notifiers:
- desktop
projects:
- name: frontend
agent: aider # use aider for this project
workspace: clone # full clone instead of worktree
# runtime inherits tmux from defaults
Fine-tune agent behavior per-project:
projects:
- name: my-app
agent_config:
model: opus
permissions: "--dangerously-skip-permissions"
passthrough:
max_turns: 200
agent_rules:
- "Always write tests for new code"
- "Use conventional commits"
- "Never modify the database schema without a migration"
| Field | Description |
model | Model to use (e.g., opus, sonnet) |
permissions | Permission mode for the agent |
passthrough | Additional key-value pairs passed through to the agent |
agent_rules are passed to the agent as system instructions alongside the task prompt.