@caddis/cli 0.4.34 → 0.4.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/bundles/antigravity-plugin/agents/code-reviewer.md +4 -0
  2. package/bundles/antigravity-plugin/plugin.json +1 -1
  3. package/bundles/antigravity-plugin/scripts/caddis_file_lock.py +121 -0
  4. package/bundles/antigravity-plugin/scripts/caddis_frontmatter.py +12 -0
  5. package/bundles/antigravity-plugin/scripts/caddis_gate.py +185 -4
  6. package/bundles/antigravity-plugin/scripts/caddis_inventory.py +9 -9
  7. package/bundles/antigravity-plugin/scripts/caddis_relay_git.py +159 -0
  8. package/bundles/antigravity-plugin/scripts/caddis_tidy.py +579 -40
  9. package/bundles/antigravity-plugin/scripts/caddis_todo.py +462 -0
  10. package/bundles/antigravity-plugin/scripts/caddis_workstreams.py +631 -0
  11. package/bundles/antigravity-plugin/scripts/check_doc_coverage.py +27 -13
  12. package/bundles/antigravity-plugin/scripts/oss_review.py +30 -3
  13. package/bundles/antigravity-plugin/scripts/setup_project_ai.py +5 -0
  14. package/bundles/antigravity-plugin/scripts/usage_review.py +2 -2
  15. package/bundles/antigravity-plugin/session_end_agy.py +16 -1
  16. package/bundles/antigravity-plugin/skills/_registry.md +34 -32
  17. package/bundles/antigravity-plugin/skills/adopt-app/SKILL.md +1 -1
  18. package/bundles/antigravity-plugin/skills/advisory-hub/SKILL.md +1 -1
  19. package/bundles/antigravity-plugin/skills/api-design/SKILL.md +1 -1
  20. package/bundles/antigravity-plugin/skills/backend-development/SKILL.md +1 -1
  21. package/bundles/antigravity-plugin/skills/catchup/SKILL.md +31 -33
  22. package/bundles/antigravity-plugin/skills/ci-cd-pipeline/SKILL.md +1 -1
  23. package/bundles/antigravity-plugin/skills/code-documentation/SKILL.md +1 -1
  24. package/bundles/antigravity-plugin/skills/code-review/SKILL.md +1 -1
  25. package/bundles/antigravity-plugin/skills/codebase-audit/SKILL.md +1 -1
  26. package/bundles/antigravity-plugin/skills/confluence-hla/SKILL.md +1 -1
  27. package/bundles/antigravity-plugin/skills/cross-review/SKILL.md +9 -1
  28. package/bundles/antigravity-plugin/skills/css-architecture/SKILL.md +1 -1
  29. package/bundles/antigravity-plugin/skills/dashboard-perf-sweep/SKILL.md +1 -1
  30. package/bundles/antigravity-plugin/skills/database-design/SKILL.md +1 -1
  31. package/bundles/antigravity-plugin/skills/db-diagram/SKILL.md +1 -1
  32. package/bundles/antigravity-plugin/skills/decide/SKILL.md +61 -0
  33. package/bundles/antigravity-plugin/skills/digress/SKILL.md +41 -23
  34. package/bundles/antigravity-plugin/skills/error-handling/SKILL.md +1 -1
  35. package/bundles/antigravity-plugin/skills/explainer-doc/SKILL.md +1 -1
  36. package/bundles/antigravity-plugin/skills/feature-plan/SKILL.md +5 -0
  37. package/bundles/antigravity-plugin/skills/frontend-design/SKILL.md +1 -1
  38. package/bundles/antigravity-plugin/skills/gate-preflight/SKILL.md +12 -0
  39. package/bundles/antigravity-plugin/skills/handoff/SKILL.md +74 -13
  40. package/bundles/antigravity-plugin/skills/implement/SKILL.md +21 -0
  41. package/bundles/antigravity-plugin/skills/mermaid-diagrams/SKILL.md +1 -1
  42. package/bundles/antigravity-plugin/skills/mmr/SKILL.md +8 -0
  43. package/bundles/antigravity-plugin/skills/particle-art/SKILL.md +1 -1
  44. package/bundles/antigravity-plugin/skills/playwright/SKILL.md +1 -1
  45. package/bundles/antigravity-plugin/skills/port-to-github/SKILL.md +1 -1
  46. package/bundles/antigravity-plugin/skills/pr-merge/SKILL.md +15 -0
  47. package/bundles/antigravity-plugin/skills/python/SKILL.md +1 -1
  48. package/bundles/antigravity-plugin/skills/rca/SKILL.md +97 -0
  49. package/bundles/antigravity-plugin/skills/react-dev/SKILL.md +1 -1
  50. package/bundles/antigravity-plugin/skills/safe-cleanup/SKILL.md +1 -1
  51. package/bundles/antigravity-plugin/skills/ship/SKILL.md +19 -4
  52. package/bundles/antigravity-plugin/skills/ship-merge/SKILL.md +15 -0
  53. package/bundles/antigravity-plugin/skills/skill-creator/SKILL.md +1 -1
  54. package/bundles/antigravity-plugin/skills/sql/SKILL.md +1 -1
  55. package/bundles/antigravity-plugin/skills/tech-explainer/SKILL.md +7 -12
  56. package/bundles/antigravity-plugin/skills/technical-writing/SKILL.md +1 -1
  57. package/bundles/antigravity-plugin/skills/test-strategy/SKILL.md +1 -1
  58. package/bundles/antigravity-plugin/skills/ui-review/SKILL.md +1 -1
  59. package/bundles/antigravity-plugin/skills/using-git-worktrees/SKILL.md +1 -1
  60. package/bundles/antigravity-plugin/skills/warm-editorial-ui/SKILL.md +1 -1
  61. package/bundles/antigravity-plugin/skills/webapp-testing/SKILL.md +1 -1
  62. package/bundles/antigravity-plugin/skills/windows-deployment/SKILL.md +1 -1
  63. package/bundles/antigravity-plugin/warm_start_agy.py +138 -42
  64. package/bundles/antigravity-plugin-extras/plugin.json +1 -1
  65. package/bundles/antigravity-plugin-extras/skills/_registry.md +61 -61
  66. package/bundles/antigravity-plugin-extras/skills/agent-md-refactor/SKILL.md +1 -1
  67. package/bundles/antigravity-plugin-extras/skills/agent-orchestration/SKILL.md +1 -1
  68. package/bundles/antigravity-plugin-extras/skills/algorithmic-art/SKILL.md +1 -1
  69. package/bundles/antigravity-plugin-extras/skills/api-client-patterns/SKILL.md +1 -1
  70. package/bundles/antigravity-plugin-extras/skills/architecture-diagram/SKILL.md +1 -1
  71. package/bundles/antigravity-plugin-extras/skills/architecture-document/SKILL.md +1 -1
  72. package/bundles/antigravity-plugin-extras/skills/artifacts-builder/SKILL.md +1 -1
  73. package/bundles/antigravity-plugin-extras/skills/ascii-art/SKILL.md +1 -1
  74. package/bundles/antigravity-plugin-extras/skills/aws-agentic-ai/SKILL.md +1 -1
  75. package/bundles/antigravity-plugin-extras/skills/aws-cdk-development/SKILL.md +1 -1
  76. package/bundles/antigravity-plugin-extras/skills/aws-cost-operations/SKILL.md +1 -1
  77. package/bundles/antigravity-plugin-extras/skills/aws-serverless-eda/SKILL.md +1 -1
  78. package/bundles/antigravity-plugin-extras/skills/backend-to-frontend-handoff/SKILL.md +1 -1
  79. package/bundles/antigravity-plugin-extras/skills/banner-design/SKILL.md +1 -1
  80. package/bundles/antigravity-plugin-extras/skills/brand-design/SKILL.md +1 -1
  81. package/bundles/antigravity-plugin-extras/skills/brand-guidelines/SKILL.md +1 -1
  82. package/bundles/antigravity-plugin-extras/skills/brand-voice/SKILL.md +1 -1
  83. package/bundles/antigravity-plugin-extras/skills/building-ai-agent-on-cloudflare/SKILL.md +3 -7
  84. package/bundles/antigravity-plugin-extras/skills/building-mcp-server-on-cloudflare/SKILL.md +3 -7
  85. package/bundles/antigravity-plugin-extras/skills/canvas-design/SKILL.md +1 -1
  86. package/bundles/antigravity-plugin-extras/skills/changelog-generator/SKILL.md +1 -1
  87. package/bundles/antigravity-plugin-extras/skills/code-explainer/SKILL.md +1 -1
  88. package/bundles/antigravity-plugin-extras/skills/component-testing/SKILL.md +1 -1
  89. package/bundles/antigravity-plugin-extras/skills/cross-review/SKILL.md +10 -2
  90. package/bundles/antigravity-plugin-extras/skills/data-contract-pipeline/SKILL.md +1 -1
  91. package/bundles/antigravity-plugin-extras/skills/data-loader/SKILL.md +1 -1
  92. package/bundles/antigravity-plugin-extras/skills/data-validation/SKILL.md +1 -1
  93. package/bundles/antigravity-plugin-extras/skills/deploy-local/SKILL.md +1 -1
  94. package/bundles/antigravity-plugin-extras/skills/design-md/SKILL.md +1 -1
  95. package/bundles/antigravity-plugin-extras/skills/design-system-tokens/SKILL.md +1 -1
  96. package/bundles/antigravity-plugin-extras/skills/developer-growth-analysis/SKILL.md +1 -1
  97. package/bundles/antigravity-plugin-extras/skills/doc-coauthoring/SKILL.md +1 -1
  98. package/bundles/antigravity-plugin-extras/skills/documentation-analyzer/SKILL.md +1 -1
  99. package/bundles/antigravity-plugin-extras/skills/enterprise-dashboard-aesthetic-system/SKILL.md +1 -1
  100. package/bundles/antigravity-plugin-extras/skills/file-organizer/SKILL.md +1 -1
  101. package/bundles/antigravity-plugin-extras/skills/game-changing-features/SKILL.md +1 -1
  102. package/bundles/antigravity-plugin-extras/skills/golden-nuggets/SKILL.md +1 -1
  103. package/bundles/antigravity-plugin-extras/skills/golden-plan/SKILL.md +1 -1
  104. package/bundles/antigravity-plugin-extras/skills/hld/SKILL.md +1 -1
  105. package/bundles/antigravity-plugin-extras/skills/internal-comms/SKILL.md +1 -1
  106. package/bundles/antigravity-plugin-extras/skills/jira-issues/SKILL.md +1 -1
  107. package/bundles/antigravity-plugin-extras/skills/lld/SKILL.md +1 -1
  108. package/bundles/antigravity-plugin-extras/skills/llm-application-dev/SKILL.md +1 -1
  109. package/bundles/antigravity-plugin-extras/skills/mcp-builder/SKILL.md +1 -1
  110. package/bundles/antigravity-plugin-extras/skills/monorepo/SKILL.md +1 -1
  111. package/bundles/antigravity-plugin-extras/skills/nextjs-app-router/SKILL.md +1 -1
  112. package/bundles/antigravity-plugin-extras/skills/observability/SKILL.md +1 -1
  113. package/bundles/antigravity-plugin-extras/skills/performance-testing/SKILL.md +1 -1
  114. package/bundles/antigravity-plugin-extras/skills/popular-web-designs/SKILL.md +1 -1
  115. package/bundles/antigravity-plugin-extras/skills/prd-to-code/SKILL.md +1 -1
  116. package/bundles/antigravity-plugin-extras/skills/react-useeffect/SKILL.md +1 -1
  117. package/bundles/antigravity-plugin-extras/skills/receiving-code-review/SKILL.md +1 -1
  118. package/bundles/antigravity-plugin-extras/skills/responsive-mobile-native/SKILL.md +4 -9
  119. package/bundles/antigravity-plugin-extras/skills/safe-cleanup/SKILL.md +1 -1
  120. package/bundles/antigravity-plugin-extras/skills/schema-migration/SKILL.md +1 -1
  121. package/bundles/antigravity-plugin-extras/skills/setup-project-ai/SKILL.md +1 -1
  122. package/bundles/antigravity-plugin-extras/skills/shadcn-radix/SKILL.md +1 -1
  123. package/bundles/antigravity-plugin-extras/skills/sketch/SKILL.md +1 -1
  124. package/bundles/antigravity-plugin-extras/skills/streamlit-dev/SKILL.md +1 -1
  125. package/bundles/antigravity-plugin-extras/skills/theme-factory/SKILL.md +1 -1
  126. package/bundles/antigravity-plugin-extras/skills/ui-styling-patterns/SKILL.md +1 -1
  127. package/bundles/antigravity-plugin-extras/skills/ui-ux-intelligence/SKILL.md +1 -1
  128. package/bundles/antigravity-plugin-extras/skills/understand-anything/SKILL.md +5 -9
  129. package/bundles/antigravity-plugin-extras/skills/update-readme/SKILL.md +1 -1
  130. package/bundles/antigravity-plugin-extras/skills/word-cloud/SKILL.md +1 -1
  131. package/bundles/codex/.codex/skills/coding/api-design/SKILL.md +1 -1
  132. package/bundles/codex/.codex/skills/coding/backend-development/SKILL.md +1 -1
  133. package/bundles/codex/.codex/skills/coding/code-review/SKILL.md +1 -1
  134. package/bundles/codex/.codex/skills/coding/codebase-audit/SKILL.md +1 -1
  135. package/bundles/codex/.codex/skills/coding/dashboard-perf-sweep/SKILL.md +1 -1
  136. package/bundles/codex/.codex/skills/coding/error-handling/SKILL.md +1 -1
  137. package/bundles/codex/.codex/skills/coding/python/SKILL.md +1 -1
  138. package/bundles/codex/.codex/skills/coding/sql/SKILL.md +1 -1
  139. package/bundles/codex/.codex/skills/data/database-design/SKILL.md +1 -1
  140. package/bundles/codex/.codex/skills/data/db-diagram/SKILL.md +1 -1
  141. package/bundles/codex/.codex/skills/devops/adopt-app/SKILL.md +1 -1
  142. package/bundles/codex/.codex/skills/devops/ci-cd-pipeline/SKILL.md +1 -1
  143. package/bundles/codex/.codex/skills/devops/port-to-github/SKILL.md +1 -1
  144. package/bundles/codex/.codex/skills/devops/safe-cleanup/SKILL.md +1 -1
  145. package/bundles/codex/.codex/skills/devops/using-git-worktrees/SKILL.md +1 -1
  146. package/bundles/codex/.codex/skills/devops/windows-deployment/SKILL.md +1 -1
  147. package/bundles/codex/.codex/skills/docs/code-documentation/SKILL.md +1 -1
  148. package/bundles/codex/.codex/skills/docs/confluence-hla/SKILL.md +1 -1
  149. package/bundles/codex/.codex/skills/docs/explainer-doc/SKILL.md +1 -1
  150. package/bundles/codex/.codex/skills/docs/tech-explainer/SKILL.md +7 -12
  151. package/bundles/codex/.codex/skills/docs/technical-writing/SKILL.md +1 -1
  152. package/bundles/codex/.codex/skills/frontend/css-architecture/SKILL.md +1 -1
  153. package/bundles/codex/.codex/skills/frontend/frontend-design/SKILL.md +1 -1
  154. package/bundles/codex/.codex/skills/frontend/react-dev/SKILL.md +1 -1
  155. package/bundles/codex/.codex/skills/frontend/ui-review/SKILL.md +1 -1
  156. package/bundles/codex/.codex/skills/frontend/warm-editorial-ui/SKILL.md +1 -1
  157. package/bundles/codex/.codex/skills/media/mermaid-diagrams/SKILL.md +1 -1
  158. package/bundles/codex/.codex/skills/media/particle-art/SKILL.md +1 -1
  159. package/bundles/codex/.codex/skills/testing/playwright/SKILL.md +1 -1
  160. package/bundles/codex/.codex/skills/testing/test-strategy/SKILL.md +1 -1
  161. package/bundles/codex/.codex/skills/testing/webapp-testing/SKILL.md +1 -1
  162. package/bundles/codex/.codex/skills/workflow/advisory-hub/SKILL.md +1 -1
  163. package/bundles/codex/.codex/skills/workflow/skill-creator/SKILL.md +1 -1
  164. package/bundles/codex/AGENTS.md +5 -1
  165. package/bundles/manifest.json +3 -3
  166. package/package.json +1 -1
