Run AI agents in the cloud · Control from your phone

Your VM runs the code.
Your phone runs the show.

Spin up AI coding agents on your cloud server. Run dozens simultaneously. Monitor, steer, and review every one from your phone — 24/7, no laptop.
★ Star on GitHub See how it works ↓
$ syndic dispatch \
--repo luna \
--task "implement auth flow" \
--agent claude-code

connected to luna.vm .......... ok
worktree feat/auth-flow ....... ok
spawning claude-code

What's inside.

Every screen, every feature — tap to explore.

Syndic
Exploration complete. You've seen all features.
10:24
5G ● 87%
10:24
Sunday, April 5
Now Running
agent-3 · feature/explore
Tap to explore
Dispatch
Fleet
⟩_
CLIs
1
Review
Debug
Security
Budget
Settings
Get the App
Dispatch

Your desktop workflow — from your phone.

Same steps as your laptop — describe the task, choose the repo, launch the agent. Except you're not at your desk.
3:28
5G ●
Can you list all prompts in this repo
⑂ hone · syndic/ws-7IA... · claude ● LIVE
Can you list all prompts in this repo
Q>_ 27 tool calls · agent, glob, bash, read
Here are all the prompts in this repo:
Core Prompts (prompts/)
FilePurpose
CALIBRATE.mdConverts generic critique...
CRITIC.mdTemplate for blocking-issues...
DEFENDER.mdResponds to critique with...
● Auto-scroll paused ↓ Jump to live
Message the agent...
@
■ Stop
3:26
5G ●
Task launched!
Your agent is spinning up.
You'll be notified when it needs you.
TaskCan you list all prompts in...
Repo / Branchhone / main
HarnessClaude Code
Watch in Fleet
+ Launch another task
3:26
5G ●
New Task
Cancel
Repository
hone
main
Description
Can you list all prompts in this repo
Harness
Claude Code
↗ Launch Task
· Describe it. Launch it. Walk away.
· Same workflow as your terminal — just mobile
· Full visibility: every file, every tool call, live
· Works with Claude Code, Codex, Gemini, or your own CLI
Fleet

Scale your engineering output without scaling your team.

Point agents at your repos and walk away. Each one works independently — own branch, own worktree, own PR. You check in when you're ready, not when they need you.
9:41
5G ●
Syndic
No tasks running
Your fleet is idle. Launch a task to put your agents to work.
+ New Task
FleetActivityReviewSettings
9:41
5G ●
Syndic
3 Active
2 Review
1 Blocked
LUNA
Phase 3B
● running
✎ routes/onboarding.ts · 18m
Phase 2 — Auth
● review
⑂ PR #8 · 22 commits · 18m
APEX
Fix Redis Pool
● running
▷ npm run test · 3m
Update CI Config
↳ merged
✓ Merged 2h ago
FleetActivityReviewSettings
9:41
5G ●
Syndic
3 Active
2 Review
1 Blocked
▽ Filtered: Review
LUNA
Phase 2 — Auth
● review
⑂ PR #8 · 22 commits · 18m
APEX
Fix Redis Pool
● review
⑂ PR #9 · 4 commits · 1h
FleetActivityReviewSettings
· Parallel execution across repos — no bottlenecks
· Each agent is isolated: own branch, own worktree
· Choose the right CLI for each task
· Budget guardrails so costs never surprise you
CLIs

Use the right tool for the job — not the only tool we support.

