168aefd415
Realign fermata around redaction (PostToolUse) as the primary security layer, with access control (PreToolUse) as supplementary write/bash protection. Remove botignore.toml — policy rules now live in .botsecrets [policy] section. Add fermata.toml as an alias for .botsecrets. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
3.1 KiB
3.1 KiB
Package: dirigent_fermata
Harness-agnostic secret redaction engine and 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),aho-corasick,serde_yaml - Status: v0.2 — secret redaction + policy gate (
.botsecretsnow includes[policy]section)
Layering
Three concentric layers; nothing inner imports from anything outer.
core/— harness-unaware, transport-unaware, sync. Types (Op,Decision),.botignorewalker,Policy::check/check_command, path extraction..botsecretscontains a[policy]section for access control rules (fermata.tomlis accepted as an alias for.botsecrets). Sync, no tokio.core/secrets/— the secret filtering engine:config.rs—.botsecretsTOML parser (SecretsConfig,PolicyConfig) and hierarchical resolution (user, project, local override).manifest.rs— discovers secret-containing files from.botsecretspatterns and loads their content for redaction.parser.rs— multi-format secret file parser (.env, TOML, YAML, JSON). Extracts key-value pairs where the value is a secret.patterns.rs— built-in key name patterns (~30 universal patterns like*_KEY,*_SECRET,*_PASSWORD) and gitleaks-derived regex patterns for heuristic scanning.redactor.rs—Redactorbuilds an Aho-Corasick automaton from known secret values and replaces them in arbitrary text. Sub-millisecond performance.scanner.rs—Scannerapplies heuristic regex patterns to detect secrets not covered by the known-value manifest (entropy-based and format-based detection).
harness/—HarnessAdaptertrait over a normalizedToolCall(PreToolUse) andPostToolUsePayload(PostToolUse). Each adapter (Claude, future Codex, etc.) lives in its own submodule, feature-gated. PostToolUse enables output redaction viaupdatedToolOutputbefore content enters the LLM context.bin/fermata.rs— only place whereclap, 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.2)
Codex / Gemini hook adapters, MCP server mode, readonly_only Bash mode, audit log, filesystem watcher, context taint tracking. Each is a future task with its own plan.
See also
docs/tools/fermata.md— Dirigent integration plandocs/workpad/brainstorm/fermata.md— canonical product specdocs/architecture/fermata-security-philosophy.md— security philosophy and the reveal triangle.botsecretsformat:core/secrets/config.rs— unified config for secret redaction and policy (fermata.tomlaccepted as alias)