Enforce the discipline your AGENTS.md only suggests.
Project description
exactor
Disciplinam quam AGENTS.md tantum suggerit, impone.
Enforce the discipline your AGENTS.md only suggests.
Exactor is a Claude Code hooks layer that makes subagent delegation mandatory, not optional. Configure once in .exactor.yml — your researcher, explorer, and log digger fire every time, not just when the model decides to.
The problem
You write in your AGENTS.md: "use the researcher tool for web questions."
The model reads it. Sometimes follows it. Often doesn't.
Exactor turns that suggestion into a constraint. A WebSearch call triggers your researcher. A grep triggers your explorer. The raw tool never fires. Not sometimes — always.
How it works
Claude Code fires hooks before and after every tool call. Exactor sits in those hooks, matches tool calls against rules you define in .exactor.yml, and routes them to the configured worker instead. Workers are plain shell commands — bring your own.
# .exactor.yml
workers:
research:
command: "research {query}"
explore:
command: "explore {query}"
intercept:
- tool: WebSearch
route_to: research
- tool: Bash
match: "^(grep|rg|find)\\b"
route_to: explore
Recipes
Ready-made configs for common researcher and explorer tools live in recipes/.
Copy the one matching your setup and drop it in your repo root.
recipes/vibe— Mistral Vibe as a mandatory researcher- more coming (Claude CLI, Perplexity, Ollama — contributions welcome)
Worker contract
A worker is any CLI that:
- accepts the intercepted query via
{query}substitution - reads nothing from stdin (by default; configurable via
stdin:) - writes the result to stdout
- writes errors to stderr
- exits 0 on success, non-zero on failure
Pass flags via args:, secrets via env:. See recipes/vibe/.exactor.yml
for a complete example.
Status
Early development. Core hook dispatcher and SQLite working-memory cache
are in place. Structured worker invocation (args / env / stdin / cwd)
landed.
Installation
pipx install exactor
exactor init
Published to PyPI soon.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file exactor-0.1.0.tar.gz.
File metadata
- Download URL: exactor-0.1.0.tar.gz
- Upload date:
- Size: 17.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2acf09feb2ca1f148cc4d3e5f7a36fefe94bb0c2088727d8f8d53efd35f22d25
|
|
| MD5 |
81d8d3073812cae71cf6da0e9717cafe
|
|
| BLAKE2b-256 |
8c5cfd90c00d48851f3d6ac74c1afd0c7bbd2b24727f0959f113d1f672e6f58a
|
Provenance
The following attestation bundles were made for exactor-0.1.0.tar.gz:
Publisher:
release.yml on HeinrichvH/Exactor
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
exactor-0.1.0.tar.gz -
Subject digest:
2acf09feb2ca1f148cc4d3e5f7a36fefe94bb0c2088727d8f8d53efd35f22d25 - Sigstore transparency entry: 1358189477
- Sigstore integration time:
-
Permalink:
HeinrichvH/Exactor@cdb19bb8f0449e27903d7830af53a55fe11e25ab -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/HeinrichvH
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@cdb19bb8f0449e27903d7830af53a55fe11e25ab -
Trigger Event:
push
-
Statement type:
File details
Details for the file exactor-0.1.0-py3-none-any.whl.
File metadata
- Download URL: exactor-0.1.0-py3-none-any.whl
- Upload date:
- Size: 12.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4e39e0c1efb246dfffe5593984f73463412df486622cfa2d163287ef52b12650
|
|
| MD5 |
a2b7d587a7f2735f2206d233aa551427
|
|
| BLAKE2b-256 |
f3da29d90dd4112f454d51bee44b2e230438ed5dbbd9b59a70edda8fd3769922
|
Provenance
The following attestation bundles were made for exactor-0.1.0-py3-none-any.whl:
Publisher:
release.yml on HeinrichvH/Exactor
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
exactor-0.1.0-py3-none-any.whl -
Subject digest:
4e39e0c1efb246dfffe5593984f73463412df486622cfa2d163287ef52b12650 - Sigstore transparency entry: 1358189571
- Sigstore integration time:
-
Permalink:
HeinrichvH/Exactor@cdb19bb8f0449e27903d7830af53a55fe11e25ab -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/HeinrichvH
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@cdb19bb8f0449e27903d7830af53a55fe11e25ab -
Trigger Event:
push
-
Statement type: