# Package: dirigent_fermata Harness-agnostic policy gate for AI coding agents. ## Quick Facts - **Type**: Library + binary (`fermata`) - **Main Entry**: `src/lib.rs`, `src/bin/fermata.rs` - **Dependencies**: `ignore`, `toml`, `regex`, `globset`, `serde`, `clap` (cli feature) - **Status**: v0.1 — library + CLI + Claude hook adapter ## Layering Three concentric layers; nothing inner imports from anything outer. - **`core/`** — harness-unaware, transport-unaware, sync. Types (`Op`, `Decision`), `.botignore` walker, `botignore.toml` parser, `Policy::check` / `check_command`, path extraction. Sync, no tokio. - **`harness/`** — `HarnessAdapter` trait over a normalized `ToolCall`. Each adapter (Claude, future Codex, etc.) lives in its own submodule, feature-gated. - **`bin/fermata.rs`** — only place where `clap`, stdio, and exit codes appear. ## Release Model Developed in this monorepo; planned to be exported as a standalone repo in the future for advertising / external distribution. Development stays here. See `docs/tools/fermata.md`. ## Dependency Direction `dirigent_tools` depends on `dirigent_fermata`, never the reverse. Fermata must remain usable as a standalone hook/MCP without dragging in the in-process ACP tool runtime. ## Out of scope (v0.1) Codex / Gemini hook adapters, MCP server mode, PostToolUse envelope, `readonly_only` Bash mode, audit log, filesystem watcher. Each is a future task with its own plan. ## See also - `docs/tools/fermata.md` — Dirigent integration plan - `docs/workpad/brainstorm/fermata.md` — canonical product spec