Overwatcher
A supervisor skill for multi-agent coding workflows. Splits work into disjoint file domains, then rejects worker output that breaks its contract or fails verification.
Quick start · How it works · CLI · Examples · Contributing
Why
Unsupervised agent pipelines tend to fail in three ways:
- Drift: workers edit files outside their task and break shared config.
- Collisions: parallel workers edit the same files and create merge conflicts.
- False "done": workers report "all tests pass" after deleting assertions, adding
assert True, or wrapping errors inexcept: pass.
Overwatcher counters each:
| Failure | Defense |
|---|---|
| Drift | Per-worker contract listing authorized files; out-of-scope diffs are rejected |
| Collisions | Contracts are disjoint; no two workers share a file |
| False "done" | Claims are ignored. The diff is scanned for known shortcuts and a verify command must exit 0 |
Quick start
1. Install CLI & Python package
# Install via pip:
pip install overwatcher-ai
# Or install directly from GitHub:
pip install git+https://github.com/FahadBinNasir/overwatcher.git
2. Install as an Agent Skill
Claude Code shown; other platforms below:
mkdir -p .claude/skills/overwatcher
cp SKILL.md .claude/skills/overwatcher/SKILL.md
Then ask your agent:
Use the overwatcher skill to refactor auth and the DB layer in parallel.
The agent acts as supervisor: it partitions the task, dispatches workers, audits each result, and returns a verification report.
How it works
flowchart TD
A[1. Partition & contracts] --> B[2. Parallel dispatch]
B --> C[3. Cross-examination]
C -->|fail| D[Rejection notice]
D --> B
C -->|pass| E[4. Synthesis & report]
Rules
- No trust in summaries. Output is unverified until inspected and executed.
- Adversarial review. Look for edge cases, race conditions, leaks, and swallowed errors.
- Disjoint ownership. Workers never touch overlapping files.
- Reject, don't patch. Send failures back with line-numbered proof. The supervisor only patches after repeated worker failures.
Phases
1. Partition. Split the goal into 2–4 independent domains (e.g. Auth, DB, API, UI). Give each worker a contract:
- Authorized targets: exact file paths
- Acceptance criteria: deliverables and test targets
- Forbidden: mock fallbacks, leaked secrets, API breakage
2. Dispatch. Start workers concurrently with domain-specific prompts. Wait on completion signals; don't poll.
3. Cross-examine. When a worker reports done:
- Diff: confirm changes stay inside the contract; reject mocks, boilerplate, and new dependencies. The CLI automates the file-boundary and pattern checks.
- Build: run the project's compilers and linters (
tsc --noEmit,ruff,flake8, ...). - Test: run the targeted tests; check that assertions are real.
- Verdict:
REJECTION NOTICEon any defect, otherwiseAUDITED & VERIFIED.
4. Synthesize. Run the full regression suite, then produce the master report with logs.
Cross-examiner CLI
Run via the installed overwatcher command or directly via scripts/cross_examiner.py. It requires only Python 3.8+ and git; no LLM needed.
# Run via installed CLI:
overwatcher \
--worker "auth_guard" \
--domain "Authentication" \
--allowed-files "src/core/auth.py" "tests/test_auth.py" \
--verify-cmd "pytest tests/test_auth.py -v" \
--repo-dir .
# Or run via standalone script:
python scripts/cross_examiner.py ...
| Flag | Default | Purpose |
|---|---|---|
--worker |
worker_subagent |
Worker ID, shown in the notice |
--domain |
core |
Domain name, shown in the notice |
--allowed-files |
none | Glob patterns the worker may change. Boundary check is skipped if empty |
--verify-cmd |
none | Shell command that must exit 0 |
--repo-dir |
. |
Git repository to audit |
Checks
- Boundaries: files from
git statusmust match an allowed glob (full path or basename, viafnmatch). - Diff patterns: added lines in
git diff HEADare regex-scanned for:except: pass,except Exception: pass, emptycatch (...) {}assert True,assert 1 == 1,expect(true).toBe(true)debugger,breakpoint()
- Verify command: run in the repo; non-zero exit is a failure (last 10 output lines are reported).
Exit codes: 0 = AUDITED & VERIFIED, 1 = REJECTED (prints a rejection notice).
Limitations
- Pattern matching is regex on diff text, not AST analysis. It catches common shortcuts, not all.
- Audits the working tree against
HEAD. Uncommitted changes only. - With parallel workers in one working tree, each audit sees the others' edits as violations. Give each worker its own
git worktreeor branch. - Basename matching means
auth.pyalso matchesother/dir/auth.py. Use full-path globs. - Untracked files count toward the boundary check, but their contents are not pattern-scanned.
--verify-cmdruns withshell=True. Pass only trusted commands.- Linters and builds run only if you put them in
--verify-cmd.
Run its tests:
python tests/test_cross_examiner.py
Platform install paths
| Platform | Target |
|---|---|
| Claude Code | .claude/skills/overwatcher/SKILL.md |
| Antigravity | .agents/skills/overwatcher/SKILL.md |
| Cursor | .cursor/rules/overwatcher.mdc |
| Cline / Roo-Code | .clinerules or .roomodes |
| OpenHands | .openhands/microagents/overwatcher.md |
| LangGraph / CrewAI | Call scripts/cross_examiner.py from a supervisor node |
Message formats
Rejection notice (sent to a worker on failure)
[OVERWATCHER REJECTION NOTICE]
Worker ID: {worker_name}
Target Domain: {domain_name}
Status: REJECTED — REWORK REQUIRED
1. Flaws Detected:
- File: {file_path}:{line_number}
Issue: {defect}
Evidence: {failing_test_output_or_diff_snippet}
2. Required Remediation:
- {instruction}
Re-submit only after passing: `{verification_command}`.
Master report (delivered to the user)
# Overwatcher Master Verification Report
## Summary
- Domains audited: 2
- Workers: 2
- Cross-examination rounds: 3
- Status: VERIFIED / ZERO REGRESSIONS
## Breakdown
| Domain | Worker | Files | Status | Evidence |
| :-- | :-- | :-- | :-- | :-- |
| Auth | auth_guard | src/core/auth.py | PASSED | 8/8 tests |
| DB | db_reliability | src/core/db.py | PASSED | 14/14 tests |
Examples
| File | Shows |
|---|---|
| sample_workflow.md | End-to-end supervised refactor |
| sample_worker_contract.md | A filled-in contract |
| sample_rejection_order.md | A real rejection notice |
| sample_adjudication_report.md | A passing report |
Repository layout
pyproject.toml # PEP 517 / PEP 621 package config
SKILL.md # skill spec
src/overwatcher/ # core Python package & CLI implementation
templates/ # contract, rejection, report templates
scripts/ # standalone wrapper script
tests/ # cross_examiner tests
examples/ # worked examples
assets/ # logo, icons, and social banner
Contributing
New audit rules, heuristics, and language support are welcome.
- Fork and branch:
git checkout -b feature/audit-rule - Add tests; run
python tests/test_cross_examiner.py - Open a PR
License
MIT © 2026 Fahad Bin Nasir
Metadata
Release files for overwatcher-ai 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| overwatcher_ai-0.1.0.tar.gz | 14.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| overwatcher_ai-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 24.8 kB
Release files / overwatcher_ai-0.1.0.tar.gz
| Download URL | overwatcher_ai-0.1.0.tar.gz |
|---|---|
| Size | 14.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
67a238bb7e4deb5dd64acf86de23efd530c877cb91a4765719cb8146a76e3ecc
|
|
BLAKE2b-256 checksum How to use checksums |
ae2ef81a770b3fc5db4a87d54caa5e75bc2620cda8dd4ae5a8ed1b0e5955aeb6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Oct 17, 2026.
Transparency logRelease files / overwatcher_ai-0.1.0-py3-none-any.whl
| Download URL | overwatcher_ai-0.1.0-py3-none-any.whl |
|---|---|
| Size | 10.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e30e2cbb3c5e6cc8465fb0e736b0fe4323cebc3cf2941000719c2162fd4190fb
|
|
BLAKE2b-256 checksum How to use checksums |
645a06db4f3a2c5af47ddb84c8f427fe0ebc293895a5e2efda8cf3bc9d7d9533
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Oct 17, 2026.
Transparency log