LOCAL ENGINEERING TEAM

An autonomous engineering team that ships while you're away.

Alfred turns Claude Code, Codex, or OpenCode into a spec-driven engineering team. Named agents plan the work, write code, test it, review each other, and open pull requests. Alfred keeps working without you at the keyboard. You approve risky actions and decide what merges.

THE DESKTOP APP

See and steer your agents from one desktop app.

Alfred Desktop is the recommended onboarding path. It detects an existing install, starts or connects to the local server, checks GitHub and engine auth, guides repo selection, and lets you choose a roster theme or custom display names. Slack is still where teams discuss and approve plans.

SETUP CHECKS existing install detected
Tools GitHub Repos Team Slack First request
Claude 5h window resets in 2h 10m
58% of window used
Codex today 1.8M tokens
today, across sessions
Claude weekly 69% left
resets Mon 00:00
YOUR AGENTS Batman roster · custom names ready
  • Batman Architect: drives cross-repo features every 1h, gated holding
  • Lucius Senior dev: writes implementation PRs every 20m live
  • Drake Planner: turns requests into tasks every 2h live
  • Bane QA: adds missing tests every 4h live
  • Ra's al Ghul Reviewer: checks pull requests every 30m live
  • Nightwing Fixer: handles review and CI feedback every 45m idle
  • Robin Triage: sorts incoming bugs every 3h live
  • Gordon Ops: flags stale docs and health drift daily 08:00 idle
NEW REQUEST Alfred checks it is ready to build
What should Alfred do?
Add a per-org API rate limiter to acme-org/api, then wire the dashboard toggle in org/web. Ship behind a flag.
saved plan · rate-limit-rollout 2 repos flagged
Alfred Desktop puts onboarding, agents, work, and local runtime checks in one app. Slack stays connected for approvals and conversation.

How the desktop app works

PRODUCT TOUR

See a request move from approval to review.

Recorded from the repository's sample-data fixture in light mode. It shows Ask, Work, Code, Agents, and Settings without using an operator account or live repository.

WHAT IT DOES FOR YOU

Specialist agents carry work from request to reviewed PR.

Each role has one job. The default install includes planning, architecture, implementation, review, test coverage, review fixes, cleanup, summaries, and policy-gated merge.

Batman: architect for cross-repo features

Reads the parent issue or Slack plan, checks the affected repos, gets approval, and files scoped repo-level work for the implementation roles.

[10:30] architect drafted bundle:billing-v2
[10:31] architect posted plan to Slack
[10:34] scope approved
[10:35] architect opened backend -> web -> mobile tasks

Lucius: senior-dev opens PRs

Picks up a scoped task, makes its own copy of the repo, runs the selected coding CLI with the full project in context, and opens a pull request with tests.

[12:04] senior-dev claimed your-backend#247
[12:04] senior-dev worktree ~/.alfred/wt/12042118/
[12:18] senior-dev PR #1247 opened

Drake: planner shapes single-repo work

Reads a Slack request, GitHub issue, or plain-text plan, asks for missing details, then files small tasks a coding agent can pick up on its own.

[09:02] drake refined settings plan
[09:02] drake filed your-backend#248 agent:implement
[09:03] drake linked acceptance checks

Ra's al Ghul: reviewer checks PRs

Reads the changes, runs your test suite in its own copy of the repo, leaves comments on the lines that need work, and marks the pull request ready or needs changes.

[12:18] ras-al reviewed PR#1247
[12:18] ras-al filed 2 inline nits
[12:19] ras-al labelled needs-changes

QA: Bane adds missing tests

Looks at recently changed files, finds the places that need coverage, and opens focused test PRs that stand on their own.

[15:10] bane found low coverage in billing
[15:23] bane PR #1250 opened
[15:24] bane labelled tests-only

Fixer: Nightwing handles review comments

Finds PRs opened by configured implementation roles with unresolved high-priority review comments, applies the fix in a clean worktree, and pushes the update back to the PR branch.

[16:01] nightwing found P1 on PR#1247
[16:08] nightwing pushed fix
[16:09] nightwing asked for re-review
WHAT ALFRED ADDS