@@ -42,6 +42,13 @@ import subprocess
42
42
  import sys
43
43
  from pathlib import Path
44
44
 
45
+ # Shared header reader. setup_project_ai copies this checker into a project's scripts/ without
46
+ # it, so fall back to this file's own top-level field reader rather than crashing there.
47
+ try:
48
+ from caddis_frontmatter import parse as _parse_header
49
+ except ImportError: # pragma: no cover - exercised by the copied-alone setup test
50
+ _parse_header = None
51
+
45
52
  # Shared per-repo config reader + artifact-dir resolution (fail-open). Fall back to shims if it's
46
53
  # ever absent, so the gate degrades to baked-in defaults rather than crashing.
47
54
  try:
@@ -210,6 +217,17 @@ def frontmatter_block(text: str) -> str | None:
210
217
  return match.group(1) if match else None
211
218
 
212
219
 
220
+ def _header_fields(text: str) -> dict:
221
+ """Top-level header fields: the shared reader when present, else ``type``/``status``/``stale_after``."""
222
+ if _parse_header is not None:
223
+ return _parse_header(text)
224
+ block = frontmatter_block(text)
225
+ if block is None:
226
+ return {}
227
+ fields = ((key, _top_level_field(block, key)) for key in ("type", "status", "stale_after"))
228
+ return {key: _scalar(field[0]) for key, field in fields if field is not None}
229
+
230
+
213
231
  def _scalar(raw: str) -> str:
