forge-behavior

Manage dotforge v3 behavior governance — view status, toggle behaviors, adjust strictness. Use when the user asks about active behaviors, wants to disable one for the current session, or adjust escala

SKILL.md

GitHub

/forge behavior

Thin wrapper around scripts/forge-behavior/cli.sh. Dispatches behavior governance actions. This skill is part of dotforge v3 (Phase 1 of behavior governance) and should only be used inside dotforge itself or projects that have adopted v3 — not on v2.9 projects.

When to use

Invoke this skill when the user asks any of:

  • "What behaviors are active?"
  • "What's the counter on search-first?"
  • "Disable search-first for this session"
  • "Turn off the nudge on writes"
  • "Make search-first stricter / more relaxed"

Do NOT invoke this skill for v2.9 configuration tasks (use /forge audit, /forge sync, etc.) or for behaviors that have not yet been catalogued (Phase 1 only ships search-first).

Actions

scripts/forge-behavior/cli.sh status [--session SESSION_ID]
scripts/forge-behavior/cli.sh on  <behavior_id> [--project | --session SESSION_ID]
scripts/forge-behavior/cli.sh off <behavior_id> [--project | --session SESSION_ID]
scripts/forge-behavior/cli.sh strict  <behavior_id>
scripts/forge-behavior/cli.sh relaxed <behavior_id>

status — Print the current catalogue (behaviors/index.yaml) plus a per-session summary from .forge/runtime/state.json: counters, effective levels, override counts, pending_block status, and any session-scope overrides.

on / off — Toggle a behavior's active state.

  • --project (default): mutates behaviors/index.yaml. Persistent. After changing, recompile the behavior with scripts/compiler/compile.sh behaviors/<id>/behavior.yaml <output_dir> and restart Claude Code so the new hook registration takes effect.
  • --session SESSION_ID: mutates only .forge/runtime/state.json's behavior_overrides[] for that session. The compiled hook short-circuits silently when disabled. No recompile needed. Effect lasts until the session is purged by TTL.

strict / relaxed — Mutate behaviors/<id>/behavior.yaml escalation:

  • strict: halves each after threshold, minimum 1. Makes violations escalate sooner.
  • relaxed: doubles each after threshold. Makes violations escalate later.
  • Both project-scope only in v1. Session-scope strictness deferred to Phase 2 — the runtime would need to pass a strictness multiplier into forge_resolve_level, which v1 does not support.

Preconditions

  • jq must be installed (runtime requirement).
  • python3 with pyyaml must be installed (YAML reading/writing).
  • The project must already have behaviors/index.yaml. If missing, create one with behaviors: [] and populate via on <id>.

Scope matrix

Action --project --session
status always shown filters to one session
on / off mutates index.yaml writes to state.json
strict mutates yaml (not implemented v1)
relaxed mutates yaml (not implemented v1)

Example flows

Check what is active right now:

/forge behavior status

Silence search-first for a noisy debugging session:

/forge behavior off search-first --session <session_id>

Tighten up for strict development mode:

/forge behavior strict search-first
# then recompile and restart

Notes

  • The CLI honors FORGE_BEHAVIORS_DIR as an override of behaviors/ location — useful for tests and isolated environments.
  • Direct tool result for tests: scripts/forge-behavior/tests/run_all.sh.