Syndic doesn't ship its own agent. It wraps yours. Run Claude Code on one task, Codex on another, your custom harness on a third. Spread cost across multiple API subscriptions. Swap CLIs without changing anything else in your workflow.
3:10
5G ●
AI CLIs
Claude Code
● ready
Codex CLI
● needs auth
Run codex login on server
GITHUB
humzakhan
Scopes: repo
Rate limit: 4,998 remaining
SECURITY
87
/100 · 7/8 checks passed
FleetInboxReviewSettings
3:10
5G ●
← Claude Code
Claude Code
2.1.89 (Claude Code)
● Ready
Usage
Settings
MODEL
Default model
Used for new workspaces
Sonnet 4.6
Thinking mode
Extended uses more tokens
Auto
Review model
Used for code review
Sonnet 4.5
SESSION DEFAULTS
Start in plan mode
Agent plans before executing
Compact mode
Tips card + idle warnings
Max turns
Per session limit
200 ›
3:11
5G ●
Syndic
All 4
0 Active
New Task
Cancel
HARNESS
Claude Code
2.1.89 · Ready
Claude Code
Selected ▲
↗ Launch Task
☰ Advanced
FleetInboxReviewSettings
· Claude Code, Codex, Gemini, Aider — all supported
· Mix and match CLIs across tasks and repos
· Rotate between API subscriptions to manage spend
· Build your own harness — Syndic doesn't care what's inside
Review · Merge

PR lands. You review the diff. You merge. All from your phone.

