Everything the worker is allowed to know and do, up front.
Six checkpoints, in order
Each stage produces an artifact the next stage can be checked against.
The agent never sees your checkout.
Skep records the source repo and baseline ref, then creates a separate worktree for the worker. The worker changes files there without touching your active branch.
At the end of the run, Skep captures a binary-safe git patch from that worktree. That patch is the unit you review, approve, merge, or discard.
Skep does not need to be the coding agent.
It launches a worker process that speaks one local task/result contract (v0.3.5 today). The in-repo worker, the Claude Code adapter, Codex, Aider, and Ollama all fit behind the same boundary — the adapter can be thin because Skep owns supervision, not code generation.
NDJSON, written as the run happens — not reconstructed after.
The claim — which Skep then checks for itself.
Defense in depth, not a substitute for review.
In sandbox mode, Skep asks the host OS to constrain the worker process. If sandbox mode is requested but no backend can be applied, the worker does not start unsandboxed — the run fails instead.
The full security modelThe run stops and asks, in your terminal.
Approving once resumes only the current run. Approving with remember records the permission in the durable ledger — and a successful resumed run can save a learned template for similar future tasks.
approval needed: shell.run reason: shell.run requires approval for command: python -m pytest [a] approve once [b] approve + remember [d] deny [s] skip > b recorded in ledger: repo /path/to/repo action shell.run actor operator outcome resumed → completed
Skep replays the patch on a clean copy, itself.
The replay uses only PATH and HOME from the supervisor environment. When the sandbox is available, it runs with deny-all network and writes confined to the clean worktree.
Patch applied and every recorded command exited 0.
The patch did not apply, a command timed out, or one exited non-zero. Auto-approval is blocked.
Skep could not honestly re-run the check — no patch, no recorded command, or the tool is missing.
Approval lands a branch. You do the rest.
The branch is named skep/<task_id>. Skep does not push it. You keep the normal Git decision: inspect, merge, edit, or delete.
CLI referenceSame gates, wherever you are.
Operate Skep from Telegram, Slack, or Discord. An allow-listed message runs the same turn, with the same approval gates, as the web composer. Shell commands, policy changes, and landings are never confirmable from a messenger.