forge-friction
Surface recurring friction from session telemetry and generate targeted skills.
Skill by griffinwork40
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/griffinwork40-forge-friction
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md and code. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/forge-friction
What's inside
- Skill name
forge-friction- Description
- Surface recurring friction from session telemetry and generate targeted skills. Use when the user runs /forge-friction.
- License
- Apache-2.0
- Instructions
- 89 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
Run the friction analyzer to get a summary of recent friction patterns:
```bash
python3 "${PLUGIN_ROOT}/scripts/friction/analyzer.py"
```
If no friction sessions exist, tell the user there are no friction patterns in the lookback window.
If friction data exists, review the output. It contains friction categories **ranked by confidence, then frequency**, each with recent examples showing `friction_detail` (what went wrong) and `goal` (what the user was trying to do).
Tool-error categories carry a failure-class suffix. `:timeout`, `:truncated`, and `:slow` are **high-confidence** — real, specific friction a skill can address — and rank first. `:plain` is the **low-confidence residue**: a fast non-zero exit the trace cannot distinguish from a benign result (a `grep` no-match, a `test` that exits 1). It ranks last and should be treated with skepticism. `:unclassified` comes from agent-afk session facets, which count tool errors without a failure class; treat it exactly like `:plain`. Facets also supply each example's `goal`, joined to witness traces through the session ledger's `traceLabel`.
## Dry-run mode
If `$ARGUMENTS` contains `--dry-run`: after the analyzer runs, identify, filter, and classify themes using the criteria in "Your job" below, but instead of presenting them interactively, output two sections:
**Operational** (recommendations only — not skill candidates):
| Category | Count | Recommendation |
|---|---|---|
| ... | N | PreToolUse hook / config change / budget adjustment / ... |
**Shape-gap** (forge candidates):
| Category | Count | Example friction_detail |
|---|---|---|
| ... | N | "truncated quote 1"; "truncated quote 2" |
One row per theme. Truncate each `friction_detail` to ~80 chars. Up to 3 examples per row (semicolon-separated in the cell). If neither table has any rows, print "No themes in lookback window." If only one table is empty, omit that table's header and add a `(none)` row placeholder instead.
After the table (or "no themes" line), print:
> dry-run: no /forge invocation, no telemetry written
Stop. Do NOT proceed to the y/n prompts, `/forge` dispatch, or telemetry write described in "Your job" — those are skipped entirely in dry-run.
## Auto mode
If `$ARGUMENTS` contains `--auto`: skip all y/n prompts and auto-approve all qualifying themes. For each theme classified as shape-gap in Step 2, immediately run `/forge` with the theme as a seed. Chain the invocations sequentially, then log telemetry for each generated skill. `--auto` respects `--dry-run` (if both flags are present, dry-run takes precedence and no /forge invocation or telemetry occurs).
## Your job
Read through the friction categories and their examples. For each category with 3+ sessions, analyze the `friction_detail` strings to identify **recurring themes** — specific, repeated failure modes.
### Step 1 — Filter
Not all friction is actionable. Filter for themes where:
- The same failure mode repeats across multiple sessions (not one-off issues)
- The failure mode is specific enough to act on (not a grab-bag of unrelated errors)
- **Prefer high-confidence failure classes.** Pursue `:timeout` / `:truncated` / `:slow` categories first; they are real friction. Treat `:plain` and `:unclassified` categories as low-confidence — only pursue one if its `friction_detail` / `goal` examples make the recurring failure mode unmistakable.
<!-- Note: two earlier filter bullets — "A skill could change the agent's default behavior" and "The fix is a workflow shape change" — were consolidated into Step 2 Classify (shape-gap indicators), where they fit more naturally as classification criteria rather than pre-filters. -->
### Step 2 — Classify
For each theme that passes the filter, classify it as **operational** or **shape-gap**:
**Operational** — infrastructure/tooling misbehavior, not a missing workflow. Indicators:
- Tool timeouts, slow tools, truncated output (`:timeout`, `:slow`, `:truncated` on any tool)
- Rate limits, usage limits, connection errors (`subagent_fail:RateLimitError`, `UsageLimitError`, `APIConnectionError`, `APIConnectionTimeoutError`)
- Hook blocks working as designed (`hook_block:*` categories)
- Session closures from external causes (`closure:abort`, `closure:timeout` from usage caps, network, or user signal)
- Permission errors, idle watchdog kills (`subagent_fail:PermissionDeniedError`, `IdleWatchdogError`)
- Model rejection errors (`subagent_fail:Error` from HTTP 400/404 on model ids)
- Iteration cap exhaustion from budget undersizing (`closure:iteration_cap`)
**Shape-gap** — a recurring workflow pattern agents perform without skill coverage. Indicators:
- Multiple sessions performing the same multi-step sequence ad-hoc (visible in `goal` field)
- A structural problem agents solve differently each time with no consistent approach
- Goals that consistently `partially_achieved` or `aborted` because no skill owns the workflow shape — not because tools broke
- The `friction_detail` shows the agent improvising a multi-step workaround, not a single tool failing
### Step 3 — Route
**Operational themes:** For each, emit a one-line **recommendation** — the right fix category (PreToolUse hook, config change, budget adjustment, existing skill routing fix, or infrastructure improvement). Do NOT propose `/forge` for operational themes — they are not skill candidates.
**Shape-gap themes:** These are the forge candidates. Route them through the interactive or auto flow below.
**If `--auto` is present** in `$ARGUMENTS`:
- List operational themes with their recommendations (no forge).
- Auto-forge only shape-gap themes. **Skip `:plain` and `:unclassified` tool-error categories entirely in auto mode** — without human review, the low-confidence residue produces noise.
- For each shape-gap theme, immediately run `/forge` from this plugin, seeding it with: "Create a skill that addresses this recurring workflow gap: [theme summary]. Examples: [2-3 friction_detail quotes showing the ad-hoc workaround pattern]."
- Chain the invocations sequentially (wait for forge + qualify to complete before starting the next one).
- After each forge + qualify completes, log to telemetry (see telemetry format below).
- Do not ask for user confirmation; auto-approve all qualifying shape-gap themes.
**If `--auto` is not present** (interactive mode):
1. **Operational themes first**: list each with its one-line recommendation (same `Category | Count | Recommendation` columns as dry-run). No y/n prompt — these are informational.
2. **Shape-gap themes next**: for each, summarize it in one line with the count, then quote 2-3 representative `friction_detail` examples. Ask: "Generate a skill for this? (y/n)"
3. **If the user says yes**:
- Run `/forge` from this plugin, seeding it with: "Create a skill that addresses this recurring workflow gap: [theme summary]. Examples: [2-3 friction_detail quotes showing the ad-hoc workaround pattern]."
- After forge + qualify complete, log to telemetry (see telemetry format below).
4. **If the user says no**, skip it and move on.
**Telemetry** (logged after each skill generation, same in both auto and interactive modes).
Create the telemetry directory if needed and append **one JSONL line** to the SAME file `/forge` writes to — resolve the path identically so both records land together regardless of environment:
```bash
mkdir -p "${AFK_FRAMEWORK_DIR:-${CLAUDE_CONFIG_DIR:-$HOME/.claude}/agent-framework}"
printf '%s\n' '{"timestamp": "<ISO8601>", "source": "friction", "gap": "<THEME_SUMMARY>", "theme": "<THEME_SUMMARY>", "friction_category": "<CATEGORY>", "session_count": <COUNT>, "generated_skill": "<SKILL_NAME>", "qualify_result": "<APPROVE|SALVAGE|REJECT>", "iterations": <ITERATIONS_FROM_FORGE>, "target_scope": "<user|plugin:NAME>"}' >> "${AFK_FRAMEWORK_DIR:-${CLAUDE_CONFIG_DIR:-$HOME/.claude}/agent-framework}/forge-telemetry.jsonl"
```
Substitute the bracketed values, emit compact one-line JSON, and append it with the shell redirect above (or the file-write tool). **Do NOT use `python3 -c`** — the AFK interpreter guard blocks interpreter `-c`/`-e` eval, which silently drops the record. Field notes:
- `gap` mirrors `theme` so friction records join cleanly with `/forge`'s own `generated_skill` records (which key on `gap`); keep both fields.
- `iterations`: use the actual count `/forge` reported (not a hardcoded `1`).
- `target_scope`: where the skill was written (`user` or `plugin:<name>`).
- The `${AFK_FRAMEWORK_DIR:-${CLAUDE_CONFIG_DIR:-$HOME/.claude}/agent-framework}` expression is byte-identical to the one in `/forge`'s telemetry step — do not substitute a hardcoded `~/.afk` path, which diverges from `/forge` under native Claude Code.
You can also drill into a specific category:
```bash
python3 "${PLUGIN_ROOT}/scripts/friction/analyzer.py" --category wrong_approach
```From griffinwork40/agent-framework, Apache-2.0.
More from griffinwork40/agent-framework
- 0.646score
simplify
griffinwork40
Discovers incidental complexity, duplication, and dead code in a codebase and produces a ranked, behavior-preserving reduction plan — optionally applying safe…
SkillAFreshness: A★ 23Claude Code +9 - 0.646score
ship
griffinwork40
Release pipeline for already-done local work.
SkillAFreshness: A★ 23Claude Code +9 - 0.646score
review
griffinwork40
Dispatches parallel dimension agents across a diff, PR (URL or number), commit SHA, branch, staged changes, or patch file — covering security, correctness…
SkillAFreshness: A★ 23Claude Code +9 - 0.646score
fix-pr
griffinwork40
One-verb pipeline for the operator's highest-frequency manual loop: fetch a PR's unresolved reviewer feedback (inline review comments, review-summary bodies…
SkillAFreshness: A★ 23Claude Code +9 - 0.646score
ground-state
griffinwork40
Before starting any non-trivial implementation, run a pre-flight reconnaissance pass to triangulate git state, project infrastructure, and prior-session memory.
SkillAFreshness: A★ 23Claude Code +9 - 0.646score
shadow-verify
griffinwork40
Dispatch a parallel adversarial verifier wave after any high-stakes sub-agent investigation (code reviews, audits, findings reports, large refactors, gap…
SkillAFreshness: A★ 23Claude Code +9 - 0.646score
refactor
griffinwork40
Orchestrates safe, large-scale structural changes across a codebase — symbol renames, API migrations, pattern standardizations, layer restructurings.
SkillAFreshness: A★ 23Claude Code +9 - 0.641score
diagnose
griffinwork40
Parallel root-cause analysis for bugs and failing tests.
SkillAFreshness: A★ 23Claude Code +9 - 0.641score
automate
griffinwork40
Set up a scheduled headless Claude run that sends summaries to Telegram.
SkillAFreshness: A★ 23Claude Code +9 - 0.640score
research
griffinwork40
Dispatches two sub-agents in parallel to gather external and local context for the current task.
SkillAFreshness: A★ 23Claude Code +9 - 0.606score
resolve
griffinwork40
Resolves PR code review feedback.
SkillBFreshness: B★ 23Claude Code +9 - 0.606score
ground-claim
griffinwork40
Grounds capability claims with file-read evidence.
SkillBFreshness: B★ 23Claude Code +9
Signals
- Stars
- 23
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Sep 26, 2026 (1 month ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- Apache-2.0
- Repository
- github.com/griffinwork40/agent-framework
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from griffinwork40
- 0.646score
ship
griffinwork40
Release pipeline for already-done local work.
SkillAFreshness: A★ 23Claude Code +9 - 0.646score
simplify
griffinwork40
Discovers incidental complexity, duplication, and dead code in a codebase and produces a ranked, behavior-preserving reduction plan — optionally applying safe…
SkillAFreshness: A★ 23Claude Code +9 - 0.646score
shadow-verify
griffinwork40
Dispatch a parallel adversarial verifier wave after any high-stakes sub-agent investigation (code reviews, audits, findings reports, large refactors, gap…
SkillAFreshness: A★ 23Claude Code +9 - 0.646score
ground-state
griffinwork40
Before starting any non-trivial implementation, run a pre-flight reconnaissance pass to triangulate git state, project infrastructure, and prior-session memory.
SkillAFreshness: A★ 23Claude Code +9 - 0.646score
refactor
griffinwork40
Orchestrates safe, large-scale structural changes across a codebase — symbol renames, API migrations, pattern standardizations, layer restructurings.
SkillAFreshness: A★ 23Claude Code +9 - 0.646score
fix-pr
griffinwork40
One-verb pipeline for the operator's highest-frequency manual loop: fetch a PR's unresolved reviewer feedback (inline review comments, review-summary bodies…
SkillAFreshness: A★ 23Claude Code +9
Cite this page
forge-friction skill. Agent Mart. https://agentmart.dev/skills/griffinwork40-forge-friction (last updated 2026-10-24)