The agent opens a pull request. You review the diff, check CI status, leave inline comments, approve, and merge. Ship while you walk.
9:41
5G ●
Merge PR #8
● CI PASSING
feat: add auth middleware · luna · 22 commits
MERGE STRATEGY
Squash and merge
Combine all commits into one
Merge commit
Rebase and merge
Face ID required to confirm merge.
↗ Confirm Merge
9:41
5G ●
← routes/auth.ts Line 21 selected
18 req: Request, res: Response, next: ...
+ const token = req.headers.authoriza...
21 | if (!token) return res.status(401)
+ await verifyJWT(token, process.env....
+ next()
◎ you · 2m ago
Should we return a 403 here instead of 401?
Good point — 401 is correct here since the token is missing entirely.
MarkdownCancelPost
↗ Merge
1 Comment
✕ Reject
9:41
5G ●
← PR #8 · 3 files
◫ routes/auth.ts
+48 -12
File 1 of 3 · 3 hunks ‹ › ≡
@@ -14,8 +14,12 @@ import { db } from...
14 import { Request, Response } from '...
15 import { z } from 'zod'
+ import { verifyJWT, signJWT } from ...
+ import { rateLimit } from '../middl...
17 export const authMiddleware = async...
18 req: Request, res: Response
+ req: Request, res: Response, next: ...
+ ) => {
+ const token = req.headers.authoriza...
19 ) => {
20 const t = req.query.token as string
21 if (!token) return res.status(401)
+ await verifyJWT(token, process.env....
+ next()
↗ Merge
◻ Comment
✕ Reject
FleetActivityReviewSettings
9:41
5G ●
Review
2 PR
Phase 2 — Auth + CRUD
PR #8
luna · 22 commits · 3 files · 18m ago
✓ Tests passing ✓ CI green
+187 -34feat/auth
↗ Merge
✕ Reject
Fix Redis Pool
PR #9
apex · 4 commits · 1 file · 1h ago
↻ CI running...
+24 -8fix/redis
FleetActivityReviewSettings
· Full diff viewer with syntax highlighting
· Inline comments the agent picks up
· CI status at a glance
· One-tap merge (squash, rebase, or merge commit)
· Post-merge: chain the next task immediately
Logs & Debug

Something broke. You already know why.

Syndic streams your server logs to your phone in real time. An agent crashes, a test fails, a webhook times out — you see it instantly, search for context, and fix it. No opening a laptop, no SSH-ing in, no waiting until you're back at your desk.
12:56
5G ●
← Activity Monitor
syndic-betaup 5d 18h 12m
CPU
Usage
0.6%
Load
0.01
MEMORY
RAM
0.8 / 7.6 GB
DISK
/
3.7 / 74.8 GB
NETWORK
↓ In
0 MB/s
↑ Out
0 MB/s
PROCESSES
Running
2
Total
133
12:56
5G ●
← Logs
● live
07:13:13 [info] provider_health_check...
07:13:13 [debug] codex_api_key_check...
07:18
07:18:14 [debug] claude_credentials...
07:18:14 [info] provider_health_check...
07:22
INFO: 47.83.221.47 – "GET / HTTP/1.1" 404
INFO: 47.83.221.47 – "GET /favicon.ico" 404
07:23
07:23:15 [debug] claude_credentials...
07:23:15 [info] provider_health_check...
07:28
07:28:15 [debug] codex_api_key_check...
07:28:15 [info] provider_health_check...
● journalctl -f · 92 linesPause
FleetActivityReviewSettings
· Live log streaming — every event, as it happens
· Search across all output instantly
· See the full error trail, not just a notification
· Retry failed tasks directly from the log view
Security

Your agents run in your cloud. Your keys never leave it.

Your VM, your keys, your code. No cloud relay, no intermediary. Syndic scans your server on a schedule and shows the results on your phone — so you catch issues without SSH-ing in.
· Zero data on external servers — there are no external servers
· Automated security scans, results on your phone
· Certificate, firewall, and port checks on a schedule
· Direct phone-to-server connection over TLS
· QR code pairing — single-use token, expires in 5 minutes
· Biometric app lock

Architecture

Split-brain: the server runs the agent fleet, the phone is a stateless remote control. No intermediary. No cloud relay. Direct connection.
E2E encrypted
No telemetry
No analytics
No tracking
Get Started

Running in under a minute.

One command to install. One QR code to pair your phone. That's it.
$ curl -fsSL https://get.syndic.dev | sh
$ syndic init
· Install the server daemon on any Linux VM
· Scan the QR code with the mobile app
· Add your repos and API keys
· Dispatch your first agent

The fleet management platform for the AI coding era.

Free and open source. MIT licensed. No account required.

★ Star on GitHub Read the Docs
Budget

Know what your agents cost — before it surprises you.

Track spend by day, week, and month. Set caps per provider. See exactly which agents are burning through tokens and which ones are earning their keep.
9:41
5G ●
‹ Settings Usage
Claude
Max 5×
Session
94% CriticalRuns out in 6m
Weekly
88%Runs out in 2h
Extra usage
$27.60$30 limit · near cap
Today
$89.20
188M tokens
Last 30 days
$3,812.44
7.8B tokens
9:41
5G ●
‹ Settings Usage
Claude
Max 5×
Session
51%Resets in 2h 27m
Weekly
60%1% in deficit
Extra usage
$10.54$30 limit
Today
$45.16
95M tokens
Yesterday
$30.86
69M tokens
Last 30 days
$2,202.78
3.7B tokens
· Daily, weekly, and monthly spend tracking
· Breakdown by provider: Anthropic, OpenAI, Google
· Set budget caps — agents pause when limits hit
· Cost per agent, per task, per repo
Settings

Your server, your rules.

Configure repos, API keys, default CLIs, notification preferences, and pairing — all from your phone.
12:58
5G ●
← hone
H
hone
github.com/humzakhan/hone.git
⑂ main
SCRIPTS
Setup script not set
Runs once when a worktree is created
AGENT INSTRUCTIONS
Pre-task instructions
Prepended to every new task
Review instructions
Sent to agent at review pass
REPOSITORY
Default branch
main ›
⊘ Remove Repository
12:59
5G ●
← Claude Code
Claude Code
2.1.89 (Claude Code)
● Ready
Usage
Settings
MODEL
Default model
Used for new workspaces
Sonnet 4.6
Thinking mode
Extended uses more tokens
Auto
Review model
Sonnet 4.5
SESSION DEFAULTS
Start in plan mode
Compact mode
Max turns
200 ›
12:58
5G ●
Settings
APPEARANCE
Theme
Ash
REPOSITORIES
hone
main · 1 active tasks
/var/syndic/repos/hone
humza-website
main · 0 active tasks
+ Add Repository
AI CLIS
Claude Code
● ready
Codex CLI
● needs auth
FleetInboxReviewSettings
· Manage repos and branches
· Add and rotate API keys
· Set default CLI per repo
· Pair new devices via QR code