Autonomous Claude Code work while you sleep
Persistent sessions, Ralph Loop tracking, Respawn Controller, Agent Visualization, Multi-Session Dashboards
Real-time desktop notifications when sessions need attention — never miss a permission prompt or idle session again:
| Hook Event | Urgency | Tab Alert | Meaning |
|---|---|---|---|
permission_prompt |
Critical | Red blink | Claude needs tool approval |
elicitation_dialog |
Critical | Red blink | Claude is asking a question |
idle_prompt |
Warning | Yellow blink | Session idle, waiting for input |
stop |
Info | — | Response complete |
Features:
- Browser notifications enabled by default (auto-requests permission)
- Click any notification to jump directly to the affected session
- Tab blinking alerts: red for action-required, yellow for idle
- Notifications include actual context (tool name, command, question text)
- Hooks are auto-configured per case directory (
.claude/settings.local.json) - Works on HTTP for local use (localhost is a secure context)
Every Claude session runs inside GNU Screen — sessions survive server restarts, network drops, and machine sleep.
# Your sessions are always recoverable
CLAUDEMAN_SCREEN=1
CLAUDEMAN_SESSION_ID=abc-123-def
CLAUDEMAN_SCREEN_NAME=claudeman-myproject- Sessions auto-recover on startup (dual redundancy:
state.json+screens.json) - All settings (respawn, auto-compact, tokens) survive server restarts
- Ghost session discovery finds orphaned screens
- Claude knows it's managed (won't kill its own screen)
The core of autonomous work. When Claude becomes idle, the Respawn Controller kicks in:
WATCHING → IDLE DETECTED → SEND UPDATE → CLEAR → INIT → CONTINUE
↑ │
└──────────────────────────────────────────────────────┘
- Multi-layer idle detection (completion messages, output silence, token stability)
- Sends configurable update prompts to continue work
- Auto-cycles
/clear→/initfor fresh context - Step confirmation (5s silence) between each command
- Keeps working even when Ralph loops stop
- Run for 24+ hours completely unattended
# Enable respawn with 8-hour timer
curl -X POST localhost:3000/api/sessions/:id/respawn/enable \
-H "Content-Type: application/json" \
-d '{
"config": {
"updatePrompt": "continue improving the codebase",
"idleTimeoutMs": 5000
},
"durationMinutes": 480
}'Claudeman detects and tracks Ralph Loops and Todos inside Claude Code:
Auto-detects:
| Pattern | Example |
|---|---|
| Promise tags | <promise>COMPLETE</promise> |
| Custom phrases | <promise>ALL_TASKS_DONE</promise> |
| TodoWrite | - [ ] Task, - [x] Done |
| Iterations | [5/50], Iteration 5 of 50 |
Tracks in real-time:
- Completion phrase detection
- Todo progress (
4/9 complete) - Progress percentage ring
- Elapsed time
Watch your agents work in real-time. Claudeman monitors Claude Code's background agents (the Task tool) and displays them in draggable floating windows with Matrix-style connection lines.
┌─────────────────────────────────────────────────────────────┐
│ Session Tab [AGENTS (3)] │
│ │ │
│ │ ╭──────────────────╮ ╭──────────────────╮ │
│ ├─┤ Agent: explore │ │ Agent: implement │ │
│ │ │ ● active │ │ ○ completed │ │
│ │ │ Tool: Grep │ │ Result: success │ │
│ │ ╰──────────────────╯ ╰──────────────────╯ │
│ │ ╭──────────────────╮ │
│ └─────────┤ Agent: test │ │
│ │ ◐ idle │ │
│ ╰──────────────────╯ │
└─────────────────────────────────────────────────────────────┘
Features:
- Floating windows — Draggable, resizable panels for each agent
- Connection lines — Animated green lines linking parent sessions to agent windows
- Live activity log — See every tool call, progress update, and message in real-time
- Status indicators — Green (active), yellow (idle), blue (completed)
- Model badges — Shows Haiku/Sonnet/Opus with color coding
- Auto-behavior — Windows auto-open on spawn, auto-minimize on completion
- Tab badge — Shows "AGENT" or "AGENTS (n)" count on session tabs
Subagent API:
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/subagents |
List all background agents |
GET |
/api/subagents/:id |
Agent info and status |
GET |
/api/subagents/:id/transcript |
Full activity transcript |
DELETE |
/api/subagents/:id |
Kill agent process |
Real-time visibility into what Claude is reading and searching:
- Active Bash tools displayed as they run (file viewers, grep, find)
- Clickable file paths — Jump directly to files in Claude Code
- Timeout indicators — See how long tools have been running
- Smart deduplication — Overlapping file ranges collapsed
Toggle via App Settings → Display → "Show Project Insights Panel"
Never hit token limits unexpectedly:
| Threshold | Action | Result |
|---|---|---|
| 110k tokens | Auto /compact |
Context summarized, work continues |
| 140k tokens | Auto /clear |
Fresh start with /init |
# Configure per-session
curl -X POST localhost:3000/api/sessions/:id/auto-compact \
-d '{"enabled": true, "threshold": 100000}'Run 20 parallel sessions with full visibility:
- Real-time xterm.js terminals (60fps streaming)
- Per-session token and cost tracking
- Tab-based navigation
- One-click session management
Monitor Panel — Real-time screen session monitoring with memory, CPU, and process info:
The problem: Claude Code uses Ink (React for terminals), which redraws the entire screen on every state change. Without special handling, you'd see constant flickering — unusable for monitoring multiple sessions.
The solution: Claudeman implements a 6-layer antiflicker system that delivers butter-smooth 60fps terminal output:
PTY Output → 16ms Batch → DEC 2026 Wrap → SSE → rAF Batch → xterm.js → 60fps Canvas
| Layer | Location | Technique | Purpose |
|---|---|---|---|
| 1. Server Batching | server.ts | 16ms collection window | Combines rapid PTY writes into single packets |
| 2. DEC Mode 2026 | server.ts | \x1b[?2026h...\x1b[?2026l |
Marks atomic update boundaries (terminal standard) |
| 3. Client rAF | app.js | requestAnimationFrame |
Syncs writes to 60Hz display refresh |
| 4. Sync Block Parser | app.js | DEC 2026 extraction | Parses atomic segments for xterm.js |
| 5. Flicker Filter | app.js | Ink pattern detection | Buffers screen-clear sequences (optional) |
| 6. Chunked Loading | app.js | 64KB/frame writes | Large buffers don't freeze UI |
Server-side (16ms batching + DEC 2026):
// Accumulate PTY output per-session
const newBatch = existing + data;
terminalBatches.set(sessionId, newBatch);
// Flush every 16ms (60fps) or immediately if >1KB
if (!terminalBatchTimer) {
terminalBatchTimer = setTimeout(() => {
for (const [id, data] of terminalBatches) {
// Wrap with synchronized output markers
const syncData = '\x1b[?2026h' + data + '\x1b[?2026l';
broadcast('session:terminal', { id, data: syncData });
}
terminalBatches.clear();
}, 16);
}Client-side (rAF batching + sync block handling):
batchTerminalWrite(data) {
pendingWrites += data;
if (!writeFrameScheduled) {
writeFrameScheduled = true;
requestAnimationFrame(() => {
// Wait up to 50ms for incomplete sync blocks
if (hasStartMarker && !hasEndMarker) {
setTimeout(flushPendingWrites, 50);
return;
}
// Extract atomic segments, strip markers, write to xterm
const segments = extractSyncSegments(pendingWrites);
for (const segment of segments) {
terminal.write(segment);
}
});
}
}Optional flicker filter detects Ink's screen-clear patterns (ESC[2J, ESC[H ESC[J) and buffers 50ms of subsequent output for extra smoothness on problematic terminals.
Result: Watch 20 Claude sessions simultaneously without any visual artifacts, even during heavy tool use.
Click the chart icon on any session tab to see a complete timeline of what happened:
Tracked Events:
- Session start/stop and respawn cycles
- Idle/working transitions with durations
- Token milestones (every 50k tokens)
- Auto-compact and auto-clear triggers
- Ralph Loop completions
- AI check results (idle detection verdicts)
- Hook events (permissions, questions, stops)
- Errors, warnings, and stuck-state alerts
Stats at a glance:
- Total respawn cycles
- Peak token usage
- Active vs idle time
- Error/warning counts
curl -fsSL https://raw.githubusercontent.com/Ark0N/claudeman/master/install.sh | bashnpm install -g claudeman- Node.js 18+
- Claude CLI installed
- GNU Screen (
apt install screen/brew install screen)
claudeman web
# Open http://localhost:3000
# Press Ctrl+Enter to start your first sessionNote: HTTP works fine for local use since
localhostis treated as a secure context by browsers. Use--httpsonly when accessing from another machine on your network.
| Shortcut | Action |
|---|---|
Ctrl+Enter |
Quick-start session |
Ctrl+W |
Close session |
Ctrl+Tab |
Next session |
Ctrl+K |
Kill all sessions |
Ctrl+L |
Clear terminal |
Claudeman Screens (sc) is a mobile-friendly screen session chooser, optimized for Termius on iPhone.
sc # Interactive chooser
sc 2 # Quick attach to session 2
sc -l # List sessions
sc -h # HelpFeatures:
- Single-digit selection (1-9) for fast thumb typing
- Color-coded status indicators (attached/detached/respawn)
- Token count display
- Session names from Claudeman state
- Pagination for many sessions
- Auto-refresh every 60 seconds
Indicators:
| Symbol | Meaning |
|---|---|
* / ● |
Attached (someone connected) |
- / ○ |
Detached (available) |
R |
Respawn enabled |
45k |
Token count |
Tip: Detach from a screen with Ctrl+A D
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/sessions |
List all |
POST |
/api/quick-start |
Create case + start session |
DELETE |
/api/sessions/:id |
Delete session |
POST |
/api/sessions/:id/input |
Send input |
| Method | Endpoint | Description |
|---|---|---|
POST |
/api/sessions/:id/respawn/enable |
Enable with config + timer |
POST |
/api/sessions/:id/respawn/stop |
Stop controller |
PUT |
/api/sessions/:id/respawn/config |
Update config |
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/sessions/:id/ralph-state |
Get loop state + todos |
POST |
/api/sessions/:id/ralph-config |
Configure tracking |
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/subagents |
List all background agents |
GET |
/api/subagents/:id |
Agent info and status |
GET |
/api/subagents/:id/transcript |
Full activity transcript |
DELETE |
/api/subagents/:id |
Kill agent process |
GET |
/api/sessions/:id/subagents |
Subagents for session's working dir |
| Method | Endpoint | Description |
|---|---|---|
POST |
/api/hook-event |
Hook callbacks {event, sessionId, data?} → notifications + tab alerts |
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/sessions/:id/run-summary |
Timeline + stats for "what happened" |
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/events |
SSE stream |
GET |
/api/status |
Full app state |
flowchart TB
subgraph Claudeman["🖥️ CLAUDEMAN"]
subgraph Frontend["Frontend Layer"]
UI["Web UI<br/><small>xterm.js + Agent Windows</small>"]
API["REST API<br/><small>Fastify</small>"]
SSE["SSE Events<br/><small>/api/events</small>"]
end
subgraph Core["Core Layer"]
SM["Session Manager"]
S1["Session (PTY)"]
S2["Session (PTY)"]
RC["Respawn Controller"]
end
subgraph Detection["Detection Layer"]
RT["Ralph Tracker"]
SW["Subagent Watcher<br/><small>~/.claude/projects/*/subagents</small>"]
end
subgraph Persistence["Persistence Layer"]
SCR["GNU Screen Manager"]
SS["State Store<br/><small>state.json</small>"]
end
subgraph External["External"]
CLI["Claude CLI"]
BG["Background Agents<br/><small>(Task tool)</small>"]
end
end
UI <--> API
API <--> SSE
API --> SM
SM --> S1
SM --> S2
SM --> RC
SM --> SS
S1 --> RT
S1 --> SCR
S2 --> SCR
RC --> SCR
SCR --> CLI
SW --> BG
SW --> SSE
Optimized for long-running autonomous sessions:
| Feature | Implementation |
|---|---|
| 60fps terminal | 16ms server batching, requestAnimationFrame client |
| Memory management | Auto-trimming buffers (2MB terminal, 1MB text) |
| Event debouncing | 50-500ms on rapid state changes |
| State persistence | Debounced writes, dual-redundancy recovery |
npm install
npx tsx src/index.ts web # Dev mode
npm run build # Production build
npm test # Run testsSee CLAUDE.md for full documentation.
MIT — see LICENSE
Track sessions. Visualize agents. Control respawn. Let it run while you sleep.