Keep work moving between coding sessions.

Alfred claims selected work, creates an isolated worktree, invokes the selected coding CLI, routes the result through review, and reports each decision.

Coordinates work between prompts

Alfred claims the next approved task, assigns the configured role, isolates the run, routes review, records evidence, and reports when a decision is needed.

Runs on a Mac or Linux box you choose

Alfred runs on a Mac or Linux host you control and uses your authenticated Claude Code, Codex, or OpenCode CLI.

Slack is optional

You can plan and approve in Slack, the desktop app, or GitHub. Slack messages cannot bypass the configured approval or merge policy.

Keeps reviewed local memory

Alfred stores candidate lessons under ALFRED_HOME. Structural checks and a separate review decide what can affect later runs. Every memory action remains inspectable and reversible.

Works on one repo or many at once

Alfred can plan a single feature across several repos at the same time. It works the same way inside a monorepo, whether you use Turborepo, Nx, or Cargo workspaces.

Open source, MIT licensed

Every line is on GitHub at github.com/luminik-io/alfred. Fork it, read it, run it locally, or audit the code.

LOCAL MEMORY

Your agents keep a record of each run.

Alfred keeps reviewed lessons, file touches, failures, and current work under ALFRED_HOME. Structural checks and a separate model review control promotion. You can inspect, reject, retire, or revert each lesson.

01

Promotion has explicit checks.

Agents and trusted teammates can propose a lesson. Alfred applies structural checks and a separate model review before the lesson can affect later runs.

02

Past problems are easy to find.

Setup blockers, timeouts, and repeated test failures all land in one place. The next time something breaks, your agents start from what happened before instead of digging back through old Slack messages.

03

The memory loop stays local.

Embedded SQLite provides the default recalled-lesson store. FleetBrain keeps the operational ledger and review state. Redis remains an optional scale battery.

fleet-brain copy
$ alfred brain status
ok lessons 18
ok memory candidates 4
ok github items 37
ok bundle items 6
ok stale workers 0
$ alfred brain promotions
12 senior-dev owner/api evidence: PR#248
19 architect bundle evidence: issue#504
$ alfred brain failures --codename huntress
timeout playwright browser missing 3x
slack> memory harvest
preview huntress local setup lesson
slack> memory harvest now
queued candidate 21
$ alfred brain redis-sync --dry-run
would sync 18 reviewed lessons
slack> memory
slack> remember owner/api: keep retry copy testable
slack> memory promote 12
MEMORY A/B Synthetic fixture, N=10 (+2 controls), single engine run
80% to 0% repeated-mistake rate over 10 convention tasks, memory off then on
8.3% to 91.7% task success across all 12 tasks, memory off then on
240k vs 295k tokens in, memory on used fewer

The same suite of ten repo-convention tasks plus two controls ran twice through the claude CLI, changing only whether memory was on. It measures one thing: whether an agent repeats a mistake the fleet already learned about. Method and repro.

FROM ROUGH REQUEST TO SCOPED WORK

Batman handles the rollout. Lucius ships the PRs. Drake keeps smaller work scoped.

Start with a Slack thread, a GitHub issue, or a plain-text plan. Batman is the default-theme name for the public architect role: it handles approved multi-repo fan-out, Lucius handles repo-local implementation as senior-dev, and Drake turns smaller requests into clear tasks.

PLAN-TO-PR FLOW request  →  drake  →  agent:implement  →  PR
slack thread or plan.md ## What Org-scoped billing v2. ## Acceptance - /api/v1/invoices by org - Pricing page rewrite - Mobile settings v2 human starts, Alfred scopes DRAKE SCOPES files clear issues every 20 min agent:implement · backend Introduce BillingV2Service your-backend#247 agent:implement · frontend Pricing page rewrite your-frontend#572 agent:implement · mobile Settings screen v2 your-mobile#188 · queued

How Alfred helps structure the plan

THE ARCHITECT AGENT

Batman turns one large feature into repo-level work.

