agent-procs
Concurrent process runner for AI agents. Processes run in a background daemon and persist across CLI invocations.
Install
cargo install agent-procs
Quick start
# Start a process
# Wait for it to be ready
# Check output
# See what's running
# Stop it
Config file
Create an agent-procs.yaml to manage multiple processes together:
processes:
db:
cmd: docker compose up postgres
ready: "ready to accept connections"
api:
cmd: ./start-api-server
cwd: ./backend
env:
DATABASE_URL: postgres://localhost:5432/mydb
ready: "Listening on :8080"
depends_on:
Fields: cmd (required), cwd, env, ready (stdout pattern that signals readiness), depends_on, port.
Processes start in dependency order; independent ones run concurrently.
Reverse proxy
Give processes stable named URLs instead of port numbers. Opt-in via config or CLI flag.
proxy: true
processes:
api:
cmd: node server.js
port: 3001
ready: "Listening"
web:
cmd: next dev
depends_on:
)
)
When proxy: true is set, processes without an explicit port get one auto-assigned from the 4000-4999 range. The PORT and HOST=127.0.0.1 environment variables are injected into each process (user-provided env takes precedence).
Each session gets its own proxy port (auto-assigned from 9090-9190), so two projects can both have a process named api without conflict.
Ad-hoc usage without a config file:
# → http://api.localhost:9090
Config fields: proxy (top-level, default false), proxy_port (top-level, optional), port (per-process, optional).
Commands
| Command | Description |
|---|---|
run <cmd> [--name N] [--port P] [--proxy] |
Spawn a background process |
stop <name> |
Stop a process |
stop-all |
Stop all processes |
restart <name> |
Restart a process |
status [--json] |
Show all process statuses |
logs <name> [--tail N] [--follow] [--stderr] [--all] |
View process output |
wait <name> --until <pattern> [--regex] [--timeout N] |
Wait for output pattern |
wait <name> --exit [--timeout N] |
Wait for process to exit |
up [--only X,Y] [--config path] [--proxy] |
Start from config file |
down |
Stop config-managed processes |
session list |
List active sessions |
session clean |
Remove stale sessions |
ui |
Open terminal UI |
Sessions
Use --session to isolate process groups (e.g. per-project):
Architecture
The CLI communicates with a per-session background daemon over a Unix domain socket. The daemon manages process lifecycles, captures stdout/stderr to log files, and handles wait conditions. The daemon auto-starts on first use and exits when all processes are stopped.
Exit codes
| Code | Meaning |
|---|---|
| 0 | Success |
| 1 | Error (timeout, connection failure, unexpected response) |
| 2 | No logs found for target process |