Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Plugin System

Ennio is built around 7 pluggable slots. Each slot defines a trait, and Ennio ships with concrete implementations you can swap per-project.

Plugin Slots

SlotTrait LocationPurpose
Agentennio-coreThe AI coding agent to run
Runtimeennio-coreHow the agent process is managed
Workspaceennio-coreHow the working directory is created
Trackerennio-coreIssue tracker integration (fetch issues, update status)
SCMennio-coreSource control (PR status, reviews, merge)
Notifierennio-coreWhere notifications are sent
Terminalennio-coreBrowser-based terminal access to sessions

Available Implementations

Agent Plugins

NameDescription
claude-codeAnthropic’s Claude Code CLI agent
aiderAider AI coding assistant
codexOpenAI Codex CLI
opencodeOpenCode agent

Runtime Plugins

NameDescription
tmuxRuns the agent inside a tmux session (default). Supports attach, send-keys, capture-pane.
processDirect child process. Simpler but no terminal attach.
sshRuns the agent on a remote machine via SSH + tmux.

Workspace Plugins

NameDescription
worktreeCreates a git worktree from the existing repo (default). Fast, shares git objects.
cloneFull 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)

Tracker Plugins

NameDescription
githubGitHub Issues — fetch issue details, create branches from issue titles
linearLinear — fetch issue details and metadata

SCM Plugins

NameDescription
githubGitHub PRs — check CI status, get reviews, merge PRs, auto-merge

Notifier Plugins

NameDescription
desktopDesktop notifications via notify-send (Linux) or osascript (macOS)
slackSlack incoming webhooks
webhookGeneric HTTP POST to any URL

Terminal Plugins

NameDescription
webWebSocket-based terminal access through the browser

Configuration

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

Agent Configuration

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"
FieldDescription
modelModel to use (e.g., opus, sonnet)
permissionsPermission mode for the agent
passthroughAdditional key-value pairs passed through to the agent

agent_rules are passed to the agent as system instructions alongside the task prompt.