Skip to main content

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/vibeMistral 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

exactor-0.1.0.tar.gz (17.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

exactor-0.1.0-py3-none-any.whl (12.0 kB view details)

Uploaded Python 3

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

Hashes for exactor-0.1.0.tar.gz
Algorithm Hash digest
SHA256 2acf09feb2ca1f148cc4d3e5f7a36fefe94bb0c2088727d8f8d53efd35f22d25
MD5 81d8d3073812cae71cf6da0e9717cafe
BLAKE2b-256 8c5cfd90c00d48851f3d6ac74c1afd0c7bbd2b24727f0959f113d1f672e6f58a

See more details on using hashes here.

Provenance

The following attestation bundles were made for exactor-0.1.0.tar.gz:

Publisher: release.yml on HeinrichvH/Exactor

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for exactor-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4e39e0c1efb246dfffe5593984f73463412df486622cfa2d163287ef52b12650
MD5 a2b7d587a7f2735f2206d233aa551427
BLAKE2b-256 f3da29d90dd4112f454d51bee44b2e230438ed5dbbd9b59a70edda8fd3769922

See more details on using hashes here.

Provenance

The following attestation bundles were made for exactor-0.1.0-py3-none-any.whl:

Publisher: release.yml on HeinrichvH/Exactor

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page