Batman is the default-theme name for the architect role. It reads the parent issue, checks the affected repos, plans the rollout, gets approval in Slack or the local client, and files scoped child issues. Senior-dev, test-engineer, fixer, reviewers, and the merge gate then finish each PR.

ARCHITECT PLAN · FAN-OUT parent issue → N child issues → N PRs
agent:large-feature org slug rollout specs#42 agent:bundle:add-org-slug ARCHITECT DRIVES plans, files, tracks agent:implement your-backend PR opened by senior-dev +162 / -34 in 4 files agent:implement your-frontend PR in review +98 / -12 in 3 files agent:implement your-mobile queued, no firing yet picked next interval
HOW IT WORKS

One run, from start to finish.

From the moment a run starts to the pull request it opens. The same five stages happen every time an agent fires.

ONE RUN, STEP BY STEP timer → agent → engine → Slack
01 · SCHEDULER launchd fires senior-dev every 1200s survives reboot 02 · AGENT senior-dev.py preflight, claim picks oldest open agent:implement 03 · WORKSPACE git worktree isolated workspace ~/.alfred/wt/... safe to crash 04 · ENGINE coding CLI Claude · Codex · OpenCode your provider login isolated config 05 · OUTPUT PR + report label flip, slack post agent:pr-open severity=info one run = one agent, one task, its own copy of the repo, one model call, one Slack update

See every step in a run

YOUR AGENTS, RIGHT NOW

What `alfred status` shows.

The status view lists configured roles, schedules, recent outcomes, and health. The example below shows the full local roster.

$ alfred status 21/21 loaded · live output
lucius hybrid 2m 8 8 0 0 0 $0.00 ok
drake hybrid 2h33m 0 0 0 0 0 $0.00 ok
bane hybrid 4h17m 0 0 0 0 0 $0.00 ok
rasalghul hybrid 6m 1 1 0 0 1 $0.00 ok
nightwing hybrid 1h32m 6 6 0 0 0 $0.00 ok
robin hybrid 1h32m 2 2 0 0 0 $0.00 ok
batman hybrid 1h34m 0 0 0 0 0 $0.00 ok
huntress - never 0 0 0 0 0 $0.00 idle until target URL exists
gordon - never 0 0 0 0 0 $0.00 idle until ECS cluster exists
automerge - 12m 0 0 0 0 0 $0.00 ok
agent-cleanup - 6h06m 0 0 0 0 0 $0.00 ok
memory-harvest - 1h01m 0 0 0 0 0 $0.00 ok
memory-auto-promote - 46m 0 0 0 0 0 $0.00 ok
code-map-refresh - 4h25m 0 0 0 0 0 $0.00 ok
agent-morning-brief - 2h05m 0 0 0 0 0 $0.00 ok
fleet-doctor - 1h36m 0 0 0 0 0 $0.00 ok
fleet-recap-morning - 1h21m 0 0 0 0 0 $0.00 ok
fleet-recap-evening - 1h21m 0 0 0 0 0 $0.00 ok
shipped-summary-daily - 1h30m 0 0 0 0 0 $0.00 ok
shipped-summary-weekly - 1h30m 0 0 0 0 0 $0.00 ok
proof-telemetry - 1h34m 0 0 0 0 0 $0.00 anonymous aggregate usage
Live alfred status output from a real Mac, captured 2026-06-30 after the OSS full-fleet install. This capture used subscription-backed Claude Code and Codex sessions, so Alfred recorded no separate model charge. Batman, Huntress, Gordon, Bane, Nightwing, and the support jobs are loaded from the first install.
GET STARTED

Check the wiring before real work starts.

Run doctor for setup health, then dry-run one agent to see the path it would take without touching GitHub, Slack, an engine, or your files.

terminal copy
$ alfred doctor
ok gh auth luminik-io
ok claude code authed
ok codex authed (optional)
ok launchd 21 agents loaded
ok run limits configured
$ alfred dry-run senior-dev
alfred dry-run: senior-dev
role: senior developer
mode: safe simulation
would: resolve config, acquire the agent lock, run preflight, and enter the runner
would not: mutate GitHub, post Slack, invoke an engine, or edit files