Local-first agent orchestration platform — one developer, many AI coding agents, single command center.
Project description
Ashlr AO
Local-first agent orchestration platform. One developer, many AI coding agents, single command center.
- Multi-agent orchestration — spawn, monitor, and coordinate Claude Code, Codex, Aider, and Goose agents from one dashboard
- Multi-repo projects — organize agents by project with per-project defaults, git branch tracking, and focus mode
- Auto-pilot — auto-restart stalled agents, auto-approve safe patterns, health-based auto-pause
- Real-time dashboard — live status cards, terminal output with ANSI colors, keyboard-driven workflow
Installation
pip install ashlr-ao
Prerequisites
- Python 3.11+
- tmux — agent process isolation and output capture
- At least one agent backend CLI:
- Claude Code:
npm i -g @anthropic-ai/claude-code - Codex:
npm i -g @openai/codex
- Claude Code:
# Install tmux
brew install tmux # macOS
sudo apt install tmux # Linux
Quick Start
# 1. Install and run
pip install ashlr-ao && ashlr
# 2. Open the dashboard
open http://127.0.0.1:5111
# 3. (Optional) Enable LLM-powered summaries
export XAI_API_KEY="your-key" && ashlr
Override the default port with ASHLR_PORT=8080 ashlr.
Features
Agent Orchestration
Each agent runs in an isolated tmux session. Ashlr captures terminal output every second, detects status via regex pattern matching, and surfaces questions requiring your input.
- Spawn agents with role, task, backend, model, and tool restrictions
- Pause, resume, restart, or kill agents individually or in bulk
- 9 built-in roles: Frontend, Backend, DevOps, Tester, Reviewer, Security, Architect, Docs, General
- Session resume — pick up where a previous agent left off
Multi-Repo Projects
Organize agents across repositories with project-level defaults.
- Per-project default backend, model, role, and working directory
- Git remote auto-detection and branch tracking per agent
- Filter agents by project, branch, or status
- Focus mode (
Cmd+Shift+F) — filter dashboard to a single project - Quick-switch between projects (
Cmd+1-9)
Auto-Pilot
Reduce manual intervention with configurable automation.
- Auto-restart — automatically restart agents that stall
- Auto-approve — approve safe patterns (with hardcoded blocklist for dangerous commands like
rm -rf, force push,DROP TABLE) - Auto-pause — pause agents when health score drops critically
- Browser notifications — per-event notification preferences
- Rate-limited: 5 auto-approvals per minute per agent
Fleet Templates
Save and deploy multi-agent configurations as reusable templates.
- Parameterized tasks with variables:
{branch},{project_name},{date} - One-click deploy to any project
- Fleet presets: Full Stack, Review Team, Quality Check
Real-Time Dashboard
Single HTML file with inline CSS/JS. No build step.
- Agent cards — role icon, name, project, git branch badge, live summary, status indicator
- Deep view — full terminal output with ANSI colors, activity feed, per-agent scratchpad
- Command bar (
Cmd+K) —@agentmentions,/commands, natural language via LLM - Bulk operations — select multiple agents, batch actions with variable templates
- Attention queue (
Cmd+Shift+A) — jump to agents needing input - Push-to-talk voice commands (Web Speech API)
Intelligence Layer
Optional LLM-powered features via xAI Grok (requires XAI_API_KEY).
- 1-line agent status summaries from terminal output
- Natural language command parsing ("spawn 3 agents on auth-service")
- Fleet analysis: detect conflicts, stuck agents, handoff opportunities (every 30s)
- Cross-agent handoff: agents can spawn successors with context
- Circuit breaker: 5 failures triggers 60s cooldown, falls back to regex
Multi-User Auth
Session-based authentication for team deployments.
- First registered user becomes admin and creates the organization
- Admin invites team members (Pro tier)
- Agent ownership enforcement — only owner or admin can control an agent
- All org members can view all agents (command center purpose)
Licensing
Open-core model with offline Ed25519-signed JWT licensing.
| Community (free) | Pro (paid) | |
|---|---|---|
| Concurrent agents | 5 | Up to 100 |
| Users | 1 | Up to 50 |
| Intelligence, Workflows, Fleet presets, Multi-user | Gated | Included |
| Core orchestration | Full | Full |
Keyboard Shortcuts
| Key | Action |
|---|---|
Cmd+K |
Command palette |
Cmd+N |
New agent |
Cmd+, |
Settings |
Cmd+Shift+S |
Toggle bulk select |
Cmd+Shift+A |
Attention queue |
Cmd+Shift+F |
Focus mode (single project) |
Cmd+/ |
Global search |
1-9 |
Focus agent / select role |
A / Y |
Approve |
R / N |
Reject |
Escape |
Close overlay / back to grid |
Space (hold) |
Push-to-talk |
Configuration
Config lives at ~/.ashlr/ashlr.yaml (auto-created on first run).
server:
host: "127.0.0.1"
port: 5111
log_level: "INFO"
agents:
max_concurrent: 16
default_backend: "claude-code"
default_role: "general"
default_working_dir: "~/Projects"
auto_restart_on_stall: false
auto_approve_enabled: false
auto_approve_patterns: []
auto_pause_on_critical_health: false
file_lock_enforcement: false
llm:
enabled: false
provider: "xai"
model: "grok-4-1-fast-reasoning"
api_key_env: "XAI_API_KEY"
Environment Variables
| Variable | Purpose |
|---|---|
XAI_API_KEY |
LLM-powered summaries, NLU, fleet analysis via xAI Grok |
ASHLR_PORT |
Override server port (default: 5111) |
ASHLR_HOST |
Override bind host (default: 127.0.0.1) |
ASHLR_ALLOWED_ORIGINS |
CORS origin (default: *, set to domain for production) |
ASHLR_REQUIRE_AUTH |
Force authentication on |
Docker Deployment
ASHLR_DOMAIN=ashlr.yourdomain.com docker compose up -d
Caddy auto-provisions Let's Encrypt HTTPS. SQLite data persisted via Docker volume.
Architecture
Modular Python package (ashlr_ao) with 16 focused modules:
| Module | Lines | Purpose |
|---|---|---|
server.py |
~3.9K | Route handlers, create_app(), re-exports all submodules |
manager.py |
~1.7K | AgentManager: lifecycle, tmux, workflows, file conflicts |
database.py |
~1.2K | Async SQLite: agents, projects, workflows, users, orgs |
background.py |
~1.1K | 6 supervised background tasks + startup/shutdown |
models.py |
~660 | All dataclasses (Agent, User, Organization, etc.) |
intelligence.py |
~640 | Output parsing, IntelligenceClient, health scoring |
websocket.py |
~400 | WebSocketHub, system metrics |
status.py |
~370 | Status detection, summary extraction |
auth.py |
~350 | Auth middleware, session management |
config.py |
~340 | Config dataclass, YAML load/save, validation |
middleware.py |
~230 | Rate limiter, security headers, CORS, compression |
extensions.py |
~250 | Extension scanner (skills, MCP, plugins) |
backends.py |
~160 | Backend configs (claude-code, codex, aider, goose) |
constants.py |
~160 | Logging, ANSI patterns, secret detection |
licensing.py |
~145 | Ed25519 JWT license validation |
roles.py |
~80 | 9 built-in roles |
dashboard.html |
~21K | Single HTML file, all CSS/JS inline |
Data persisted in SQLite at ~/.ashlr/ashlr.db.
API Overview
# Agents
POST /api/agents Spawn agent
GET /api/agents List (filter: ?project_id=, ?branch=, ?status=)
GET /api/agents/{id} Details + output
DELETE /api/agents/{id} Kill
POST /api/agents/{id}/send Send message
POST /api/agents/{id}/pause Pause (SIGTSTP)
POST /api/agents/{id}/resume Resume (SIGCONT)
POST /api/agents/{id}/restart Restart with same config
POST /api/agents/bulk Bulk action
# Projects
GET|POST /api/projects List / Create
PUT|DELETE /api/projects/{id} Update / Delete
GET /api/projects/{id}/context Project context
# Workflows & Templates
GET|POST /api/workflows List / Create
POST /api/workflows/{id}/run Execute DAG
GET|POST /api/fleet-templates List / Create
POST /api/fleet-templates/{id}/deploy Deploy to project
# Intelligence
POST /api/intelligence/command NLU command parsing
GET /api/intelligence/insights Fleet analysis
# Auth
POST /api/auth/register|login|logout|invite
GET /api/auth/status|me|team
# System
GET /api/health|system|config|roles|backends|costs|license/status
Full WebSocket protocol at /ws for real-time updates.
Development
git clone https://github.com/Ashlar-inc/ashlar-ao.git
cd ashlar-ao
pip install -e ".[dev]"
pytest # 1559 tests across 23 files
See CONTRIBUTING.md for guidelines and CLAUDE.md for full architecture reference.
Links
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ashlr_ao-1.6.1.tar.gz.
File metadata
- Download URL: ashlr_ao-1.6.1.tar.gz
- Upload date:
- Size: 602.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4033d6ad852973403571054664706b0ddfdc69223363af81bcb17162e0cce1a8
|
|
| MD5 |
24efaee27df333c0f60d521f3b31244e
|
|
| BLAKE2b-256 |
b8ab329364e4c9fd2cf4d0ceb1aead1fdbbc50f18a26f5856c4371ed25309243
|
File details
Details for the file ashlr_ao-1.6.1-py3-none-any.whl.
File metadata
- Download URL: ashlr_ao-1.6.1-py3-none-any.whl
- Upload date:
- Size: 470.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fcfbee9551b17d04a1fa49a73494cdfa9f405f2ca65c7f21bf98770f76f0bf91
|
|
| MD5 |
66b5d5089b7d1140fd12ced8a986cf6d
|
|
| BLAKE2b-256 |
0e61d878940d8be7532521302a0acbe68620fce64b9d5e12f98a15fd9b69f4a2
|