Skip to content

~ blackpaw studio

leo

Agent supervision and task scheduling for coding agents.

One supervisor for claude, codex, and opencode.
Persistent agents and scheduled tasks. Drive them from the CLI, a browser, or any chat app.

curl -fsSL leo.blackpaw.studio/install | sh

More install options ↓

What Leo does

Supervised agents

Long-running agents spawned from templates that run like a service. Each agent gets its own workspace, model, and channel plugins, auto-restarts, and survives daemon restarts.

Scheduled tasks

Cron-driven prompts that invoke your coding agent on a schedule. Write a prompt file, pick a cadence, walk away.

Agent templates

Reusable blueprints for ephemeral agents. Preset the model, MCP, and workspace, then dispatch an agent on demand.

Attachable sessions

Every agent and session runs in its own named tmux session. Drop in live, locally or over SSH, and take over mid-flight.

Remote CLI

One binary, two roles. Run the supervisor on a server and drive it from your laptop over SSH.

Web dashboard

Agents, tasks, and config, all from a browser on your LAN.

See Leo in action

leo
$ leo agent spawn assistant
spawned assistant (workspace: ~/.leo/workspace)

$ leo agent spawn coding --repo blackpaw-studio/leo --worktree feat/cache
spawned leo-coding-blackpaw-studio-leo-feat-cache (branch: feat/cache)
attach with: leo agent attach leo-coding-blackpaw-studio-leo-feat-cache

$ leo task add --name weekly-audit --schedule "0 9 * * 1" --prompt-file audits/weekly.md
Task "weekly-audit" added.

Monday 09:00: weekly-audit running, complete in 38s
Notification: telegram · weekly audit: 4 PRs need attention
    

channels

Control Leo from your pocket.

Pair any Claude Code channel plugin (Telegram, Discord, iMessage) and drive supervised agents and scheduled tasks from chat. Leo ships a universal command set, so every stock plugin gets /tasks, /agent, /stop, and /clear for free.

  1. Install a channel plugin

    claude plugin install telegram@claude-plugins-official

    Want voice replies, inline ask-prompts, and richer attachment handling? Swap in our fork, blackpaw-telegram.

  2. Pair your account

    DM the bot and paste the pairing code back into your session. Flip to allowlist once you’re in.

  3. Reference it in channels:

    Add plugin:telegram@claude-plugins-official to any agent template or task. Leo routes every inbound command through a shared MCP server. No plugin changes required.

  4. Give your bot a personality

    Pin a subagent with agent: in the owning template's harness_options:. The supervised agent adopts that role and voice, and every reply in chat comes back in the same tone.

leo
online
You: what shipped on leo-website today?
leo: Three commits landed on main: hero CTA linking to the examples guide; footer link to the docs examples page; real Blackpaw paw mark in the footer and favicon.
You: /tasks
leo: You have 3 scheduled tasks: weekly-audit (0 9 * * 1, next Mon 09:00), daily-triage (0 9 * * *, tomorrow 09:00), release-digest (0 17 * * 5, Fri 17:00).
You: /agent coding blackpaw-studio/leo
leo: Spawned as leo-coding-blackpaw-studio-leo. Attach in the Claude app when you’re ready.
        

Install

curl -fsSL leo.blackpaw.studio/install | sh

Requires tmux and a coding agent CLI: claude, codex, or opencode.

Then run leo setup to get started.