skills/arc-observing/SKILL.md
Use when user asks about behavioral patterns, requests instinct status, or wants to confirm/contradict a detected pattern
npx skillsauth add gregoryho/arcforge arc-observingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Manage automatically detected behavioral patterns (instincts) from tool usage observations. The observer daemon runs in the background as an orchestrator: it captures tool-call observations, assembles batches, calls the LLM curator to generate candidate proposals, and ingests those proposals into the learning queue. Confirmed instincts are loaded as behavioral guidance at session start.
Three layers in arcforge — this skill handles Behavioral:
| Task | Command |
|------|---------|
| View instincts | node "${SKILL_ROOT}/scripts/instinct.js" status --project {p} |
| Confirm pattern | node "${SKILL_ROOT}/scripts/instinct.js" confirm {id} --project {p} |
| Contradict pattern | node "${SKILL_ROOT}/scripts/instinct.js" contradict {id} --project {p} |
| Daemon status | bash "${SKILL_ROOT}/scripts/observer-daemon.sh" status |
| Start daemon | bash "${SKILL_ROOT}/scripts/observer-daemon.sh" start |
| Stop daemon | bash "${SKILL_ROOT}/scripts/observer-daemon.sh" stop |
Set SKILL_ROOT from skill loader header (# SKILL_ROOT: ...):
: "${SKILL_ROOT:=${ARCFORGE_ROOT:-}/skills/arc-observing}"
if [ ! -d "$SKILL_ROOT" ]; then
echo "ERROR: SKILL_ROOT=$SKILL_ROOT does not exist. Set ARCFORGE_ROOT or SKILL_ROOT manually." >&2
exit 1
fi
The observer daemon is a four-layer orchestrator:
hooks/observe/main.js records every tool call to ~/.arcforge/observations/{project}/observations.jsonlnode $CURATOR_CLI assemble-batch --project to gather recent observation windows into a structured batchclaude --model haiku --max-turns 15 --print --output-format json --json-schema with the batch. The LLM curator produces structured candidate proposals rather than direct instinct file writesnode $CURATOR_CLI ingest-proposal --batch-id --response-file to parse the LLM response and append candidates to the review queue at ~/.arcforge/learning/candidates/queue.jsonlThe daemon never writes instinct .md files directly, and SessionStart never auto-loads instinct bodies into Claude context. All candidate proposals flow through the LLM curator into the review queue; human review via arcforge learn dashboard is the only path that produces active instinct files (Layer 8 activation), and activated instincts are surfaced through dashboard / history / evolve flows rather than runtime auto-injection.
---
id: grep-before-edit
trigger: "when modifying code in a file"
confidence: 0.65
domain: workflow
source: session-observation
project: my-api
last_confirmed: 2026-02-08
confirmations: 8
contradictions: 0
---
# Grep Before Edit
## Action
Always use Grep to find the exact location before using Edit.
## Evidence
- Observed 8 times in session abc123 (2026-02-08)
- Pattern: Grep → Read → Edit sequence
~/.arcforge/
├── observations/{project}/
│ ├── observations.jsonl # Current (append-only)
│ └── archive/ # Processed observations
│
├── instincts/
│ ├── {project}/
│ │ ├── grep-before-edit.md # Atomic instincts
│ │ └── archived/ # Decayed instincts
│ ├── global/ # Cross-project (promoted via dashboard)
│ ├── global-index.jsonl # Bubble-up tracking
│ ├── config.json # Observer configuration
│ └── .observer.pid # Daemon PID file
│
└── learning/
├── candidates/
│ └── queue.jsonl # LLM curator output (pending review)
└── dashboard/
└── actions.jsonl # Dashboard action audit log
Confidence is metadata stored on the candidate / activated instinct record. It does not drive runtime auto-loading. It informs which records to surface in dashboard / arc-recalling / history views.
Auto-detected by daemon: confidence 0.5
Confirmed → +0.05 (cap 0.9)
Contradicted → -0.10 (floor 0.1), -0.05 for manual/reflection sources
No activity → -0.02/week, -0.01/week for manual/reflection sources
>= 0.7 → Surfaced prominently in dashboard / arc-recalling
0.3-0.7 → Listed as summary
< 0.3 → Silent
< 0.15 → Archived (moved to archived/ subdir)
.analyzing.lock file with a 30-minute stale TTL before running the LLM curator. Concurrent daemon runs are blocked automatically.OBSERVER_DAEMON_WATCHDOG_SECS (default 120s) timeout prevents hung LLM curator calls from blocking subsequent runs.ARCFORGE_OBSERVE_SKIP_PATHS and .eval-trials/ paths are excluded from observation capture to prevent eval noise from polluting the learning queue.When showing instincts to users, group by domain and show confidence bars:
## WORKFLOW (3)
████████░░ 80% grep-before-edit
trigger: when modifying code
action: Always grep first
██████░░░░ 60% read-before-write
trigger: when creating files
action: Check if file exists first
When user agrees or disagrees with a pattern:
Patterns appearing in 2+ projects can be promoted to ~/.arcforge/instincts/global/ via the dashboard Promote action. The Promote action requires explicit user authorization — silent auto-promotion is not supported.
Wrong: Manually creating instincts for techniques Right: Instincts are auto-detected from behavior; techniques go to /learn
Wrong: Treating all instincts equally
Right: Surface >= 0.7 prominently in dashboard / arc-recalling; summaries for 0.3-0.7; hide < 0.3. Confidence informs surfacing, not runtime auto-loading.
Wrong: Showing instincts without offering confirm/contradict Right: Always offer user the chance to validate or reject patterns
testing
Use when the user explicitly invokes `/arcforge:arc-auditing-spec <spec-id>` for a read-only advisory audit of an SDD spec family (design, spec, dag, decision anchors). Only triggered by direct user invocation; never auto-invoked from any pipeline skill.
testing
Use when the user wants to create, query, audit, or initialize an Obsidian vault — saving notes/ideas/URLs into it ("save this" / "file this back" included), querying vault knowledge, auditing health (missing links, orphans, drift), ingesting files, or registering vaults. Not for Excalidraw diagrams — use arc-diagramming-obsidian.
data-ai
Use when specs/<spec-id>/dag.yaml has 2+ ready epics and the lead is staying present to monitor epic-level parallel work via agent teammates. Trigger on mentions of agent teams/teammates for multi-epic work, or after arc-planning yields multiple ready epics. For walk-away unattended execution, use arc-looping.
data-ai
Use when the user wants an Excalidraw diagram or any visual representation — architecture, flowchart, mind map — including casual "draw this" / "show me how this works visually". Also use when arc-maintaining-obsidian delegates Synthesis visuals beyond embedded Mermaid.