The control plane for coding agents.
Run coding agents in isolated Git worktrees, independently verify their changes, and require human approval before integration.
Quickstart • Why Sentinel? • The Workflow • Features • Architecture • Contributing
Coding agents are useful, but giving an agent direct control of your working tree creates a simple problem: the agent is both making the change and deciding whether the change is finished.
Sentinel separates those responsibilities.
It is a local supervisor and execution control plane for coding agents:
- Isolate execution in a dedicated Git worktree so the active branch and working files stay untouched.
- Verify independently by running tests and inspecting the resulting workspace on disk instead of trusting the agent's success message.
- Stop for human review at
READY FOR REVIEWbefore candidate changes can be integrated. - Integrate deliberately with target-freshness checks and transactional merge handling.
Sentinel does not replace your coding agent. It supervises it.
SENTINEL CONTROL LOOP
Task Goal
│
▼
┌───────────────────┐
│ Isolated Worktree │
└─────────┬─────────┘
│
▼
┌───────────────────┐
│ Coding Agent │
└─────────┬─────────┘
│
▼
┌───────────────────┐
│ Verify on Disk │ ◄──── fix & retry
│ tests + workspace │
└─────────┬─────────┘
│
▼
┌───────────────────┐
│ READY FOR REVIEW │
└─────────┬─────────┘
│
▼
┌───────────────────┐
│ Human Review │
│ + Diff │
└─────────┬─────────┘
│
▼
┌───────────────────┐
│ Safe Integrate │
└───────────────────┘
The central rule is simple:
An agent can propose a change. Sentinel verifies it. A human decides whether it gets integrated.
Platform: Sentinel is currently certified for Linux x86_64. See Operational Limitations.
Requirements: Rust 1.88+, Node.js 20+, npm, and Git with worktree support.
git clone https://github.com/axonel/sentinel.git
cd sentinel
npm --prefix web ci
npm --prefix web run build
cargo build --release -p plexis-server --bin sentinelStart the local supervisor:
./target/release/sentinel serveThe dashboard is available at:
http://127.0.0.1:3000
Initialize a workspace for an existing repository:
sentinel init /path/to/repo --name "my-project"Then dispatch a task:
sentinel mission create /path/to/repo \
-o "Fix failing unit tests in parser.rs. Run cargo test and commit your fix." \
-t "Fix parser tests"When the stopping conditions pass, the mission halts at:
READY FOR REVIEW
Inspect the candidate diff:
sentinel mission diff <MISSION_ID>Then integrate only after review:
sentinel mission accept <MISSION_ID> --integrateFor a complete walkthrough, including a disposable repository and an offline deterministic agent, see the Getting Started Guide.
An autonomous agent can create, delete, or rewrite files while it works. Sentinel runs mission execution inside an isolated Git worktree under .plexis/worktrees/.
Your active branch remains separate from the mission workspace.
Sentinel does not treat an agent's own report as the verification boundary. It independently executes configured stopping conditions such as:
cargo test
npm test
pytest
and inspects exit status and workspace state on disk.
A successful mission does not automatically mean code lands on your target branch.
Sentinel creates a review boundary where you can inspect:
- changed files
- unified diffs
- verification results
- Git provenance
- mission audit history
Only an explicit acceptance action proceeds to integration.
Long-running agent processes can fail, time out, or leave partial state behind. Sentinel tracks durable mission state in SQLite, supervises process groups, and reconciles Git/worktree state during recovery.
See Crash Recovery for the detailed state-reconciliation model.
Agents execute inside isolated Git worktrees. The dashboard's Executive Summary shows mission status, recent events, and verified Git provenance.
Sentinel runs verification out-of-band and checks the resulting workspace rather than relying on the agent's claim that the task succeeded.
Verified candidate commits stop at an explicit review gate. Inspect file statistics, unified diffs, verification metrics, and audit events before integration.
The dashboard provides explicit actions for accepting and integrating, accepting without integrating, or rejecting a deliverable. Rejection feedback can feed into autonomous replanning.
Candidate commits are integrated through a stateful merge flow with target-freshness validation and rollback handling for merge conflicts.
Monitor control-plane health, parallel task leases, agent activity, governance gates, and provider latency across registered workspaces.
Inspect registered runtimes, roles, capabilities, active leases, execution state, assigned scope, and operator directives.
Sentinel supervises multiple agent execution paths:
| Provider / Adapter | Execution Mode | Requirements | Primary Use Case |
|---|---|---|---|
Gemini CLI (gemini) |
Subprocess (LocalAgentHost) |
gemini CLI + GEMINI_API_KEY |
Real-world autonomous coding tasks |
Fake Agent (fake) |
Subprocess (plexis-fake-agent) |
Built-in Cargo binary | Offline testing and reproducible CI |
Gemini API (gemini-api) |
HTTP API client | GEMINI_API_KEY |
Direct API-driven planning and synthesis |
OpenAI API (openai) |
HTTP API client | OPENAI_API_KEY |
API-driven agent execution |
Ollama (ollama) |
HTTP API client | Local Ollama daemon | Local / air-gapped execution |
See Provider Configuration for setup details and custom adapter development.
Sentinel is an API-first local supervisor daemon backed by SQLite (WAL mode) and POSIX process supervision.
| Layer / Crate | Purpose |
|---|---|
sentinel / plexis-server |
Axum HTTP daemon, REST API, SSE streaming, and CLI entrypoint. |
plexis-runtime |
Worktree lifecycle, POSIX process supervision, and timeout enforcement. |
plexis-storage |
Persistent SQLite store for missions, checkpoints, and leases. |
plexis-providers |
Adapters for external coding agents. |
plexis-tools |
Filesystem tools with path canonicalization and workspace containment. |
plexis-planner |
Task breakdown and planning logic. |
plexis-memory |
Session context and history. |
plexis-fake-agent |
Deterministic mock agent for offline regression testing and CI. |
web/ |
Embedded React + Vite Mission Control dashboard. |
See System Architecture for the subsystem and state-machine details.
Sentinel is designed to constrain agent execution at the process and Git-worktree level, but it is not a hardware sandbox.
- Loopback by default: the daemon binds to
127.0.0.1. Binding externally requires an authentication token. - Process-group isolation: mission subprocesses run in dedicated POSIX process groups so cancellation and timeout handling can reap child processes.
- Workspace containment: filesystem operations are canonicalized and checked against the workspace boundary.
- No microVM boundary: Sentinel does not provide Firecracker/gVisor-style hardware virtualization. Agent commands run with the permissions of the invoking OS user.
- Current platform scope: Linux x86_64 is the certified target.
See Security Policy, Threat Model, and Operational Limitations.
| Guide | What it covers |
|---|---|
| Getting Started | Hands-on first mission with Gemini CLI or the offline fake agent |
| CLI Reference | Complete sentinel command reference |
| REST API | HTTP endpoints, request/response payloads, and SSE events |
| Architecture | Crate boundaries, state machines, and supervisor internals |
| Product Overview | Core thesis, target users, and non-goals |
| Provider Configuration | Provider setup and custom adapter development |
| Crash Recovery | Durable state, reconciliation, and Git ancestry |
| Validation & Receipts | Automated validation evidence and benchmark telemetry |
| Troubleshooting | Port conflicts, authentication, and worktree errors |
| Security | Trust boundaries, process confinement, and secret redaction |
| Limitations | Supported platforms, backends, and known non-goals |
| Release Engineering | Release checklist, packaging, and checksums |
| Development History | Milestone archive and project history |
Sentinel is intended to be built with contributors, not just around them.
Start with CONTRIBUTING.md for development prerequisites, repository structure, testing commands, coding invariants, and the pull-request process.
Before opening a PR, run:
cargo test --workspace
cargo fmt --all -- --check
cargo clippy --workspace --all-targets -- -D warningsFor changes that affect mission state, worktree isolation, process supervision, or integration semantics, read the relevant architecture and security documentation first.
Sentinel is dual-licensed under the MIT License and Apache License, Version 2.0, at your option.







