Configuration governance for Claude Code. Bootstrap, audit, sync, and evolve .claude/ across projects.
翻译准备中
开发工具GitHub @luiseiman自行安装运营者未确认
试用过了吗? 点一下就好,无需登录。
尚未收集仓库信息。
尚未检测到更新。GitHub 发布版本后会显示在这里。
制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Behavior governance for Claude Code. Declare runtime policies on tool calls — "search before writing", "no destructive git", "verify before shipping" — and enforce them via compiled PreToolUse hooks that share a session-scoped state file. Escalates silently → nudge → warning → soft_block → hard_block.
behaviors/no-destructive-git/behavior.yaml # declarative policy
↓ (compile)
.claude/hooks/generated/*.sh # runtime enforcement
↓ (observe)
.forge/runtime/state.json # counters, flags, per-session
Other tools stop at configuration. dotforge governs behavior — and keeps auditing, syncing, and evolving your .claude/ setup across every repo you manage.
bootstrap → audit → sync → capture → propagate → behaviors
↑ │
└─────────────────────────────────────────────────┘
For people and teams managing more than one Claude Code project.
A scout of the 23 top-starred Claude Code configuration repos exposed that block-destructive.sh, lint-on-save.sh, warn-missing-test.sh, detect-stack-drift.sh and every stack lint hook read a $TOOL_INPUT environment variable that Claude Code never sets. Hook input arrives only as JSON on stdin, so the command was always empty and the hooks exited 0 in every real session from v0.1.0 to v4.8.0. The test harness injected the variable by hand and masked it. All 14 hooks now read $(cat) and parse .tool_input.*; tests feed stdin with the real payload. Run /forge sync in every managed project — until then its security hook is still paper. Live proof after the fix: the hook blocked the commit that described it, and lint-on-save.sh fired for the first time ever.
The v4.8.0 context monitor (pre-compact-warning.sh) measured transcript bytes, which never shrink on compaction, and reported 230% after the first compaction. It now reads message.usage of the last assistant turn and derives the window from the model id.
Every third-party claim from the scout was checked against code.claude.com/docs before landing: permission_mode, stop_hook_active, permissionDecision: ask, classifierContext, PermissionRequest message/interrupt, timeout fall-through + onFailure, blockable ConfigChange, status line prompt_cache.* fields. One scout claim was refuted and recorded. Stale overrides against system-prompt text that no longer exists ("DO NOT ADD ANY COMMENTS", "fewer than 4 lines") were replaced with the live directive from Piebald-AI/claude-code-system-prompts, now a /forge watch source. Four practices captured; the expanded deny-list proposal was declined by design.
defaultMode is unset (audit item 8 adjusted); project scope cannot set auto/bypassPermissions; todo tools absent on current models (respect-todo-state disabled); agents use tools: (the allowed-tools: field was silently ignored); behaviors emit additionalContext / permissionDecision instead of the model-invisible systemMessage; AGENTS.md first-class in the audit; benchmark skill retired in favor of claude plugin eval.scripts/forge-doctor.sh (intact / drifted / missing / unmanaged by sha256, drives /forge sync and /forge diff), protect-lint-config behavior (opt-in), docs/v3/EVAL-METHOD.md (placebo-controlled evals — how a behavior earns on-by-default), --no-verify / core.hooksPath blocked.Full detail per version in docs/changelog.md.
以上为 README 的开头部分。其余内容请阅读原文。 查看完整 README ↗