214
232
  """A frontmatter scalar with its trailing ``# comment`` and surrounding quotes removed."""
215
233
  return re.sub(r"\s+#.*$", "", raw).strip().strip("'\"").strip()
@@ -304,13 +322,10 @@ def misfiled_hub_spawns(root: Path) -> list[str]:
304
322
  if rel.startswith(HUB_REPORTS_DIR):
305
323
  continue
306
324
  try:
307
- block = frontmatter_block(f.read_text(encoding="utf-8", errors="ignore"))
325
+ meta = _header_fields(f.read_text(encoding="utf-8", errors="ignore"))
308
326
  except OSError:
309
327
  continue
310
- if block is None:
311
- continue
312
- field = _top_level_field(block, "type")
313
- if field and _scalar(field[0]).strip().lower() == "hub-spawn":
328
+ if str(meta.get("type", "")).strip().lower() == "hub-spawn":
314
329
  out.append(rel)
315
330
  return out
316
331
 
@@ -325,11 +340,11 @@ def trust_signal_warnings(text: str) -> list[str]:
325
340
  block = frontmatter_block(text)
326
341
  if block is None:
327
342
  return []
343
+ meta = _header_fields(text)
328
344
  warns: list[str] = []
329
345
 
330
- status = _top_level_field(block, "status")
331
- if status is not None:
332
- value = _scalar(status[0])
346
+ if "status" in meta:
347
+ value = _scalar(str(meta["status"]))
333
348
  # Only a single bare token is vetted. caddis has long-standing docs whose status is a
334
349
  # sentence ("DRAFT — approved shape (Option 2), awaiting go"); vetting those would nag
335
350
  # about prose that predates the field's vocabulary. A one-word typo still surfaces.
@@ -339,9 +354,8 @@ def trust_signal_warnings(text: str) -> list[str]:
339
354
  f"({', '.join(sorted(TRUST_STATUS_VALUES))})"
340
355
  )
341
356
 
342
- stale = _top_level_field(block, "stale_after")
343
- if stale is not None:
344
- value = _scalar(stale[0])
357
+ if "stale_after" in meta:
358
+ value = _scalar(str(meta["stale_after"]))
345
359
  if not value:
346
360
  warns.append("`stale_after:` is empty — give an ISO date (YYYY-MM-DD) or drop the field")
347
361
  elif not (_ISO_DATE_RE.match(value) or _ISO_DATETIME_RE.match(value)):
@@ -520,8 +534,8 @@ _DOCMAP_SCAFFOLD = """\
520
534
  > one line each: what it is and when to read it. A router, not a summary; detail lives in the linked
521
535
  > docs. KB notes live beside this file in `{artifact_dir}/kb/`.
522
536
  >
523
- > **Discipline:** kept honest by [`check_doc_coverage.py`](../../scripts/check_doc_coverage.py) —
524
- > every link here must resolve (a link to a missing file is a **hard failure**), and a KB note
537
+ > **Discipline:** kept honest by `check_doc_coverage.py` —
538
+ > every linked table row must resolve (a link to a missing file is a **hard failure**), and a KB note
525
539
  > (`{artifact_dir}/kb/*.md`) not indexed here **warns**. Only `{artifact_dir}/kb/*.md` is governed.
526
540
 
527
541
  ## Read first
@@ -347,6 +347,22 @@ def split_diff_by_file(diff_text: str) -> list[str]:
347
347
  return parts
348
348
 
349
349
 
350
+ def changed_paths(diff_text: str) -> list[str]:
351
+ """The post-change path of every file in the diff, in diff order."""
352
+ paths: list[str] = []
353
+ for chunk in split_diff_by_file(diff_text):
354
+ header = chunk.split("\n", 1)[0].rstrip("\r")
355
+ if not header.startswith("diff --git "):
356
+ continue
357
+ rest = header[len("diff --git "):]
358
+ quoted = rest.rfind(' "b/')
359
+ if rest.endswith('"') and quoted != -1:
360
+ paths.append(rest[quoted + 4:-1])
361
+ elif " b/" in rest:
362
+ paths.append(rest.rsplit(" b/", 1)[1])
363
+ return paths
364
+
365
+
350
366
  def batch_diff(diff_text: str, max_chars: int) -> list[str]:
351
367
  """Pack whole files into as few batches as possible, each under `max_chars`.
352
368
 
@@ -398,14 +414,24 @@ def current_branch(cwd: str) -> str:
398
414
  return "the current branch"
399
415
 
400
416
 
401
- def build_review_prompt(diff_text: str, branch: str, rng: str | None) -> str:
417
+ def build_review_prompt(diff_text: str, branch: str, rng: str | None,
418
+ all_paths: list[str] | None = None) -> str:
402
419
  """Adversarial review prompt — ported from docket runner._review_prompt (kept in sync).
403
420
 
404
421
  Self-contained: the criteria are inline so a real review always happens, and it ends with
405
422
  a single machine-parseable verdict line the caller maps to an exit code.
406
423
  """
407
424
  scope = rng or "the working tree (staged, unstaged and new untracked files)"
