Skip to main content

waker-ai

tests

waker demo

Never let your AI coding agent sleep on the job again.

waker is an independent supervisor for AI coding agents. It watches the disk (not the agent's words), verifies a frozen contract, and wakes the agent up until every task has on-disk evidence and every gate is green.

Agent claims. Waker verifies. The disk decides.

$ waker run --tasks .waker/tasks.yaml --adapter opencode --test "pytest -q"

**waker · run cff9c232 · 1/1 — 100%**
`████████████████`  ⏱ 00:45  🔁 0/5  🧪 PASS  💰 $0.0016

|   | Task | Work              | Evidence      | Gate |
|---|------|-------------------|---------------|------|
| ✅ | T1   | create live.txt   | src/live.txt  | pass |

Why

AI agents do four things that ruin unattended runs:

  1. Stop early — finish 1 of 5 tasks, exit 0, go quiet.
  2. Lie — print "all tasks completed" while the test suite is red.
  3. Cheat — edit the tests until they pass.
  4. Spin — rewrite the same two lines five times with no progress.

Waker handles all four because it never trusts the agent's output. It only trusts git diff and exit codes.

Feature comparison

Capability Manual babysitting until loop in bash Agent built-in "auto" waker-ai
Verifies work on disk (not claims) ❌ partial ❌ ✅
Session resume across wakes ❌ ❌ partial ✅ T1
Detects test tampering ❌ ❌ ❌ ✅
Detects "claimed done, tests red" ❌ ❌ ❌ ✅
Detects frozen / thrashing agents ❌ ❌ ❌ ✅
Per-task checklist with evidence ❌ ❌ partial ✅
Cost guard (USD) ❌ ❌ ❌ ✅
Works with many CLIs ❌ ✅ ❌ ✅ T1/T2/T3
Survives chatbox close (--detach) ❌ ✅ ❌ ✅
Live TUI + web dashboard ❌ ❌ ❌ ✅
Runs 100% offline for parsing/lint ❌ ✅ ❌ ✅ 0 token

Install

# PyPI upload workflow is ready; until the first release is published:
pip install "waker-ai @ git+https://github.com/khoacat12345/waker-ai.git"

# one command: detect installed CLIs and install the waker skill
waker setup

# Windows PTY tier-3 (optional)
pip install "pywinpty>=3.0" "pyte>=0.8"

From source:

git clone https://github.com/khoacat12345/waker-ai
cd waker-ai
python -m venv .venv
.venv\Scripts\activate        # Windows
pip install -e ".[dev]"
pytest

Quickstart (60 seconds)

# 0) detect the test runner already used by the repo
waker detect

# 1a) prompt with scope/verify -> contract (0 token, deterministic)
waker plan --prompt "Phase 1: auth, scope: src/auth/**, verify: pytest tests/auth -q"

# 1b) vague prompt -> one OpenCode planning turn writes the contract
waker plan --via opencode --model <provider/model> \
  --prompt "làm app quản lý chi tiêu, có login, xuất excel"

# 2) validate the contract - fail closed on missing scope/verify
waker lint --tasks .waker/tasks.yaml

# 3) supervise the agent
waker run --tasks .waker/tasks.yaml \
  --adapter opencode --model opencode-go/deepseek-v4.1-flash \
  --test "pytest tests/ -q" \
  --max-kicks 5 --max-cost 0.50

# 4) after a crash/reboot, continue the same run
waker run --resume <run_id> --repo .

Background mode, then watch from anywhere:

waker start --detach --tasks .waker/tasks.yaml \
  --adapter opencode --model <provider/model> --test "pytest tests/ -q"

waker status --repo .
waker watch --repo .
waker dashboard --repo . --open
waker stop --repo .

Install the chatbox skill:

waker setup                          # detects OpenCode/Claude/Gemini, installs globally
# or explicit:
waker install-skill --for opencode --global   # ~/.opencode/skills/waker/SKILL.md
waker install-skill --for claude --global     # ~/.claude/skills/waker/SKILL.md
waker install-skill --for gemini --global     # ~/.gemini/config/skills/waker/SKILL.md
waker install-skill --for generic             # AGENTS.md block (idempotent)

Skills are loaded when the chat session starts — restart your CLI after installing. A pip install cannot write into your agent's config by itself (that is a security boundary); waker setup is the one-time post-install step.

Blind evaluation (v1.1)

The Architect (chatbox) can write hidden tests that the worker never sees:

waker vault init --repo .
# → vault_id: 9f3a2c7d1e4b (the vault lives outside the repo)

waker vault add --vault 9f3a2c7d1e4b --suite auth --task T1 tests/test_auth_hidden.py
waker vault validate --vault 9f3a2c7d1e4b --repo .
# → fails on baseline? good. import error / skip / flaky? reject.

waker run --tasks .waker/tasks.yaml --vault 9f3a2c7d1e4b --adapter opencode ...
- id: T1
  verify: "pytest tests/test_auth_smoke.py -q"   # public smoke, worker sees
  public_api: ["login(name, password) -> token | None"]
  blind:
    suite: auth
    baseline: red          # hidden must fail before work
    leak: message          # minimal | message
  • DONE requires 100% hidden pass plus public smoke and constraints.
  • Failures are sanitized: hidden://auth/test_3: AssertionError: ...; no source, no paths, no locals.
  • VAULT_TAMPER stops the run if the vault hash changes.
  • Honest scope: v1.1 is blind by construction, not an adversarial sandbox. The worker runs as the same OS user; real isolation (Docker/Windows Sandbox) is v1.2. See docs/BLIND_EVALUATION_SPEC.md.

How done is decided

For every task:

done(T) = (git diff ∩ T.scope ≠ ∅) and (T.verify exits 0)
Gate Stops
scope ∩ diff touching an unrelated file to look busy
verify exit 0 claiming success while tests are red
test hash editing the exam (TAMPER → restore + kick)
contract hash moving the goalposts mid-run
cost / kicks / wall clock burning the budget in a retry loop

Adapters

Tier Mechanism CLIs Status
T1 native session resume OpenCode (run --session --format json) ✅ live E2E
T1 native session resume Claude Code (-p --resume --output-format stream-json) 🧪 beta (unit-tested, no live CI)
T2 fresh process + context digest any CLI with a non-interactive flag (aider --message, gemini -p, custom commands) ✅
T3 PTY keystroke injection (ConPTY + pyte) any text-mode TUI, even without a headless mode ✅ Windows only

waker doctor detects what is installed and prints the tier:

$ waker doctor --inject-test
OK opencode      tier T1  (opencode 2.0.32)
OK claude        tier T1  (claude 1.x)
-- aider         tier -
OK any-text-cli  tier T3  (pywinpty)
injector self-test: PASS - marker seen

The injector self-test drives a harmless shell, never an AI session.

Importantly: cost guard is exact only for OpenCode. It reads opencode session export before/after each turn. For Claude it uses the total_cost_usd delta from the stream; for generic/PTY it is 0 (no measurement).

Safety on Windows

  • Every run is assigned to a Win32 Job Object (JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE); taskkill /T /F is always issued as a fallback, so grandchildren die too.
  • Live freeze probe: no stdout and no file activity for --freeze-after seconds → kill the tree and mark the turn FROZEN; no waiting for a 15-minute timeout.
  • Prompts are passed as argv, never through a shell (shell quoting corrupts prompts that contain quotes or backslashes).

CLI

waker plan        prompt -> contract (0 token, or --via opencode for vague prompts)
waker lint        contract validation (0 token)
waker detect      detect pytest / npm / cargo / go / make test
waker run         supervise in the foreground (--resume <id> to continue)
waker start       supervise in the background (detached)
waker stop        stop a run (tree kill)
waker serve       loopback HTTP control plane
waker status      markdown/JSON snapshot
waker watch       live Rich TUI
waker dashboard   static HTML or live web dashboard
waker report      print the acceptance report
waker doctor      environment + adapter tier + injector test
waker setup       detect CLIs and install the skill (one command)
waker install-skill  opencode / claude / gemini / generic

Demo

The animated demo at the top is generated by scripts/make_demo_gif.py. The 45-second recording script lives in docs/demo-45s.md.

Design

Full design and decision log: plan.md. Phase reports: .waker/runs/phase1_report.md, phase2_report.md, phase3_report.md.

Status

v1.1.0 — blind evaluation (hidden vault + sanitized grading), engine, 3 adapter tiers, daemon/skills, CI matrix, dashboard and release automation.

Maturity:

  • OpenCode T1 — live E2E verified.
  • Claude T1 — beta: command/stream/permission handling unit-tested, no live CI run yet (the CLI is not installed on the build runner).
  • PTY T3 — Windows only; POSIX support is planned for v1.1.
  • Cost guard — exact for OpenCode, best-effort for Claude, 0 for generic/PTY.

PyPI: the publish.yml workflow is ready (trusted publishing or PYPI_API_TOKEN); publish the v1.0.0 release to trigger the first upload.

License

MIT

Metadata

Release files for waker-ai 1.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for waker-ai 1.1.2
File Size Uploaded Provenance Actions
waker_ai-1.1.2.tar.gz 96.1 kB With provenance Details for waker_ai-1.1.2.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for waker-ai 1.1.2
File Interpreter ABI Platform Actions
waker_ai-1.1.2-py3-none-any.whl Python 3 none any Details for waker_ai-1.1.2-py3-none-any.whl

Total release size: 182.0 kB

Release files / waker_ai-1.1.2.tar.gz

Download URL waker_ai-1.1.2.tar.gz
Size 96.1 kB
Tags Source
SHA-256 checksum
How to use checksums
f423ebddfc10850e77ebc5ea2d7c17eb3f43e003d3f2a480a2c5170f0c5d78cf
BLAKE2b-256 checksum
How to use checksums
a850b8d0fa1076d3590b73f631b6cba56cf13168fc2ec024eb94a58afe219cb5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 8, 2026.

Transparency log

Release files / waker_ai-1.1.2-py3-none-any.whl

Download URL waker_ai-1.1.2-py3-none-any.whl
Size 85.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8b65386a32e1594d6ce9ad8fc0109179caa467b05376d310eb0ad5afe9092e8e
BLAKE2b-256 checksum
How to use checksums
e270d36b1256ee9011d8bdbc983e109c7092f9c06068dbb8c0623f156737a0ef
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 8, 2026.

Transparency log

Security for waker-ai 1.1.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for waker_ai-1.1.2.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Nov 8, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

1.1.2 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page