{"id":"14adf4e5-83fe-447c-97fa-6a7227458bf1","shortId":"kKBPVr","kind":"skill","title":"friction-triage","tagline":"Interactively walk through every friction log in `.ninthwave/friction/` one at\na time. For each log: read it, assess severity and possible duplicates, ask the\nhuman what to do (fix now / create work item / update doc / drop / merge / skip),\nexecute the decision, and delete the lo","description":"## What this skill is\n\nThis is the canonical way to process friction logs in this repo. It is a synchronous, human-in-the-loop session: you read each log, the user decides what to do, you execute, you delete. There is no async batch / review-PR fallback. The whole point is that the human stays in the loop and the inbox actually gets to zero in one sitting.\n\n---\n\n## Interactive Questions (CRITICAL)\n\nThis skill is highly interactive. You MUST use your interactive question tool to ask the user questions. Do NOT print a question as text and wait for a response.\n\n**Tool names by platform:** `AskUserQuestion` (Claude Code), `question` (OpenCode), `request_user_input` (Codex), `ask_user` (Copilot CLI, Gemini CLI). Use whichever is available in your environment.\n\n**Every question must follow this structure:**\n\n1. **Re-ground:** State the project, the current branch, what phase you are in, and \"log M of N\". Assume the user has not looked at this window in 20 minutes.\n2. **Explain simply:** Paraphrase the friction in plain English. Say what hurt, not just what the log file is named.\n3. **Recommend:** State which option you would pick and why, in one line.\n4. **Options:** Lettered options A) through F). When an option involves effort, indicate the scale.\n\n---\n\n## Hard rules\n\n- **Never group questions across logs.** Always one question per log. **But DO batch the slow parts:** investigation runs in parallel up front (Phase 2), execution runs after all decisions are collected (Phase 4). The human's interactive window in Phase 3 must be as tight as possible: no nested confirmations, no waiting for subagents, no follow-up \"are you sure\" prompts.\n- **Never commit.** The skill stages edits and writes new files. The human commits at the end if they want to.\n- **Work items must follow `.ninthwave/work-item-format.md`.** Read it before writing any new work item file.\n- **Generate lineage tokens with `nw lineage-token`** when creating a work item, the same way `/decompose` does.\n- **Duplicate detection is best-effort.** If you are not certain two logs are duplicates, surface it as an option and let the human decide. Do not auto-merge.\n- **\"Drop\" is a valid answer.** Friction that is no longer relevant is exactly what this flow exists to clear. Do not argue with the user when they pick D.\n- **ASCII only.** No em dashes, no smart quotes, no ellipsis characters. Use `--`, straight quotes, and `...`. The repo enforces a `no-em-dash` lint rule on `.md` files.\n\n---\n\n## Phase 1: LOAD\n\n**Goal:** Find every friction log and prepare to walk through them.\n\n1. List the friction inbox:\n   ```bash\n   ls .ninthwave/friction/*.md 2>/dev/null\n   ```\n   Exclude `.gitkeep`. Friction logs live flat in `.ninthwave/friction/`; there is no archive directory. The triage flow is \"log -> handle -> delete\", end of life.\n\n2. If there are zero logs, tell the user \"Friction inbox is clean. Nothing to triage.\" and exit.\n\n3. Sort the logs by filename (timestamps in the filename make this FIFO by default). Oldest first.\n\n4. Announce the shape of the session so the human knows what is coming: \"Found N friction logs. I will investigate all of them in parallel first (this is the slow part). Then I will ask you about each one quickly. Then I will apply your decisions in a batch at the end. The interactive part should take a couple of minutes.\"\n\n---\n\n## Phase 2: INVESTIGATE (parallel)\n\n**Goal:** Front-load all the slow work. Every friction log gets a grounded investigation before the human is asked anything.\n\nTriage decisions are dramatically better when grounded in the actual codebase, git history, the rest of the friction inbox, and the open work-item queue. Do not try to do this analysis from your own context: you will skim, you will guess, and recommendations will be soft. Delegate it to subagents, and run them in parallel so the human's interactive window in Phase 3 is not gated on slow exploration.\n\n### How to launch\n\n**Launch one Explore subagent per log, all in parallel.** Issue a single assistant message containing N `Agent` tool calls, one per friction log. Do NOT spawn them sequentially. This is the entire point of the phase.\n\nIf the inbox holds more than 10 logs, batch in groups of 10 (still parallel within each group). Wait for one group to finish before launching the next.\n\n**Subagent type:** in Claude Code use `subagent_type: \"Explore\"` with thoroughness \"medium\". On other platforms use the equivalent codebase-exploration agent.\n\n### Subagent prompt template\n\nFill in the bracketed parts for each log before launching:\n\n```\nYou are investigating ONE friction log from a ninthwave repo so a human can decide what to do with it. Read whatever you need (code, git log, other friction logs, open work items) to give a grounded recommendation AND draft the concrete artifact that would be applied if the human approves.\n\nFriction log path: [path]\nFriction log contents (verbatim):\n[paste the entire file body, including frontmatter fields]\n\nInvestigate and report back, in this exact section order:\n\n1. WHERE A FIX WOULD LAND\n   Identify specific files (with line numbers when possible) where the rectification would happen. If the friction names a tool, file, command, behavior, or doc, find it in the repo.\n\n2. ALREADY ADDRESSED?\n   Check `git log --since=[log date]` for commits that look related. Read the current state of the relevant code/docs to see whether the friction has already been fixed since the log was written. State explicitly: yes (with commit SHA) / no / unclear.\n\n3. EXISTING WORK ITEMS\n   Look in `.ninthwave/work/` for any open work items that already cover this friction. List filename and ID for each match. If none, say \"none\".\n\n4. DUPLICATE FRICTION LOGS\n   Look at the other files in `.ninthwave/friction/` for logs that overlap this one. List filename and a one-line reason for the overlap. If none, say \"none\".\n\n5. SMALLEST CONCRETE FIX\n   Describe the smallest change that would resolve this friction. Be specific: \"edit `agents/implementer.md` around line 380 to add a step that does X\" beats \"improve the worker logic\". If the fix is non-trivial or speculative, say so and sketch the shape instead.\n\n6. RECOMMENDATION\n   Pick exactly one tag and give a one-sentence reason:\n     FIX_NOW         -- small code change, obvious, low risk\n     UPDATE_DOC      -- the fix is editing a doc / skill / prompt\n     CREATE_WORKITEM -- real fix is non-trivial, needs its own PR\n     DROP            -- already fixed, stale, or not actionable\n     MERGE_INTO      -- duplicate of another log; name which one\n\n7. DRAFT THE ARTIFACT\n   Produce the concrete thing that would be applied if the human approves your recommendation. Do not write any files; include the artifact inline in your report so the skill can apply it later.\n\n   - FIX_NOW or UPDATE_DOC: the exact file path and a before/after edit, ready for the Edit tool. Show enough surrounding context that `old_string` will be unique. Use fenced code blocks labeled `BEFORE` and `AFTER`.\n   - CREATE_WORKITEM: the full work item file. Filename in the form `{priority_num}-{domain_slug}--{ID}.md`. Body following `.ninthwave/work-item-format.md` exactly. Leave the lineage token as the literal string `<LINEAGE>`; the skill will fill it in.\n   - DROP: a one-line receipt naming the commit SHA or existing work item that resolves the friction.\n   - MERGE_INTO: the target log filename and a one-line note on what distinct context to append.\n\nBe concrete, not vague. No prose paragraphs, no hedging. Cap your report at 500 words including the artifact.\n```\n\n### After all subagents return\n\nBuild a triage table in your working notes, indexed by log path. One entry per log:\n\n```\n{\n  <log_path>: {\n    assessment: <synthesized block, see below>,\n    rec: <FIX_NOW | UPDATE_DOC | CREATE_WORKITEM | DROP | MERGE_INTO>,\n    draft: <the concrete artifact from section 7, kept verbatim>,\n    full_report: <the subagent's full response, retained for fallbacks>\n  }\n}\n```\n\nSynthesized assessment block format:\n\n```\nLog M of N: <filename>\nItem: <item id>   Severity: <low|medium|high>   Date: <date>\nFriction: <one-sentence paraphrase of what hurt>\nWhere it would land: <file:line, file:line>\nAlready addressed?: <yes (commit abc123) | no | unclear>\nExisting work item?: <ID + path | none>\nPossible duplicate: <other log filename | none>\nSmallest fix: <one-line concrete description>\nSubagent rec: <FIX_NOW | UPDATE_DOC | CREATE_WORKITEM | DROP | MERGE_INTO> -- <one-line reason>\n```\n\nThe triage table is the only state Phase 3 and Phase 4 share. Carry it across both phases without dropping anything.\n\n---\n\n## Phase 3: DECIDE (quick interactive walk-through)\n\n**Goal:** Collect every decision, fast. Do not execute anything.\n\nWalk the triage table in FIFO order. For each log, in order:\n\n1. **Print** the assessment block (so the human has the grounded context on screen above the question).\n2. **Call AskUserQuestion ONCE.** No follow-ups. No \"are you sure\". No inner confirmation loops.\n3. **Mark the subagent's recommendation** as `(Recommended)` and put it first in the option list (per the AskUserQuestion convention).\n4. **Use the `preview` field** on the recommended option to show the proposed artifact: the work item draft, the before/after diff, the receipt, etc. AskUserQuestion renders previews as monospace markdown blocks beside the option list, so the human can read what will happen if they approve without leaving the question.\n5. **Record** the user's choice in the triage table under a new `decision` key. Move to the next log immediately.\n\nIf the user picks an option the subagent did NOT draft for (e.g. the user picks B when the subagent recommended D), record the choice anyway. Phase 4 will draft inline using the investigation context from `full_report`.\n\n### Question shape\n\nEvery Phase 3 question follows the same structure (re-grounding the user each time, since they may have lost focus mid-walk-through):\n\n> **Question:** \"Project: ninthwave. Branch: `<current>`. Phase: friction-triage decide, log M of N (`<filename>`). The friction: `<one-sentence paraphrase>`. The investigation found: `<one-line on where the fix lands>` | `<one-line on whether it's already addressed>` | `<one-line on duplicates or existing work items, if any>`. Smallest concrete fix: `<smallest fix>`. I would pick `<X>` because `<reason that references the investigation, not just the log text>`. What should we do with this log?\"\n\n### Options\n\nAlways offer A, B, C, D, F. Only offer E when the subagent flagged a real duplicate candidate.\n\n- **A) Fix now (small code change)** -- apply the pre-drafted edit directly in the codebase. The diff will appear in the `preview` if this is the recommended option.\n- **B) Create work item** -- write the pre-drafted work item to `.ninthwave/work/`. The full file will appear in the `preview` if this is the recommended option.\n- **C) Update a doc / skill / prompt** -- apply the pre-drafted doc edit to `agents/implementer.md`, `CLAUDE.md`, an existing skill, etc. The diff will appear in the `preview` if this is the recommended option.\n- **D) Drop** -- delete the log with no further action. The receipt (commit SHA or existing work item ID) will appear in the `preview` if this is the recommended option.\n- **E) Merge into another log** -- append this log's distinct context to the duplicate the subagent named, then delete this log.\n- **F) Skip for now** -- leave the log in place and move on. Use sparingly: the point of this session is to drive the inbox to zero.\n\nThe whole point of Phase 3 is speed: read assessment, click option, next. If the human wants to steer a draft, they pick \"Other\" with notes and Phase 4 honors them.\n\n---\n\n## Phase 4: EXECUTE (batch)\n\n**Goal:** Apply every recorded decision. The human's input window is closed; do not call AskUserQuestion in this phase.\n\nWalk the triage table in FIFO order. For each entry, look at the recorded `decision` and apply it.\n\n### Decision handlers\n\n**A) Fix now / C) Update doc:**\n1. Use the pre-drafted edit from `draft`. Open the file, locate the BEFORE block, apply the AFTER block via the Edit tool.\n2. If the user overrode the subagent's recommendation and there is no pre-drafted edit for this option, draft one inline from `full_report` and apply it.\n3. Print a 3-5 line summary of what changed and which file.\n\n**B) Create work item:**\n1. Generate a lineage token:\n   ```bash\n   nw lineage-token\n   ```\n2. Substitute it for the `<LINEAGE>` placeholder in the drafted file body.\n3. Write the file to `.ninthwave/work/{priority_num}-{domain_slug}--{ID}.md`.\n4. Print the new ID and path.\n5. If the user picked B without a pre-drafted work item (because the subagent recommended something else), draft one inline from `full_report` using the same fields as the standard subagent template, then write.\n\n**D) Drop:**\n1. Print the one-line receipt from `draft` so the user has the trail (commit SHA or existing work item ID).\n2. No file changes.\n\n**E) Merge into <other log>:**\n1. Read the target log named in `draft`.\n2. Append a `---` divider and the distinct context from the current log (do not duplicate fields that already match).\n3. Use Edit to write the appended content.\n\n**F) Skip:**\n1. Leave the log in place. Do nothing.\n\n### After each handler\n\nFor decisions A, B, C, D, E, delete the friction log:\n\n```bash\nrm <log_path>\n```\n\nFor F, do not delete.\n\nPrint one line per log as it is handled: \"Log M of N done: `<decision>` -- `<one-line outcome>`. `<remaining>` to go.\"\n\n---\n\n## Phase 5: WRAP\n\nWhen the loop finishes, summarize the session:\n\n1. Counts: \"Triaged N logs. Fixed: X. New work items: Y. Doc updates: Z. Dropped: W. Merged: V. Skipped: S.\"\n2. List any new work items by ID.\n3. List any files edited.\n4. Run `git status` and show the user the staged/unstaged changes.\n5. **Do NOT commit.** Tell the user the suggested commit command and let them decide:\n   ```\n   Suggested next step:\n     git add -A && git commit -m \"chore: triage friction logs\"\n   I will not run this for you. Commits are your call.\n   ```\n\n---\n\n## Why this skill exists (background for the worker reading this)\n\nFriction logs are the dogfooding signal that drives ninthwave's roadmap (see `VISION.md`: \"the friction log is the roadmap\"). They accumulate fast because workers and humans both write them. Clearing them is high leverage but easy to put off when the flow is async, so the design here is deliberately **synchronous AND fast**: investigation runs in parallel up front so the slow part is over before the human starts answering, decisions are quick (one question per log, with the proposed artifact already drafted in the preview), and execution is batched at the end. The interactive window the human sits through should be a couple of minutes for a typical inbox.\n\nThe skill's job is to keep that loop tight: parallel investigation, no nested confirmations, no waiting for subagents during the Decide phase, no commits without permission.","tags":["friction","triage","ninthwave","ninthwave-io","agent-skills","ai-agents","ai-coding","claude-code","continuous-delivery","copilot-cli","multi-agent","opencode"],"capabilities":["skill","source-ninthwave-io","skill-friction-triage","topic-agent-skills","topic-ai-agents","topic-ai-coding","topic-claude-code","topic-continuous-delivery","topic-copilot-cli","topic-multi-agent","topic-opencode","topic-orchestrator","topic-pull-requests","topic-worktrees"],"categories":["ninthwave"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/ninthwave-io/ninthwave/friction-triage","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add ninthwave-io/ninthwave","source_repo":"https://github.com/ninthwave-io/ninthwave","install_from":"skills.sh"}},"qualityScore":"0.454","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 8 github stars · SKILL.md body (14,960 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:09:06.457Z","embedding":null,"createdAt":"2026-05-18T13:14:46.142Z","updatedAt":"2026-05-18T19:09:06.457Z","lastSeenAt":"2026-05-18T19:09:06.457Z","tsv":"'-5':2025 '/decompose':377 '/dev/null':490 '1':183,467,480,886,1453,1968,2038,2116,2145,2182,2237 '10':753,759 '2':215,288,489,514,612,921,1470,1992,2048,2138,2153,2257 '20':213 '3':235,305,532,701,965,1411,1425,1486,1619,1893,2021,2024,2059,2172,2265 '380':1044 '4':248,297,549,993,1414,1506,1604,1916,1920,2071,2270 '5':1025,1556,2078,2228,2281 '500':1289 '6':1073 '7':1132,1335 'abc123':1375 'accumul':2350 'across':268,1418 'action':1122,1820 'actual':112,645 'add':1046,2300 'address':923,1372,1668 'agent':727,796 'agents/implementer.md':1041,1793 'alreadi':922,949,978,1117,1371,1667,2170,2411 'alway':270,1705 'analysi':668 'announc':550 'anoth':1127,1844 'answer':413,2399 'anyth':635,1423,1440 'anyway':1602 'appear':1742,1769,1802,1831 'append':1275,1846,2154,2178 'appli':593,856,1143,1166,1729,1785,1924,1958,1984,2019 'approv':860,1147,1551 'archiv':502 'argu':430 'around':1042 'artifact':852,1135,1157,1293,1332,1519,2410 'ascii':438 'ask':26,135,164,584,634 'askuserquest':155,1472,1504,1530,1938 'assess':21,1314,1349,1456,1897 'assist':723 'assum':203 'async':92,2373 'auto':407 'auto-merg':406 'avail':173 'b':1593,1708,1752,2034,2083,2196 'back':880 'background':2324 'bash':485,2043,2204 'batch':93,277,598,755,1922,2419 'beat':1052 'before/after':1180,1525 'behavior':913 'besid':1537 'best':383 'best-effort':382 'better':640 'block':1200,1316,1350,1457,1536,1983,1987 'bodi':873,1222,2058 'bracket':803 'branch':192,1645 'build':1298 'c':1709,1779,1965,2197 'call':729,1471,1937,2319 'candid':1722 'canon':56 'cap':1285 'carri':1416 'certain':389 'chang':1032,1090,1728,2030,2141,2280 'charact':448 'check':924 'choic':1561,1601 'chore':2305 'claud':156,778 'claude.md':1794 'clean':526 'clear':427,2359 'cli':167,169 'click':1898 'close':1934 'code':157,779,834,1089,1199,1727 'code/docs':942 'codebas':646,794,1738 'codebase-explor':793 'codex':163 'collect':295,1433 'come':562 'command':912,2291 'commit':328,339,931,961,1248,1374,1823,2131,2284,2290,2303,2316,2464 'concret':851,1027,1138,1277,1331,1681 'confirm':314,1484,2454 'contain':725 'content':867,2179 'context':672,1190,1273,1464,1611,1851,2160 'convent':1505 'copilot':166 'count':2238 'coupl':608,2433 'cover':979 'creat':34,370,1104,1205,1324,1398,1753,2035 'critic':121 'current':191,937,2163 'd':437,1598,1710,1812,2114,2198 'dash':442,460 'date':929,1361 'decid':81,403,824,1426,1650,2295,2461 'decis':44,293,595,637,1435,1569,1927,1956,1960,2194,2400 'default':546 'deleg':684 'delet':46,88,510,1814,1859,2200,2210 'deliber':2379 'describ':1029 'design':2376 'detect':380 'diff':1526,1740,1800 'direct':1735 'directori':503 'distinct':1272,1850,2159 'divid':2156 'doc':38,915,1095,1101,1173,1323,1397,1782,1790,1967,2248 'dogfood':2334 'domain':1218,2067 'done':2224 'draft':849,1133,1329,1523,1587,1606,1733,1760,1789,1908,1973,1976,2007,2012,2056,2088,2097,2124,2152,2412 'dramat':639 'drive':1883,2337 'drop':39,409,1116,1240,1326,1400,1422,1813,2115,2251 'duplic':25,379,393,994,1125,1385,1673,1721,1854,2167 'e':1714,1841,2142,2199 'e.g':1589 'easi':2365 'edit':332,1040,1099,1181,1185,1734,1791,1974,1990,2008,2174,2269 'effort':259,384 'ellipsi':447 'els':2096 'em':441,459 'end':342,511,601,2422 'enforc':455 'english':223 'enough':1188 'entir':742,871 'entri':1311,1951 'environ':176 'equival':792 'etc':1529,1798 'everi':7,177,471,623,1434,1617,1925 'exact':421,883,1076,1175,1225 'exclud':491 'execut':42,86,289,1439,1921,2417 'exist':425,966,1251,1378,1675,1796,1826,2134,2323 'exit':531 'explain':216 'explicit':958 'explor':707,713,783,795 'f':254,1711,1862,2180,2207 'fallback':97,1347 'fast':1436,2351,2382 'fenc':1198 'field':876,1510,2106,2168 'fifo':544,1446,1947 'file':232,336,360,465,872,894,911,1001,1154,1176,1211,1367,1369,1767,1979,2033,2057,2062,2140,2268 'filenam':537,541,983,1011,1212,1263,1388 'fill':800,1237 'find':470,916 'finish':770,2233 'first':548,575,1497 'fix':32,889,951,1028,1059,1086,1097,1107,1118,1169,1320,1391,1394,1682,1724,1963,2242 'flag':1718 'flat':496 'flow':424,506,2371 'focus':1637 'follow':180,321,350,1223,1476,1621 'follow-up':320,1475 'form':1215 'format':1351 'found':563,1659 'friction':2,8,60,220,414,472,483,493,523,565,624,653,732,814,838,861,865,907,947,981,995,1037,1257,1362,1648,1656,2202,2307,2330,2344 'friction-triag':1,1647 'front':286,617,2388 'front-load':616 'frontmatt':875 'full':1208,1338,1343,1613,1766,2016,2101 'gate':704 'gemini':168 'generat':361,2039 'get':113,626 'git':647,835,925,2272,2299,2302 'gitkeep':492 'give':844,1080 'go':2226 'goal':469,615,1432,1923 'ground':186,628,642,846,1463,1627 'group':266,757,764,768 'guess':678 'handl':509,2219 'handler':1961,2192 'happen':904,1548 'hard':263 'hedg':1284 'high':125,1360,2362 'histori':648 'hold':750 'honor':1917 'human':28,70,104,299,338,402,558,632,695,822,859,1146,1460,1543,1903,1929,2355,2397,2427 'human-in-the-loop':69 'hurt':226 'id':985,1220,1381,1829,2069,2075,2137,2264 'identifi':892 'immedi':1576 'improv':1053 'inbox':111,484,524,654,749,1885,2439 'includ':874,1155,1291 'index':1306 'indic':260 'inlin':1158,1607,2014,2099 'inner':1483 'input':162,1931 'instead':1072 'interact':4,119,126,131,301,603,697,1428,2424 'investig':281,569,613,629,812,877,1610,1658,1691,2383,2451 'involv':258 'issu':720 'item':36,348,359,373,660,842,968,976,1210,1253,1356,1380,1522,1677,1755,1762,1828,2037,2090,2136,2246,2262 'job':2443 'keep':2446 'kept':1336 'key':1570 'know':559 'label':1201 'land':891,1366 'later':1168 'launch':710,711,772,809 'leav':1226,1553,1866,2183 'let':400,2293 'letter':250 'leverag':2363 'life':513 'line':247,896,1016,1043,1244,1268,1368,1370,1662,1671,2026,2121,2213 'lineag':362,367,1228,2041,2046 'lineage-token':366,2045 'lint':461 'list':481,982,1010,1501,1540,2258,2266 'liter':1232 'live':495 'lo':48 'load':468,618 'locat':1980 'log':9,18,61,78,199,231,269,274,391,473,494,508,519,535,566,625,716,733,754,807,815,836,839,862,866,926,928,954,996,1005,1128,1262,1308,1313,1352,1387,1450,1575,1651,1695,1703,1816,1845,1848,1861,1868,2149,2164,2185,2203,2215,2220,2241,2308,2331,2345,2406 'logic':1056 'longer':418 'look':208,933,969,997,1952 'loop':73,108,1485,2232,2448 'lost':1636 'low':1092,1358 'ls':486 'm':200,1353,1652,2221,2304 'make':542 'mark':1487 'markdown':1535 'match':988,2171 'may':1634 'md':464,488,1221,2070 'medium':786,1359 'merg':40,408,1123,1258,1327,1401,1842,2143,2253 'messag':724 'mid':1639 'mid-walk-through':1638 'minut':214,610,2435 'monospac':1534 'move':1571,1872 'must':128,179,306,349 'n':202,564,726,1355,1654,2223,2240 'name':152,234,908,1129,1246,1857,2150 'need':833,1112 'nest':313,2453 'never':265,327 'new':335,357,1568,2074,2244,2260 'next':774,1574,1900,2297 'ninthwav':818,1644,2338 'ninthwave/friction':11,487,498,1003 'ninthwave/work':971,1764,2064 'ninthwave/work-item-format.md':351,1224 'no-em-dash':457 'non':1062,1110 'non-trivi':1061,1109 'none':990,992,1022,1024,1383,1389 'note':1269,1305,1913 'noth':527,2189 'num':1217,2066 'number':897 'nw':365,2044 'obvious':1091 'offer':1706,1713 'old':1192 'oldest':547 'one':12,117,246,271,588,712,730,767,813,1009,1015,1077,1083,1131,1243,1267,1310,1661,1670,2013,2098,2120,2212,2403 'one-lin':1014,1242,1266,1660,1669,2119 'one-sent':1082 'open':657,840,974,1977 'opencod':159 'option':239,249,251,257,398,1500,1514,1539,1582,1704,1751,1778,1811,1840,1899,2011 'order':885,1447,1452,1948 'overlap':1007,1020 'overrod':1996 'paragraph':1282 'parallel':284,574,614,692,719,761,2386,2450 'paraphras':218 'part':280,580,604,804,2392 'past':869 'path':863,864,1177,1309,1382,2077 'per':273,715,731,1312,1502,2214,2405 'permiss':2466 'phase':194,287,296,304,466,611,700,746,1410,1413,1420,1424,1603,1618,1646,1892,1915,1919,1941,2227,2462 'pick':242,436,1075,1580,1592,1685,1910,2082 'place':1870,2187 'placehold':2053 'plain':222 'platform':154,789 'point':100,743,1877,1890 'possibl':24,311,899,1384 'pr':96,1115 'pre':1732,1759,1788,1972,2006,2087 'pre-draft':1731,1758,1787,1971,2005,2086 'prepar':475 'preview':1509,1532,1745,1772,1805,1834,2415 'print':141,1454,2022,2072,2117,2211 'prioriti':1216,2065 'process':59 'produc':1136 'project':189,1643 'prompt':326,798,1103,1784 'propos':1518,2409 'prose':1281 'put':1495,2367 'question':120,132,138,143,158,178,267,272,1469,1555,1615,1620,1642,2404 'queue':661 'quick':589,1427,2402 'quot':445,451 're':185,1626 're-ground':184,1625 'read':19,76,352,830,935,1545,1896,2146,2328 'readi':1182 'real':1106,1720 'reason':1017,1085,1687 'rec':1319,1393 'receipt':1245,1528,1822,2122 'recommend':236,680,847,1074,1149,1491,1493,1513,1597,1750,1777,1810,1839,2000,2094 'record':1557,1599,1926,1955 'rectif':902 'refer':1689 'relat':934 'relev':419,941 'render':1531 'repo':64,454,819,920 'report':879,1161,1287,1339,1614,2017,2102 'request':160 'resolv':1035,1255 'respons':150,1344 'rest':650 'retain':1345 'return':1297 'review':95 'review-pr':94 'risk':1093 'rm':2205 'roadmap':2340,2348 'rule':264,462 'run':282,290,689,2271,2312,2384 'say':224,991,1023,1066 'scale':262 'screen':1466 'section':884,1334 'see':944,1317,2341 'sentenc':1084 'sequenti':738 'session':74,555,1880,2236 'sever':22,1357 'sha':962,1249,1824,2132 'shape':552,1071,1616 'share':1415 'show':1187,1516,2275 'signal':2335 'simpli':217 'sinc':927,952,1632 'singl':722 'sit':118,2428 'sketch':1069 'skill':51,123,330,1102,1164,1235,1783,1797,2322,2441 'skill-friction-triage' 'skim':675 'skip':41,1863,2181,2255 'slow':279,579,621,706,2391 'slug':1219,2068 'small':1088,1726 'smallest':1026,1031,1390,1680 'smart':444 'soft':683 'someth':2095 'sort':533 'source-ninthwave-io' 'spare':1875 'spawn':736 'specif':893,1039 'specul':1065 'speed':1895 'stage':331 'staged/unstaged':2279 'stale':1119 'standard':2109 'start':2398 'state':187,237,938,957,1409 'status':2273 'stay':105 'steer':1906 'step':1048,2298 'still':760 'straight':450 'string':1193,1233 'structur':182,1624 'subag':318,687,714,775,781,797,1296,1341,1392,1489,1584,1596,1717,1856,1998,2093,2110,2458 'substitut':2049 'suggest':2289,2296 'summar':2234 'summari':2027 'sure':325,1481 'surfac':394 'surround':1189 'synchron':68,2380 'synthes':1315,1348 'tabl':1301,1405,1444,1565,1945 'tag':1078 'take':606 'target':1261,2148 'tell':520,2285 'templat':799,2111 'text':145,1696 'thing':1139 'thorough':785 'tight':309,2449 'time':15,1631 'timestamp':538 'token':363,368,1229,2042,2047 'tool':133,151,728,910,1186,1991 'topic-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-claude-code' 'topic-continuous-delivery' 'topic-copilot-cli' 'topic-multi-agent' 'topic-opencode' 'topic-orchestrator' 'topic-pull-requests' 'topic-worktrees' 'trail':2130 'tri':664 'triag':3,505,529,636,1300,1404,1443,1564,1649,1944,2239,2306 'trivial':1063,1111 'two':390 'type':776,782 'typic':2438 'unclear':964,1377 'uniqu':1196 'up':1477 'updat':37,1094,1172,1322,1396,1780,1966,2249 'use':129,170,449,780,790,1197,1507,1608,1874,1969,2103,2173 'user':80,137,161,165,205,433,522,1559,1579,1591,1629,1995,2081,2127,2277,2287 'v':2254 'vagu':1279 'valid':412 'verbatim':868,1337 'via':1988 'vision.md':2342 'w':2252 'wait':147,316,765,2456 'walk':5,477,1430,1441,1640,1942 'walk-through':1429 'want':345,1904 'way':57,376 'whatev':831 'whether':945,1664 'whichev':171 'whole':99,1889 'window':211,302,698,1932,2425 'within':762 'without':1421,1552,2084,2465 'word':1290 'work':35,347,358,372,622,659,841,967,975,1209,1252,1304,1379,1521,1676,1754,1761,1827,2036,2089,2135,2245,2261 'work-item':658 'worker':1055,2327,2353 'workitem':1105,1206,1325,1399 'would':241,854,890,903,1034,1141,1365,1684 'wrap':2229 'write':334,355,1152,1756,2060,2113,2176,2357 'written':956 'x':1051,2243 'y':2247 'yes':959,1373 'z':2250 'zero':115,518,1887","prices":[{"id":"5d9a79d9-2dbe-4734-be82-b1ad77e1d88d","listingId":"14adf4e5-83fe-447c-97fa-6a7227458bf1","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"ninthwave-io","category":"ninthwave","install_from":"skills.sh"},"createdAt":"2026-05-18T13:14:46.142Z"}],"sources":[{"listingId":"14adf4e5-83fe-447c-97fa-6a7227458bf1","source":"github","sourceId":"ninthwave-io/ninthwave/friction-triage","sourceUrl":"https://github.com/ninthwave-io/ninthwave/tree/main/skills/friction-triage","isPrimary":false,"firstSeenAt":"2026-05-18T13:14:46.142Z","lastSeenAt":"2026-05-18T19:09:06.457Z"}],"details":{"listingId":"14adf4e5-83fe-447c-97fa-6a7227458bf1","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"ninthwave-io","slug":"friction-triage","github":{"repo":"ninthwave-io/ninthwave","stars":8,"topics":["agent-skills","ai-agents","ai-coding","claude-code","continuous-delivery","copilot-cli","multi-agent","opencode","orchestrator","pull-requests","worktrees"],"license":"apache-2.0","html_url":"https://github.com/ninthwave-io/ninthwave","pushed_at":"2026-05-17T16:00:56Z","description":"Orchestrate parallel AI coding into reviewable PRs.","skill_md_sha":"3b63c23ba591521718e1dc0aae0987cbde2cf519","skill_md_path":"skills/friction-triage/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/ninthwave-io/ninthwave/tree/main/skills/friction-triage"},"layout":"multi","source":"github","category":"ninthwave","frontmatter":{"name":"friction-triage","description":"Interactively walk through every friction log in `.ninthwave/friction/` one at\na time. For each log: read it, assess severity and possible duplicates, ask the\nhuman what to do (fix now / create work item / update doc / drop / merge / skip),\nexecute the decision, and delete the log. This is the canonical way to clear\nthe friction inbox: a synchronous, human-in-the-loop session.\nUse when asked to \"triage friction\", \"review friction logs\", \"clear the friction\ninbox\", or \"walk through friction\"."},"skills_sh_url":"https://skills.sh/ninthwave-io/ninthwave/friction-triage"},"updatedAt":"2026-05-18T19:09:06.457Z"}}