408
- return (
425
+ part_note = ""
426
+ if all_paths and len(all_paths) > len(changed_paths(diff_text)):
427
+ # Without the whole list, a batch reports files it cannot see as missing.
428
+ part_note = (
429
+ "This diff is one part of a larger change. The whole change touches these files:\n"
430
+ + "".join(f"- {p}\n" for p in all_paths)
431
+ + "Review only the files in the diff below. The other files are reviewed in other "
432
+ "batches; do not report them as missing.\n\n"
433
+ )
434
+ return part_note + (
409
435
  f"Perform an adversarial code review of the changes on branch '{branch}' ({scope}). "
410
436
  "The unified diff is provided below. Judge, in priority order: (1) correctness — logic "
411
437
  "bugs, wrong results, missed edge cases; (2) tests — would a test fail without this "
@@ -731,7 +757,7 @@ def main(argv: list[str] | None = None, env: dict[str, str] | None = None) -> in
731
757
  cannot silently shrink a diff to nothing. Returns None when a chunk that cannot be split
732
758
  any further still fails — the abort path stays reachable.
733
759
  """
734
- review = _try_chain(build_review_prompt(chunk, branch, args.range), label)
760
+ review = _try_chain(build_review_prompt(chunk, branch, args.range, whole_change), label)
735
761
  if review is not None:
736
762
  return [review]
737
763
  files = split_diff_by_file(chunk)
@@ -749,6 +775,7 @@ def main(argv: list[str] | None = None, env: dict[str, str] | None = None) -> in
749
775
  out += got
750
776
  return out
751
777
 
778
+ whole_change = changed_paths(diff_text)
752
779
  verdicts: list[bool | None] = []
753
780
  for batch_no, batch in enumerate(batches, 1):
754
781
  label = f" (batch {batch_no}/{len(batches)})" if len(batches) > 1 else ""
@@ -907,6 +907,8 @@ ARTIFACT_GITIGNORE = """\
907
907
  reviews/*.html
908
908
  usage-log.jsonl
909
909
  agent-log.jsonl
910
+ usage-log.jsonl.1
911
+ agent-log.jsonl.1
910
912
  .last-usage-review
911
913
  relay.md
912
914
  relay/
@@ -914,6 +916,9 @@ session-state.md
914
916
  session-state/
915
917
  context-window.json
916
918
  PROJECT-FACTS.md
919
+ # lock files beside locked documents, and migration backups (never commit these)
920
+ *.lock
921
+ *.bak
917
922
  # retired writer; ignored so old files stay untracked
918
923
  memory.jsonl
919
924
  """
@@ -2,7 +2,7 @@
2
2
  """caddis /usage-review: local usage analysis + harness self-tuning recommendations.
3
3
 
4
4
  Reads:
5
- <artifact-dir>/usage-log.jsonl per-session digest (Stop hook). Tries `.caddis/`, then the older
5
+ <artifact-dir>/usage-log.jsonl per-session digest (/handoff). Tries `.caddis/`, then the older
6
6
  `.claude/usage-log.jsonl`.
7
7
  ~/.claude/projects/<slug>/ session transcripts (agent dispatches, context size)
8
8
  claude-harness/agents/*.md agent model tiers (frontmatter)
@@ -660,7 +660,7 @@ def render_markdown(metrics: dict, findings: list[dict], days: int,
660
660
  f"| Output tokens | {_fmt(metrics['output'])} |",
661
661
  f"| Input + cache read | {_fmt(metrics['input'] + metrics['cache_read'])} |",
662
662
  f"| Cache efficiency | {_pct(metrics['cache_read'], metrics['input'] + metrics['cache_read'])} read from cache |",
663
- f"| Est. cost equiv. | ${metrics['est_cost_usd']:.2f} (estimate; edit rates in session_end.py) |",
663
+ f"| Est. cost equiv. | ${metrics['est_cost_usd']:.2f} (estimate; edit rates in session_state.py) |",
664
664
  "",
665
665
  "## Findings",
666
666
  "",
@@ -6,7 +6,12 @@ the workspace's usage log (`<workspace>/.caddis/usage-log.jsonl`). Self-containe
6
6
  ship claudster_config.py), stdlib-only, and fully defensive:
7
7
  a Stop hook must never fail the turn, and must not print a non-JSON line to stdout (agy parses Stop-hook
8
8
  stdout as a `{"decision":…}` object — a stray string trips its "unsupported hook decision" path). So this
9
- does a pure side effect and prints NOTHING.
9
+ does a pure side effect and prints NOTHING: empty stdout is agy's "no decision", while
10
+ `{"decision": "continue"}` would stop the session from ending.
11
+
12
+ Headless runs (CADDIS_HEADLESS, DOCKET_PLAN or DOCKET_BRANCH set and non-empty) are skipped, as in
13
+ the Claude Stop hook, so review and lane runs leave no files. The record is one append with no
14
+ transcript read, so it stays here rather than moving to /handoff (Phase 13).
10
15
 
11
16
  agy Stop stdin (camelCase protojson):
12
17
  {"executionNum":N, "terminationReason":"model_stop|max_steps_exceeded|error", "error":"",
@@ -60,11 +65,21 @@ def _workspace_roots(data):
60
65
  return []
61
66
  return [str(r) for r in roots if isinstance(r, (str, bytes)) and str(r).strip()]
62
67
 
68
+ _HEADLESS_MARKERS = ("CADDIS_HEADLESS", "DOCKET_PLAN", "DOCKET_BRANCH")
69
+
70
+
71
+ def _headless() -> bool:
72
+ """True when any marker is set to a non-empty value. `CADDIS_HEADLESS=` is not headless."""
73
+ return any(str(os.environ.get(name, "")).strip() for name in _HEADLESS_MARKERS)
74
+
75
+
63
76
  def main() -> None:
64
77
  try:
65
78
  data = json.load(sys.stdin)
66
79
  except Exception:
67
80
  data = {}
81
+ if _headless():
82
+ return
68
83
  try:
69
84
  roots = _workspace_roots(data) or [os.getcwd()]
70
85
  # Write the record to every root that ALREADY has a .caddis dir, rather than to
@@ -11,65 +11,65 @@
11
11
 
12
12
  | Skill | Path | When to Use |
13
13
  |-------|------|-------------|
14
- | Api Design | `api-design/` | REST and GraphQL API design patterns. Use when designing new API endpoints, defining resource schemas, planning versioning strategies, or reviewing API contracts. Covers naming conventions, pagination, filtering, error responses, and OpenAPI documentation. |
15
- | Backend Development | `backend-development/` | Backend API design, database architecture, microservices patterns, and test-driven development. Use for designing APIs, database schemas, or backend system architecture. |
16
- | Code Review | `code-review/` | Automated code review for pull requests using specialized review patterns. Analyzes code for quality, security, performance, and best practices. Use when reviewing code changes, PRs, or doing code audits. |
17
- | Codebase Audit | `codebase-audit/` | Systematic codebase audit methodology for unfamiliar codebases before architecture or implementation work. Use for new codebase, unfamiliar codebase, pre-implementation audit, codebase review, technical due diligence, or onboarding to an existing project. Produces AUDIT-FINDINGS.md and QUESTIONS.md. Routes to Architect, Planner, or Code Reviewer agents. |
14
+ | Api Design | `api-design/` | REST and GraphQL API design: endpoints, resource schemas, versioning, pagination, error responses, OpenAPI. Use when designing or reviewing API contracts. |
15
+ | Backend Development | `backend-development/` | Backend API design, database schemas, microservices and TDD. Use for backend system architecture. |
16
+ | Code Review | `code-review/` | Automated code review for quality, security, performance and best practices. Use when reviewing code changes, PRs, or doing code audits. |
17
+ | Codebase Audit | `codebase-audit/` | Audit an unfamiliar codebase before architecture or implementation work. Use for a new codebase, pre-implementation audit, codebase review, technical due diligence or onboarding. Produces AUDIT-FINDINGS.md and QUESTIONS.md. |
18
18
  | Cross Review | `cross-review/` | Cross-vendor code review of the current diff — a second-vendor model (DeepSeek/GLM/any OpenAI-compatible endpoint) reviews your changes to catch bugs a same-vendor reviewer misses |
19
- | Dashboard Perf Sweep | `dashboard-perf-sweep/` | Re-measure an app's dashboard/API endpoints for load-time regressions and decide, with a documented checklist (not a black-box verdict), whether a slow one is a candidate for the rs-kit summary-table refresher pattern — or needs an index, keyset paging, gzip, or nothing at all. Use when the user says "sweep dashboard performance", "check if this app needs rs-kit", "re-measure the perf tracker", "is this endpoint a refresher candidate", or when a dashboard-performance-tracker.md is stale and needs re-validating. Read-only by default (dev servers only; prod requires an explicit opt-in and human confirmation) and human-invoked, never scheduled -- it surfaces candidates, it does not enroll them. |
20
- | Error Handling | `error-handling/` | Error handling patterns for Python and TypeScript applications. Use when designing error hierarchies, implementing retry logic, building error boundaries, or establishing logging strategies. Covers custom exceptions, result types, circuit breakers, and user-facing error messages. |
19
+ | Dashboard Perf Sweep | `dashboard-perf-sweep/` | Re-measure dashboard/API endpoints for load-time regressions and decide by checklist if a slow one needs the rs-kit refresher, an index, keyset paging, gzip, or nothing. Use when the user says "sweep dashboard performance", "check if this app needs rs-kit", "re-measure the perf tracker", "is this endpoint a refresher candidate", or dashboard-performance-tracker.md is stale. Read-only. |
20
+ | Error Handling | `error-handling/` | Error handling for Python and TypeScript: error hierarchies, custom exceptions, result types, retries, circuit breakers, error boundaries, logging, user-facing messages. |
21
21
  | Fastapi Dev | `fastapi-dev/` | Build FastAPI backends with standard patterns, error handling, and testing |
22
22
  | Javascript Typescript | `javascript-typescript/` | JavaScript and TypeScript development with ES6+, Node.js, React, and modern web frameworks. Use for frontend, backend, or full-stack JavaScript/TypeScript projects. |
23
- | Python Development | `python/` | Modern Python development with Python 3.12+, Django, FastAPI, async patterns, and production best practices. Use for Python projects, APIs, data processing, or automation scripts. |
23
+ | Python Development | `python/` | Modern Python 3.12+ (Django, FastAPI, async) with production best practices. Use for Python projects, APIs, data processing or scripts. |
24
24
  | Refactoring | `refactoring/` | Safely refactor code while maintaining behavior. Use when improving code structure, reducing duplication, extracting functions, or modernizing legacy code. |
25
25
  | Security Review | `security-review/` | Security review workflow — OWASP, code scanning, cloud infrastructure |
26
- | Sql | `sql/` | Write high-quality, optimized SQL with best practices for performance, NULL handling, security, and readability. Database-agnostic patterns with dialect-specific notes. |
26
+ | Sql | `sql/` | Write optimized, secure, readable SQL: performance, NULL handling, dialect-specific notes. |
27
27
 
28
28
  ### Data
29
29
 
30
30
  | Skill | Path | When to Use |
31
31
  |-------|------|-------------|
32
- | Database Design | `database-design/` | Database schema design, optimization, and migration patterns for PostgreSQL, MySQL, and NoSQL databases. Use for designing schemas, writing migrations, or optimizing queries. |
33
- | Db Diagram | `db-diagram/` | Turn a SQL artifact — a stored procedure, view, query, .sql file, or table name — into a diagram that explains it to a human. Use when the user says "diagram this query/proc/view/schema", "explain this SQL visually", "draw the ER diagram", "show me the data flow of this stored proc", "/mermaid-db", or "/excalidraw-db". Produces Mermaid (default, git-diffable) or Excalidraw (for design reviews). Read-only — never touches the database. |
32
+ | Database Design | `database-design/` | Database schema design, migrations and query optimization for PostgreSQL, MySQL and NoSQL. |
33
+ | Db Diagram | `db-diagram/` | Diagram a SQL artifact (stored proc, view, query, .sql file, table) as Mermaid or Excalidraw. Use when the user says "diagram this query/proc/view/schema", "explain this SQL visually", "draw the ER diagram", "show me the data flow of this stored proc", "/mermaid-db", or "/excalidraw-db". Read-only. |
34
34
 
35
35
  ### Devops
36
36
 
37
37
  | Skill | Path | When to Use |
38
38
  |-------|------|-------------|
39
- | Adopt App | `adopt-app/` | Bring an app that was never scaffolded - a proof of concept that became real, a folder on a server, a checkout with no remote - up to the standard a generated app starts at. Inventories it without running it (local folder, network share, or a remote Windows box over WinRM), works out what stack each component is, measures it against an adoption standard with three verdicts (pass, gap, and question-only-a-person-can-answer), and writes an ordered plan whose steps cannot be done in the wrong order. Use when the user says "this app was never set up properly", "adopt this POC", "onboard this app", "it just runs from a folder on the server", "bring this up to standard", "what would it take to get this into CI", "nobody knows how this is deployed", or "it started as a prototype and now it is production". |
40
- | Ci Cd Pipeline | `ci-cd-pipeline/` | CI/CD pipeline design and implementation for GitHub Actions, Azure DevOps, and general pipeline architecture. Use when creating build pipelines, deployment workflows, quality gates, environment promotion strategies, or automating release processes. |
39
+ | Adopt App | `adopt-app/` | Bring an app that was never scaffolded (POC, server folder, checkout with no remote) up to standard — inventory without running it, pass/gap/question verdicts, ordered plan. Use when the user says "this app was never set up properly", "adopt this POC", "onboard this app", "it just runs from a folder on the server", "bring this up to standard", "what would it take to get this into CI", "nobody knows how this is deployed", or "it started as a prototype and now it is production". |
40
+ | Ci Cd Pipeline | `ci-cd-pipeline/` | CI/CD pipelines for GitHub Actions and Azure DevOps: build and deploy workflows, quality gates, environment promotion and release automation. |
41
41
  | Gh Cli | `gh-cli/` | GitHub CLI operations — issues, PRs, releases, and repo management |
42
42
  | Git Commit | `git-commit/` | Create well-structured conventional commit messages following Conventional Commits standard. Use when committing changes, preparing PRs, or generating changelogs. |
43
- | Port To Github | `port-to-github/` | Move (port) an app or repository to GitHub from ANY source - a Gitea/GitLab/any git server URL, a local folder, a network (UNC) share, or a folder on a remote Windows box reached over WinRM - with or without existing git history. Keeps every branch and tag, verifies by SHA, translates Gitea/Forgejo Actions CI, enforces a source-only content policy (runtimes, binaries, data exports and dependencies stay out of the repo, over ALL history, with a runtime manifest and provisioning script so the environment is still reproducible), switches deploy checkouts to GitHub with automatic rollback, and retires the old host safely. Use when the user says "move this app to GitHub", "port X to GitHub", "migrate from Gitea", "put this folder on GitHub", "this app only exists on the server", "import the repo from the prod box", "keep binaries / MariaDB / PHP out of the repo", "check the repo only holds source", or "cut the deploy over to GitHub". |
44
- | Safe Cleanup | `safe-cleanup/` | Use BEFORE deleting any directory tree, clearing a scratchpad, removing git worktrees, or "tidying up" generated folders - especially on Windows, where a recursive delete that meets a junction or symlink destroys the link's TARGET. Also use when verifying that a Python venv or node_modules survived a cleanup, because pip check and file counts both report healthy on a half-deleted environment. |
45
- | Using Git Worktrees | `using-git-worktrees/` | Use when starting feature work that needs isolation from current workspace or before executing implementation plans - creates isolated git worktrees with smart directory selection and safety verification |
46
- | Windows Deployment | `windows-deployment/` | Deploy FastAPI + React/Vite apps to Windows Server with NSSM services, reverse proxy (IIS or nginx), and git-pull workflow. Use when deploying any web app to a Windows prod server, setting up NSSM services, configuring IIS or nginx reverse proxy, making code environment-aware for dev/prod, or troubleshooting prod deployment issues. |
43
+ | Port To Github | `port-to-github/` | Port an app or repo to GitHub from any source (git server, local folder, UNC share, Windows box over WinRM) — all branches and tags, SHA-verified, CI translated, history kept source-only, deploy cut over with rollback. Use when the user says "move this app to GitHub", "port X to GitHub", "migrate from Gitea", "put this folder on GitHub", "this app only exists on the server", "import the repo from the prod box", "keep binaries / MariaDB / PHP out of the repo", "check the repo only holds source", or "cut the deploy over to GitHub". |
44
+ | Safe Cleanup | `safe-cleanup/` | Use BEFORE deleting a directory tree, scratchpad or git worktree, or "tidying up" generated folders, especially on Windows, where deleting through a junction or symlink destroys its target; and to verify a venv or node_modules survived. |
45
+ | Using Git Worktrees | `using-git-worktrees/` | Use when starting feature work that needs isolation from the current workspace, or before executing an implementation plan: creates an isolated git worktree safely. |
46
+ | Windows Deployment | `windows-deployment/` | Deploy FastAPI + React/Vite apps to Windows Server with NSSM services, IIS or nginx reverse proxy and git-pull. Use for Windows prod deploys, NSSM, reverse proxy setup, dev/prod config, or prod troubleshooting. |
47
47
 
48
48
  ### Docs
49
49
 
50
50
  | Skill | Path | When to Use |
51
51
  |-------|------|-------------|
52
- | Code Documentation | `code-documentation/` | Writing effective code documentation - API docs, README files, inline comments, and technical guides. Use for documenting codebases, APIs, or writing developer guides. |
53
- | Confluence Hla | `confluence-hla/` | Author enterprise High-Level Architecture (HLA) documents in Simplified Technical English and generate Confluence Storage Format XHTML with self-contained PlantUML diagrams, wrapped tables, and zero AI fingerprints. Use when creating high-level architecture designs, architecture documentation for Confluence, or converting markdown architecture to Confluence storage format. |
52
+ | Code Documentation | `code-documentation/` | Write code documentation: API docs, README files, inline comments and developer guides. |
53
+ | Confluence Hla | `confluence-hla/` | High-Level Architecture (HLA) documents in Simplified Technical English as Confluence Storage Format XHTML with PlantUML. Use for Confluence architecture docs or converting markdown architecture. |
54
54
  | Data Lineage | `data-lineage/` | Generate End-to-End Data Lineage and Telemetry Specification Markdown and Confluence XHTML for fleet observability. |
55
- | Explainer Doc | `explainer-doc/` | Write a document that hands off work to a team who did NOT do the investigation — an external vendor, another team, a contractor — and who must be able to act on it alone. Use when the user says "write a spec for the X team", "document this for someone outside the team", "explainer doc", "implementation spec for a vendor", "hand this off to Y", or is about to write a design doc whose primary reader did not live through the debugging/design process. NOT for internal specs where the reader already has full context (use technical-writing or writing-plans instead) — this is specifically for the "stranger must follow it alone" case. |
55
+ | Explainer Doc | `explainer-doc/` | Hand-off doc for a team that did NOT do the investigation (vendor, contractor, another team) — the "stranger must follow it alone" case. Use when the user says "write a spec for the X team", "document this for someone outside the team", "explainer doc", "implementation spec for a vendor", or "hand this off to Y". Not for readers with full context. |
56
56
  | Hld | `hld/` | Generate High-Level Design (HLD) Markdown documentation and Confluence XHTML with native PlantUML diagrams. |
57
57
  | Lld | `lld/` | Generate Lower-Level Design (LLD) Markdown documentation and Confluence XHTML with native PlantUML diagrams. |
58
58
  | Tech Explainer | `tech-explainer/` | >- |
59
- | Technical Writing | `technical-writing/` | Technical documentation best practices for READMEs, API docs, architecture docs, runbooks, and developer guides. Use when writing or reviewing documentation, creating onboarding guides, or establishing documentation standards. |
59
+ | Technical Writing | `technical-writing/` | Documentation best practices for READMEs, API docs, architecture docs, runbooks and developer guides. Use when writing or reviewing docs or setting documentation standards. |
60
60
  | Writing Plans | `writing-plans/` | Use when you have a spec or requirements for a multi-step task, before touching code |
61
61
 
62
62
  ### Frontend
63
63
 
64
64
  | Skill | Path | When to Use |
65
65
  |-------|------|-------------|
66
- | Css Architecture | `css-architecture/` | CSS architecture, design token strategy, Tailwind conventions, CSS Modules, container queries, dark mode, responsive patterns, and animation architecture. Use for design token naming, CSS custom properties, Tailwind config, container queries, dark mode implementation, fluid typography, or CSS animation decisions. Complements frontend-design (what to achieve) with how to implement it. |
67
- | Frontend Design | `frontend-design/` | Create distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, artifacts, posters, or applications. Generates creative, polished code that avoids generic AI aesthetics while strictly adhering to the user's technical standards. |
66
+ | Css Architecture | `css-architecture/` | CSS architecture: design tokens, custom properties, Tailwind config, CSS Modules, container queries, dark mode, fluid typography, animation. Covers how to implement styling; frontend-design covers what to achieve. |
67
+ | Frontend Design | `frontend-design/` | Create distinctive, production-grade frontend interfaces that avoid generic AI aesthetics. Use when the user asks to build web components, pages, artifacts, posters or applications. |
68
68
  | Mockup | `mockup/` | Create framework-aware UI mockups with feasibility checks. Prevents wasted effort by validating that proposed designs work within the target framework's constraints. |
69
69
  | React Best Practices | `react-best-practices/` | Modern React development guidelines covering hooks, component patterns, state management, performance optimization, and TypeScript integration. |
70
- | React Dev | `react-dev/` | This skill should be used when building React components with TypeScript, typing hooks, handling events, or when React TypeScript, React 19, Server Components are mentioned. Covers type-safe patterns for React 18-19 including generic components, proper event typing, and routing integration (TanStack Router, React Router). |
71
- | Ui Review | `ui-review/` | Review UI implementations against design requirements, accessibility standards (WCAG 2.2 AA), and brand guidelines. Use when reviewing designs or validating UI before release. |
72
- | Warm Editorial Ui | `warm-editorial-ui/` | Apply the "Warm Editorial Refinement" design system — a sophisticated, executive-grade aesthetic with warm cream surfaces (light mode) and warm charcoal surfaces (dark mode), Bahnschrift + Plus Jakarta Sans typography, generous rounded corners, multi-layer shadows, and a warm neutral palette. Supports both light and dark themes via CSS custom properties and the `.dark` class. Use this skill whenever the user wants to build an app, dashboard, component, or web UI using the abc-project visual style. Trigger on phrases like "use our design system", "apply our template", "make it look like abc-project", "use the warm editorial style", "use our brand template", "add dark mode", or any request to build a new tool/app/dashboard for XYZ Brand or similar contexts. This is the canonical design template for all new frontend builds. |
70
+ | React Dev | `react-dev/` | Type-safe React 18-19 with TypeScript: components, generic components, hooks, events, Server Components, TanStack Router and React Router. Use when React TypeScript or React 19 is involved. |
71
+ | Ui Review | `ui-review/` | Review a UI against design requirements, WCAG 2.2 AA and brand guidelines. Use when validating UI before release. |
72
+ | Warm Editorial Ui | `warm-editorial-ui/` | Apply the "Warm Editorial Refinement" design system (warm cream/charcoal surfaces, Bahnschrift + Plus Jakarta Sans, layered shadows), the canonical template for new frontend builds. Use for apps, dashboards or UI in the abc-project style, or on "use our design system", "apply our template", "make it look like abc-project", "use the warm editorial style", "use our brand template", "add dark mode", or a new tool for XYZ Brand. |
73
73
 
74
74
  ### General
75
75
 
@@ -77,6 +77,7 @@
77
77
  |-------|------|-------------|
78
78
  | Add Rules | `add-rules/` | Create canonical rules for ANY folder — write <folder>/AGENTS.md (from the folder template) + a <folder>/CLAUDE.md @import shim. For folders the stack-map generator doesn't cover. |
79
79
  | Catchup | `catchup/` | Where were we? A quick list of what this session was doing and what is still open |
80
+ | Decide | `decide/` | Record a decision in one step — .caddis/decisions/<date>-<slug>.md |
80
81
  | Digress | `digress/` | Park the current workstream on the stack and switch to a new task — without losing the original |
81
82
  | Excalidraw Db | `excalidraw-db/` | Turn a SQL artifact into an Excalidraw diagram for a design review / ARB pack / slide — higher-level, drag-the-boxes format |
82
83
  | Feature Plan | `feature-plan/` | Create a phased, TDD-structured implementation plan that acts as the durable spine for multi-session work |
@@ -93,6 +94,7 @@
93
94
  | Park | `park/` | File a future-work item in the one backlog — .caddis/parking-lot/ — or list what is open |
94
95
  | Pr Merge | `pr-merge/` | End-to-end pull request and merge lane — push feature branch, open or update PR, monitor CI to green, merge to default branch, and clean up the feature branch. |
95
96
  | Prd | `prd/` | Capture requirements through structured discovery and write a PRD |
97
+ | Rca | `rca/` | Record a root cause in one step — .caddis/rca/<date>-<slug>.md — or close one with the fixing commit |
96
98
  | Resume | `resume/` | Renamed to /caddis:catchup (alias, removed next release) |
97
99
  | Review | `review/` | Renamed to /caddis:review-pr (alias, removed next release) |
98
100
  | Review Pr | `review-pr/` | Review someone else's OPEN pull request end to end — what changed, what CI says, what is risky — then approve or request changes. Never approves on its own. |
@@ -114,26 +116,26 @@
114
116
  | Skill | Path | When to Use |
115
117
  |-------|------|-------------|
116
118
  | Draw Io | `draw-io/` | draw.io diagram creation, editing, and review. Use for .drawio XML editing, PNG conversion, layout adjustment, and AWS icon usage. |
117
- | Mermaid Diagrams | `mermaid-diagrams/` | Create software diagrams using Mermaid text-based syntax. Use for class diagrams (domain modeling, OOP design), sequence diagrams (API flows, interactions), flowcharts (processes, algorithms, user journeys), ERD (database schemas), C4 architecture diagrams, state diagrams, git graphs, gantt charts, and data visualization. |
118
- | Particle Art | `particle-art/` | Generate animated particle art React/Next.js components — zero dependencies, spring physics, CSS-variable theming, DPR-correct canvas, mouse interaction. Use when the user wants animated hero art, a living logo, a branded initial or monogram, a constellation background, or any "particles that form a shape". Triggers on "particle animation", "node network", "animated letter/logo/initials", "living letter", "morphing particles", "constellation", "neural net art", "dot field", "stipple portrait", "halftone animation", "ASCII art animation", "background art for my site", or "art that reacts to mouse". Covers — text/initials → spring-node letter; preset patterns (constellation, helix, spiral, DNA, hex-grid, wave, infinity); custom SVG paths; custom polygon points; Unicode halftone stipple; Gaussian dot field with sparks; SVG circuit traces; hybrid combos. Outputs a complete, self-contained, copy-paste-ready React component. Prefer this over p5.js (zero-dep, React-native, TypeScript), tsParticles (richer spring physics, CSS-var theming), Three.js (lightweight, no WebGL). |
119
+ | Mermaid Diagrams | `mermaid-diagrams/` | Software diagrams in Mermaid: class, sequence, flowchart, ERD, C4, state, git graph, gantt. Use for domain models, API flows, processes and database schemas. |
120
+ | Particle Art | `particle-art/` | Zero-dependency animated particle art as a React/Next.js component (spring physics, CSS-variable theming, mouse interaction). Use for animated hero art or a living logo, or on "particles that form a shape", "particle animation", "node network", "animated letter/logo/initials", "living letter", "morphing particles", "constellation", "neural net art", "dot field", "stipple portrait", "halftone animation", "ASCII art animation", "background art for my site", or "art that reacts to mouse". |
119
121
 
120
122
  ### Testing
121
123
 
122
124
  | Skill | Path | When to Use |
123
125
  |-------|------|-------------|
124
- | Playwright | `playwright/` | Complete browser automation with Playwright. Auto-detects dev servers, writes clean test scripts to /tmp. Test pages, fill forms, take screenshots, check responsive design, validate UX, test login flows, check links, automate any browser task. Use when user wants to test websites, automate browser interactions, validate web functionality, or perform any browser-based testing. |
126
+ | Playwright | `playwright/` | Browser automation and testing with Playwright: auto-detects dev servers; tests pages, forms, logins, links, screenshots and responsive layouts. Use to test websites or automate any browser task. |
125
127
  | Tdd Workflow | `tdd-workflow/` | Test-Driven Development workflow — red-green-refactor cycle |
126
- | Test Strategy | `test-strategy/` | Test planning and strategy for projects of any size. Use when defining what to test, choosing test types, setting coverage goals, building test pyramids, or planning quality gates. Produces TEST-STRATEGY.md with prioritized test plan. Routes to Tester agent for execution. |
127
- | Webapp Testing | `webapp-testing/` | Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs. |
128
+ | Test Strategy | `test-strategy/` | Plan what to test: test types, coverage goals, test pyramid, quality gates. Produces a prioritized TEST-STRATEGY.md for the Tester agent. |
129
+ | Webapp Testing | `webapp-testing/` | Test local web apps with Playwright: verify frontend behavior, debug UI, capture screenshots and browser logs. |
128
130
 
129
131
  ### Workflow
130
132
 
131
133
  | Skill | Path | When to Use |
132
134
  |-------|------|-------------|
133
- | Advisory Hub | `advisory-hub/` | Cross-session phase validation for multi-phase implementation plans — a long-lived "Hub" session RE-DERIVES each implementation phase's claims independently instead of trusting its self-assessment. Use when the user says "advisory hub", "validate this phase", "phase report", "hub verdict", "advisory context", "who checks the implementing session", "the plan turned out to be wrong", "hand off the hub", "re-derive don't trust", or when a long, multi-session plan with expensive-to-reverse decisions (a migration, a security change, anything touching production data correctness) needs an independent session that verifies every phase before the next one starts. NOT for a three-phase feature — it costs a full extra session's context per phase, and a skill that doesn't say so gets applied everywhere and resented. Every Hub artefact belongs in `.caddis/advisory-hub-reports/` — a succession prompt is `hub-NN.spawn.md` there, never a generic prompts folder, even when you write it by hand instead of running `/caddis:spawn-hub`. |
135
+ | Advisory Hub | `advisory-hub/` | A long-lived "Hub" session re-derives each phase of a multi-session plan instead of trusting its self-report. Use when the user says "advisory hub", "validate this phase", "phase report", "hub verdict", "advisory context", "who checks the implementing session", "the plan turned out to be wrong", "hand off the hub", "re-derive don't trust", or a long plan with expensive-to-reverse work (a migration, a security change, production data correctness) needs independent checks; not for short features. Hub artefacts, including `hub-NN.spawn.md`, go in `.caddis/advisory-hub-reports/`. |
134
136
  | Best Practices | `best-practices/` | >- |
135
137
  | Brainstorming | `brainstorming/` | You MUST use this before any creative work - creating features, building components, adding functionality, or modifying behavior. Explores user intent, requirements and design before implementation. |
136
138
  | Context Curator | `context-curator/` | Compress and prioritize codebase context before handing work to reasoning agents, minimizing token waste while preserving the required decision inputs. |
137
139
  | Preflight | `preflight/` | Plan-vs-codebase validation — verifies API contracts, type names, field accuracy, dependencies, and paths before implementation begins |
138
140
  | Setup Project Ai | `setup-project-ai/` | Install or refresh the agent-agnostic dev harness in this project (AGENTS.md-canonical rules hierarchy + CLAUDE.md @import shims, subagents, commands, settings) |
139
- | Skill Creator | `skill-creator/` | Create new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, edit, or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy. |
141
+ | Skill Creator | `skill-creator/` | Create, edit and improve skills, run evals and benchmarks, and optimize a skill's description for triggering accuracy. |
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: adopt-app
3
- description: Bring an app that was never scaffolded - a proof of concept that became real, a folder on a server, a checkout with no remote - up to the standard a generated app starts at. Inventories it without running it (local folder, network share, or a remote Windows box over WinRM), works out what stack each component is, measures it against an adoption standard with three verdicts (pass, gap, and question-only-a-person-can-answer), and writes an ordered plan whose steps cannot be done in the wrong order. Use when the user says "this app was never set up properly", "adopt this POC", "onboard this app", "it just runs from a folder on the server", "bring this up to standard", "what would it take to get this into CI", "nobody knows how this is deployed", or "it started as a prototype and now it is production".
3
+ description: Bring an app that was never scaffolded (POC, server folder, checkout with no remote) up to standard — inventory without running it, pass/gap/question verdicts, ordered plan. Use when the user says "this app was never set up properly", "adopt this POC", "onboard this app", "it just runs from a folder on the server", "bring this up to standard", "what would it take to get this into CI", "nobody knows how this is deployed", or "it started as a prototype and now it is production".
4
4
  ---
5
5
 
6
6
  # adopt-app
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: advisory-hub
3
- description: Cross-session phase validation for multi-phase implementation plans — a long-lived "Hub" session RE-DERIVES each implementation phase's claims independently instead of trusting its self-assessment. Use when the user says "advisory hub", "validate this phase", "phase report", "hub verdict", "advisory context", "who checks the implementing session", "the plan turned out to be wrong", "hand off the hub", "re-derive don't trust", or when a long, multi-session plan with expensive-to-reverse decisions (a migration, a security change, anything touching production data correctness) needs an independent session that verifies every phase before the next one starts. NOT for a three-phase feature — it costs a full extra session's context per phase, and a skill that doesn't say so gets applied everywhere and resented. Every Hub artefact belongs in `.caddis/advisory-hub-reports/` — a succession prompt is `hub-NN.spawn.md` there, never a generic prompts folder, even when you write it by hand instead of running `/caddis:spawn-hub`.
3
+ description: A long-lived "Hub" session re-derives each phase of a multi-session plan instead of trusting its self-report. Use when the user says "advisory hub", "validate this phase", "phase report", "hub verdict", "advisory context", "who checks the implementing session", "the plan turned out to be wrong", "hand off the hub", "re-derive don't trust", or a long plan with expensive-to-reverse work (a migration, a security change, production data correctness) needs independent checks; not for short features. Hub artefacts, including `hub-NN.spawn.md`, go in `.caddis/advisory-hub-reports/`.
4
4
  ---
5
5
 
6
6
  # Advisory Hub — cross-session phase validation
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: api-design
3
- description: REST and GraphQL API design patterns. Use when designing new API endpoints, defining resource schemas, planning versioning strategies, or reviewing API contracts. Covers naming conventions, pagination, filtering, error responses, and OpenAPI documentation.
3
+ description: "REST and GraphQL API design: endpoints, resource schemas, versioning, pagination, error responses, OpenAPI. Use when designing or reviewing API contracts."
4
4
  ---
5
5
 
6
6
  # API Design Skill
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: backend-development
3
- description: Backend API design, database architecture, microservices patterns, and test-driven development. Use for designing APIs, database schemas, or backend system architecture.
3
+ description: Backend API design, database schemas, microservices and TDD. Use for backend system architecture.
4
4
  source: wshobson/agents
5
5
  license: MIT
6
6
  ---
@@ -5,9 +5,9 @@ description: Where were we? A quick list of what this session was doing and what
5
5
 
6
6
  # /catchup — where are we?
7
7
 
8
- If $ARGUMENTS is empty, follow the catchup procedure below. If a name is given, follow
9
- the pop-and-resume procedure at the end of this file. The name selects this mode; the
10
- procedure still pops the last parked frame.
8
+ If $ARGUMENTS is empty, follow the catchup procedure below. If a workstream name is given,
9
+ load that workstream's relay (the named-load procedure at the end of this file). Loading
10
+ never removes or changes the relay.
11
11
 
12
12
  Answer one question: **what were we doing, and what is still open?**
13
13
 
@@ -62,36 +62,34 @@ on is worse than one sentence admitting there is nothing to recap.
62
62
  folder, or `claude --resume` to pick an older session. Mention this only if the recap is thin,
63
63
  or if they ask for detail the files do not hold.
64
64
  - To **write** a durable resume doc rather than read one: `/caddis:handoff`.
65
- - To **pop a parked workstream** off the digress stack: `/caddis:catchup [name]`. This restores work deliberately set aside.
66
-
67
- # /caddis:catchup [name] — pop the parked task and pick it back up
68
-
69
- A digression is finished; return to the task you parked with `/digress`. This pops the top frame off the
70
- workstream stack, restates where you were, realigns `relay.md`, and immediately continues the work — the
71
- user should not have to remember or re-state anything.
72
-
73
- ## Step 1 — read the stack
74
- Read `.caddis/workstreams.json`. If it is **absent, unparseable, `version != 1`, or `stack` is empty**,
75
- say exactly `Nothing is parked.` and stop. Do nothing else.
76
-
77
- ## Step 2 — pop the top frame
78
- The top of stack is the **last** element of `stack` (LIFO — most recently parked). Remove it and write the
79
- rest of the file back (preserve `version` and any other frames + unknown fields). This is the one write
80
- this command makes to the state file.
81
-
82
- ## Step 3 — restate + realign relay.md
83
- Restate the popped frame to the user: its `plan`, `phase`, and `resumePointer` (and `repo` if set — the
84
- parked task lives in another repo, so say which). Then edit `.caddis/relay.md`'s `## Next step` section
85
- **in place** so it matches the popped frame's `resumePointer` — preserve every other section of relay.md
86
- untouched. (If relay.md or that section is absent, skip this edit silently; the restatement above is enough.)
87
-
88
- ## Step 4 — resume the work
89
- Begin executing the `resumePointer` immediately. Ask nothing — the frame already carries the next action.
90
- If the parked plan lives in another `repo`, note that the user may need to open that repo first, then
91
- proceed there.
65
+ - To **switch to a named workstream**: `/caddis:catchup <name>`. This restores or loads the named relay.
66
+
67
+ ## Workstreams and open work
68
+
69
+ **No argument:** this is the last step of the catchup procedure above, not a separate one.
70
+ After the list, add the workstream index and the open work:
71
+ 1. Refresh and show the index: `python "${CLAUDE_PLUGIN_ROOT}/scripts/caddis_workstreams.py" render-index`,
72
+ then display `.caddis/relay.md`. If it refuses a legacy `.caddis/relay.md`, display that file
73
+ as it is and suggest `/handoff`, which migrates it.
74
+ 2. Show open work for the current workstream:
75
+ ```
76
+ python "${CLAUDE_PLUGIN_ROOT}/scripts/caddis_todo.py" open-work
77
+ ```
78
+ Before saying `Nothing is parked.`, check for an old `/digress` stack: if `.caddis/workstreams.json`
79
+ exists, run `caddis_workstreams.py migrate-legacy` (it keeps a backup and reports conflicts
80
+ instead of overwriting), then show the index again. Only with no relays and no old stack, state:
81
+ `Nothing is parked.`
82
+
83
+ **Named load** (`/catchup <name>`):
84
+ 1. Load it: `python "${CLAUDE_PLUGIN_ROOT}/scripts/caddis_workstreams.py" read <name>`.
85
+ 2. If it prints nothing, the relay may be on another machine. Ask before fetching, then run
86
+ `python "${CLAUDE_PLUGIN_ROOT}/scripts/caddis_relay_git.py" fetch <name>`. It reads only
87
+ `refs/caddis/relay/<name>`, never checks out or merges, and refuses to replace a different local
88
+ relay. Pass `--replace` only if the user confirms the local one may be overwritten.
89
+ 3. Restate where you were and resume the workstream.
92
90
 
93
91
  ## Rules
94
92
  - **Never** run a destructive or history-rewriting git action (no `git checkout`, `git reset`, `git stash`,
95
- branch switches). Resuming is metadata-only.
96
- - Pop exactly one frame per invocation (the LIFO top). Run `/caddis:catchup [name]` again to pop the next.
97
- - Only real paths and verified facts — restate the frame as written; do not embellish the resume point.
93
+ branch switches), even when the loaded workstream names another branch. Resuming is metadata-only:
94
+ this checkout may be shared with other live sessions. Tell the user which branch it is on instead.
95
+ - Only real paths and verified facts — restate the relay as written; do not embellish the resume point.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: ci-cd-pipeline
3
3
  context: fork
4
- description: CI/CD pipeline design and implementation for GitHub Actions, Azure DevOps, and general pipeline architecture. Use when creating build pipelines, deployment workflows, quality gates, environment promotion strategies, or automating release processes.
4
+ description: "CI/CD pipelines for GitHub Actions and Azure DevOps: build and deploy workflows, quality gates, environment promotion and release automation."
5
5
  ---
6
6
 
7
7
  # CI/CD Pipeline Skill
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: code-documentation
3
- description: Writing effective code documentation - API docs, README files, inline comments, and technical guides. Use for documenting codebases, APIs, or writing developer guides.
3
+ description: "Write code documentation: API docs, README files, inline comments and developer guides."
4
4
  source: wshobson/agents
5
5
  license: MIT
6
6
  ---
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: code-review
3
3
  context: fork
4
- description: Automated code review for pull requests using specialized review patterns. Analyzes code for quality, security, performance, and best practices. Use when reviewing code changes, PRs, or doing code audits.
4
+ description: Automated code review for quality, security, performance and best practices. Use when reviewing code changes, PRs, or doing code audits.
5
5
  source: anthropics/claude-code
6
6
  license: Apache-2.0
7
7
  ---
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: codebase-audit
3
3
  context: fork
4
- description: Systematic codebase audit methodology for unfamiliar codebases before architecture or implementation work. Use for new codebase, unfamiliar codebase, pre-implementation audit, codebase review, technical due diligence, or onboarding to an existing project. Produces AUDIT-FINDINGS.md and QUESTIONS.md. Routes to Architect, Planner, or Code Reviewer agents.
4
+ description: Audit an unfamiliar codebase before architecture or implementation work. Use for a new codebase, pre-implementation audit, codebase review, technical due diligence or onboarding. Produces AUDIT-FINDINGS.md and QUESTIONS.md.
5
5
  ---
6
6
 
7
7
  # Codebase Audit Skill
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: confluence-hla
3
- description: Author enterprise High-Level Architecture (HLA) documents in Simplified Technical English and generate Confluence Storage Format XHTML with self-contained PlantUML diagrams, wrapped tables, and zero AI fingerprints. Use when creating high-level architecture designs, architecture documentation for Confluence, or converting markdown architecture to Confluence storage format.
3
+ description: High-Level Architecture (HLA) documents in Simplified Technical English as Confluence Storage Format XHTML with PlantUML. Use for Confluence architecture docs or converting markdown architecture.
4
4
  ---
5
5
 
6
6
  # Confluence High-Level Architecture (HLA) Authoring Skill