Skip to main content
Claude Code can work with Action Llama in two ways: editing your project files using the CLAUDE.md context file, and interacting with the running scheduler through the MCP server. Both are set up automatically when you create a new project with al new.

CLAUDE.md — project context for Claude Code

Every al new project includes a CLAUDE.md at the project root. This is a symlink to a reference document shipped with the @action-llama/action-llama package that contains everything Claude Code needs to work on an Action Llama project:
  • How agent configuration works (SKILL.md for portable metadata + instructions, config.toml for runtime config)
  • How agent prompts are assembled at runtime (system prompt, user prompt blocks, trigger context)
  • Available agent commands (signals, subagent calls, resource locks)
  • Credential context and environment variables
  • Filesystem constraints inside the Docker container
When you open your project in Claude Code, it reads CLAUDE.md automatically. This means you can ask Claude to create new agents, edit SKILL.md instructions, configure webhooks, and adjust agent params — and it understands the full context of how Action Llama works.

What you can do

  • “Create a new agent that monitors Sentry for new errors and opens GitHub issues” — Claude writes a SKILL.md with instructions and a config.toml with the right runtime config (credentials, schedule, webhooks).
  • “Add webhook support to the dev agent for issue comments” — Claude edits the config.toml to add a webhook trigger and updates the SKILL.md instructions to handle both scheduled and webhook triggers.
  • “Change the reviewer agent to use GPT-4o” — Claude updates the models field in the agent’s config.toml.
  • “The dev agent keeps force-pushing, fix the instructions” — Claude reads the SKILL.md body and adds explicit rules.
Claude Code reads CLAUDE.md from the project root automatically. You don’t need to paste documentation or explain how Action Llama works — it already knows.

Slash commands — development workflows

Action Llama projects include five Claude Code slash commands in .claude/commands/. These are markdown prompt templates that you invoke with /<name> in Claude Code to perform common development workflows. New projects created with al new include these automatically. For existing projects, run:
al claude init

Available commands

CommandDescription
/new-agent <name>Create a new agent interactively — asks for trigger type, schedule, credentials, then writes the SKILL.md
/run [agent]Start the scheduler if needed, trigger an agent run, and summarize the results
/debug [agent]Pull recent warnings/errors, read the agent’s SKILL.md, and diagnose the root cause with a concrete fix
/iterate [agent]Run → analyze → edit instructions → repeat (up to 3 cycles) until the agent runs cleanly
/statusRich overview combining scheduler state and agent details into a formatted table with actionable suggestions

Usage

Commands that accept an agent name use Claude Code’s $ARGUMENTS mechanism — type the command followed by the agent name:
/run dev
/debug reviewer
/new-agent my-new-agent
These commands use the MCP tools (described below) to interact with the running scheduler, so the MCP server must be configured. This is done automatically by al new and al mcp init.
Slash commands live in .claude/commands/ as plain markdown files. You can customize them or add your own — Claude Code discovers them automatically.

MCP server — live gateway interaction

The MCP server lets Claude Code interact with a running Action Llama scheduler over stdio. Instead of switching to a terminal to check status, trigger runs, or read logs, you can ask Claude directly.

Setup

New projects created with al new include a .mcp.json file that Claude Code discovers automatically:
{
  "mcpServers": {
    "action-llama": {
      "command": "al",
      "args": ["mcp", "serve"]
    }
  }
}
For existing projects, run:
al mcp init
This creates or updates .mcp.json in the project root. Claude Code picks it up on next launch.

How it works

When Claude Code starts, it spawns al mcp serve as a subprocess. The MCP server communicates over stdin/stdout using JSON-RPC. Under the hood, it calls the same gateway HTTP API that the CLI uses — so anything you can do with al commands, Claude can do through the MCP server.
Claude Code  <--stdin/stdout-->  al mcp serve  <--HTTP-->  al start (gateway)
                                      |
                                 filesystem (agents/, .al/logs/)
Some tools (like listing agents) work offline by reading the filesystem directly. Others (like triggering runs or reading logs) require the scheduler to be running.

Available tools

The MCP server exposes nine tools, all prefixed al_:
ToolDescription
al_startStart the scheduler. Spawns al start --headless in the background and waits for the gateway to become ready.
al_stopGracefully stop the scheduler.
al_statusShow scheduler state, agent states, running instances, and queue sizes.
al_agentsList agents with config, schedule, and webhooks. Pass a name for details including SKILL.md body. Works offline.
al_runTrigger a single agent run.
al_logsView agent or scheduler logs with time, instance, and level filtering.
al_pausePause the scheduler or a single agent by name.
al_resumeResume the scheduler or a single agent by name.
al_killKill an agent (all instances) or a single instance by ID.

Example conversations

Check what’s running:
“What’s the status of my agents?”
Claude calls al_status and shows scheduler state, which agents are idle/running/paused, and queue depths. Trigger a run and watch the result:
“Run the dev agent and show me what it did”
Claude calls al_run with name dev, waits a moment, then calls al_logs to show the agent’s actions in conversation format. Debug a failing agent:
“The reviewer agent keeps erroring out. Show me the last few runs.”
Claude calls al_logs with name reviewer, level error, and reviews the output. It can then read the SKILL.md via al_agents and suggest fixes. Start everything from scratch:
“Start the scheduler and pause the devops agent — I only want dev running right now”
Claude calls al_start, waits for it to come up, then calls al_pause with name devops.

Log viewing

The al_logs tool supports the same filtering as the CLI:
ParameterDescription
nameAgent name, or "scheduler" for scheduler logs
linesNumber of entries to fetch (default 100, max 1000)
instanceFilter to a specific instance ID
afterISO 8601 timestamp — only entries after this time
beforeISO 8601 timestamp — only entries before this time
levelMinimum level: trace, debug, info, warn, error
rawIf true, returns full JSON entries instead of conversation view
By default, logs are formatted in conversation style — showing assistant text, bash commands, tool starts, and errors. This gives Claude a clean view of what the agent actually did, without noise.

Resources

The MCP server also exposes agent SKILL.md files as resources at al://agents/{name}/skill. This lets Claude Code read the full instructions for any agent without going through the filesystem.

CLI commands

al mcp serve

Starts the MCP stdio server. This is what Claude Code spawns as a subprocess — you don’t typically run it directly.
al mcp serve
al mcp serve -p ./my-project
al mcp serve -E production
OptionDescription
-p, --project <dir>Project directory (default: .)
-E, --env <name>Environment name — routes gateway calls to a remote environment
The environment is resolved the same way as all CLI commands: explicit -E flag, then AL_ENV env var, then .env.toml’s environment field. If your project is bound to a remote environment, MCP tool calls go to the remote gateway automatically.

al mcp init

Writes (or merges into) .mcp.json in the project root so Claude Code discovers the MCP server automatically.
al mcp init
al mcp init -p ./my-project
OptionDescription
-p, --project <dir>Project directory (default: .)
If .mcp.json already exists, merges the action-llama entry into the existing mcpServers object. If an action-llama entry already exists, it is overwritten.

al claude init

Scaffolds Claude Code slash commands into .claude/commands/ in the project directory. Existing command files are not overwritten.
al claude init
al claude init -p ./my-project
OptionDescription
-p, --project <dir>Project directory (default: .)

See Also