@hanzlaa/rcode 4.3.2 → 4.4.0

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 (130) hide show
  1. package/AGENTS.md +1 -1
  2. package/CONTRIBUTING.md +2 -1
  3. package/README.md +45 -10
  4. package/cli/doctor.js +21 -3
  5. package/cli/index.js +5 -1
  6. package/cli/install.js +16 -2
  7. package/cli/postinstall.js +1 -1
  8. package/cli/uninstall.js +48 -6
  9. package/dist/rcode.js +178 -174
  10. package/package.json +12 -22
  11. package/rcode/agents/rcode-codebase-mapper.md +12 -0
  12. package/rcode/agents/rcode-phase-researcher.md +13 -0
  13. package/rcode/agents/rcode-project-researcher.md +32 -0
  14. package/rcode/agents/rcode-roadmapper.md +15 -0
  15. package/rcode/agents/rules/planner/common-patterns.md +40 -0
  16. package/rcode/bin/lib/roadmap.cjs +184 -11
  17. package/rcode/bin/rcode-hooks.cjs +303 -14
  18. package/rcode/bin/rcode-tools.cjs +669 -55
  19. package/rcode/commands/lens-audit.md +8 -6
  20. package/rcode/data/intent-table.json +87 -0
  21. package/rcode/modules/seo.yaml +22 -0
  22. package/rcode/references/project-types.yaml +75 -0
  23. package/rcode/skills/SKILLS_INDEX.md +20 -2
  24. package/rcode/skills/actions/4-implementation/rcode-herdr-orchestration/SKILL.md +16 -21
  25. package/rcode/skills/actions/4-implementation/rcode-herdr-orchestration/rules/backlog-building.md +13 -0
  26. package/rcode/skills/actions/4-implementation/rcode-herdr-orchestration/rules/merge-strategy.md +17 -0
  27. package/rcode/skills/actions/4-implementation/rcode-herdr-orchestration/rules/orchestrator-rhythm.md +9 -0
  28. package/rcode/skills/actions/4-implementation/rcode-herdr-orchestration/rules/wave-design.md +21 -0
  29. package/rcode/skills/actions/4-implementation/rcode-herdr-orchestration/templates/heartbeat.sh +0 -0
  30. package/rcode/skills/actions/4-implementation/rcode-scaffold-project/SKILL.md +60 -1
  31. package/rcode/skills/core/rcode-lazy/SKILL.md +149 -0
  32. package/rcode/skills/seo/module.yaml +20 -0
  33. package/rcode/skills/seo/on-page-seo-auditor/SKILL.md +308 -0
  34. package/rcode/skills/seo/on-page-seo-auditor/references/audit-example.md +109 -0
  35. package/rcode/skills/seo/on-page-seo-auditor/references/audit-templates.md +427 -0
  36. package/rcode/skills/seo/on-page-seo-auditor/references/bulk-audit-playbook.md +116 -0
  37. package/rcode/skills/seo/on-page-seo-auditor/references/scoring-rubric.md +525 -0
  38. package/rcode/skills/seo/rank-and-rent-local-seo/SKILL.md +94 -0
  39. package/rcode/skills/seo/rank-and-rent-local-seo/rules/city-matrix-and-pages.md +76 -0
  40. package/rcode/skills/seo/rank-and-rent-local-seo/rules/monetization.md +70 -0
  41. package/rcode/skills/seo/rank-and-rent-local-seo/rules/niche-selection.md +60 -0
  42. package/rcode/skills/seo/rank-and-rent-local-seo/rules/subniche-discovery.md +66 -0
  43. package/rcode/skills/seo/rank-and-rent-local-seo/templates/service-city-page.md +36 -0
  44. package/rcode/skills/seo/rank-and-rent-local-seo/templates/subniche-research-prompt.md +34 -0
  45. package/rcode/skills/seo/seo-audit/SKILL.md +412 -0
  46. package/rcode/skills/seo/seo-audit/evals/evals.json +136 -0
  47. package/rcode/skills/seo/seo-audit/references/ai-writing-detection.md +200 -0
  48. package/rcode/skills/seo/seo-content-factory/SKILL.md +130 -0
  49. package/rcode/skills/seo/seo-content-factory/rules/agents.md +80 -0
  50. package/rcode/skills/seo/seo-content-factory/rules/herdr-wave-mapping.md +80 -0
  51. package/rcode/skills/seo/seo-content-factory/rules/pipeline.md +102 -0
  52. package/rcode/skills/seo/seo-content-factory/rules/programmatic-pages.md +107 -0
  53. package/rcode/skills/seo/seo-content-factory/rules/quality-gates.md +68 -0
  54. package/rcode/skills/seo/seo-content-factory/rules/weekly-cadence.md +61 -0
  55. package/rcode/skills/seo/seo-content-factory/templates/BACKLOG.md +23 -0
  56. package/rcode/skills/seo/seo-content-factory/templates/agent-prompts/01-funnel-A1-A4.md +63 -0
  57. package/rcode/skills/seo/seo-content-factory/templates/agent-prompts/02-fanout-editorial-A5-A6-A8.md +28 -0
  58. package/rcode/skills/seo/seo-content-factory/templates/agent-prompts/03-fanout-programmatic-A7-A6-A8.md +25 -0
  59. package/rcode/skills/seo/seo-content-factory/templates/agent-prompts/04-loop-A9-A10.md +34 -0
  60. package/rcode/skills/seo/seo-content-factory/templates/article.mdx +39 -0
  61. package/rcode/skills/seo/seo-content-factory/templates/cluster.schema.json +52 -0
  62. package/rcode/skills/seo/seo-content-factory/templates/content-brief.md +51 -0
  63. package/rcode/skills/seo/seo-content-factory/templates/jsonld-builders.ts +49 -0
  64. package/rcode/skills/seo/seo-content-factory/templates/keywords.csv +13 -0
  65. package/rcode/skills/seo/seo-content-factory/templates/programmatic-page.tsx +58 -0
  66. package/rcode/skills/seo/seo-content-writer/SKILL.md +263 -0
  67. package/rcode/skills/seo/seo-content-writer/references/content-structure-templates.md +875 -0
  68. package/rcode/skills/seo/seo-content-writer/references/instructions-detail.md +239 -0
  69. package/rcode/skills/seo/seo-content-writer/references/seo-writing-checklist.md +250 -0
  70. package/rcode/skills/seo/seo-content-writer/references/title-formulas.md +339 -0
  71. package/rcode/skills/seo/seo-growth-orchestrator/SKILL.md +79 -0
  72. package/rcode/skills/seo/seo-growth-orchestrator/rules/backlinks.md +29 -0
  73. package/rcode/skills/seo/seo-growth-orchestrator/rules/content-engine.md +27 -0
  74. package/rcode/skills/seo/seo-growth-orchestrator/rules/dos-and-donts.md +40 -0
  75. package/rcode/skills/seo/seo-growth-orchestrator/rules/goals-protocol.md +34 -0
  76. package/rcode/skills/seo/seo-growth-orchestrator/rules/local-seo-stack.md +35 -0
  77. package/rcode/skills/seo/seo-growth-orchestrator/rules/mrr-sprint.md +27 -0
  78. package/rcode/skills/seo/seo-growth-orchestrator/rules/tools.md +19 -0
  79. package/rcode/skills/seo/seo-growth-orchestrator/templates/backlink-research.md +29 -0
  80. package/rcode/skills/seo/seo-growth-orchestrator/templates/goal-protocol.md +35 -0
  81. package/rcode/skills/seo/seo-growth-orchestrator/templates/local-citations.md +24 -0
  82. package/rcode/skills/seo/seo-growth-orchestrator/templates/local-city-pages.md +27 -0
  83. package/rcode/skills/seo/seo-growth-orchestrator/templates/local-gbp-categories.md +23 -0
  84. package/rcode/skills/seo/seo-growth-orchestrator/templates/local-gsc-goldmine.md +27 -0
  85. package/rcode/skills/seo/seo-growth-orchestrator/templates/local-review-mining.md +26 -0
  86. package/rcode/skills/seo/seo-growth-orchestrator/templates/mrr-30day-plan.md +19 -0
  87. package/rcode/skills/seo/seo-growth-orchestrator/templates/mrr-cut.md +13 -0
  88. package/rcode/skills/seo/seo-growth-orchestrator/templates/mrr-opportunity-finder.md +17 -0
  89. package/rcode/skills/seo/seo-growth-orchestrator/templates/mrr-role-model.md +18 -0
  90. package/rcode/skills/seo/seo-site-builder/SKILL.md +149 -0
  91. package/rcode/skills/seo/seo-site-builder/rules/01-niche-discovery.md +64 -0
  92. package/rcode/skills/seo/seo-site-builder/rules/02-deep-research.md +164 -0
  93. package/rcode/skills/seo/seo-site-builder/rules/03-keyword-strategy.md +82 -0
  94. package/rcode/skills/seo/seo-site-builder/rules/04-content-plan.md +173 -0
  95. package/rcode/skills/seo/seo-site-builder/rules/05-site-build.md +187 -0
  96. package/rcode/skills/seo/seo-site-builder/rules/06-yolo.md +127 -0
  97. package/rcode/skills/seo/seo-site-builder/templates/article-stub.mdx +62 -0
  98. package/rcode/skills/seo/seo-site-builder/templates/image-prompt.md +97 -0
  99. package/rcode/skills/seo/seo-site-builder/templates/keyword-export.md +45 -0
  100. package/rcode/skills/seo/seo-site-builder/templates/niche-scorecard.md +28 -0
  101. package/rcode/skills/seo/technical-seo-checker/SKILL.md +329 -0
  102. package/rcode/skills/seo/technical-seo-checker/references/bulk-audit-playbook.md +118 -0
  103. package/rcode/skills/seo/technical-seo-checker/references/ecommerce-platform-patterns.md +166 -0
  104. package/rcode/skills/seo/technical-seo-checker/references/http-status-codes.md +705 -0
  105. package/rcode/skills/seo/technical-seo-checker/references/llm-crawler-handling.md +257 -0
  106. package/rcode/skills/seo/technical-seo-checker/references/pre-migration-playbook.md +137 -0
  107. package/rcode/skills/seo/technical-seo-checker/references/robots-txt-reference.md +717 -0
  108. package/rcode/skills/seo/technical-seo-checker/references/technical-audit-example.md +169 -0
  109. package/rcode/skills/seo/technical-seo-checker/references/technical-audit-templates.md +436 -0
  110. package/rcode/templates/settings-hooks.json +16 -1
  111. package/rcode/workflows/do.md +17 -0
  112. package/rcode/workflows/enable-hooks.md +3 -2
  113. package/rcode/workflows/execute-sprint.md +22 -0
  114. package/rcode/workflows/execute.md +17 -3
  115. package/rcode/workflows/lens-audit.md +49 -8
  116. package/rcode/workflows/new-milestone.md +21 -9
  117. package/rcode/workflows/new-project-create-roadmap.md +2 -0
  118. package/rcode/workflows/new-project-roadmap.md +2 -0
  119. package/rcode/workflows/new-project.md +3 -0
  120. package/rcode/workflows/plan.md +15 -2
  121. package/server/dashboard.js +6 -2
  122. package/server/lib/api.js +35 -20
  123. package/server/lib/html/client/components/OrchPanel.js +43 -2
  124. package/server/lib/html/client/components/dashboard/InProgress.js +5 -4
  125. package/server/lib/html/client/components/shared.js +14 -0
  126. package/server/lib/html/client/orchestrator.js +13 -0
  127. package/server/lib/html/client/views/KanbanView.js +33 -4
  128. package/server/lib/html/css.js +57 -3
  129. package/server/lib/scanner.js +40 -4
  130. package/server/orchestrator.js +42 -0
package/AGENTS.md CHANGED
@@ -24,7 +24,7 @@ If a user says "just keep going" or "don't stop until done", that authorization
24
24
 
25
25
  - Follow [Conventional Commits](https://www.conventionalcommits.org/) format: `type(scope): subject`
26
26
  - Types allowed: `feat`, `fix`, `docs`, `style`, `refactor`, `test`, `chore`, `perf`, `revert`
27
- - Scopes allowed: `agents`, `skills`, `workflows`, `templates`, `dashboard`, `docs`, `config`, `github`, `commands`, `memory`, `brand`, `cli`, `ci`, `release`, `meta`, `tasks`, `migrations`, `refs`, `state`, `hooks`, `install`, `parity`, `triggers`, `dogfood`, `namespace`, `planning`, `insights`, `help`, `roadmap`, `session`, `audits`, `execute`, `executor`, `plan`, `planner`, `readme`, `sync`, `sprint`, `agent-exp`, `extensibility`, `lens-audit`, `tiers`, `build`, `council`, `doctor`, `postinstall`, `progress`, `security`, `tools`, `uninstall`, `update`, `test`, `changelog`, `scopes`, `phases`, `references`, `kanban`, `orchestrator`, `orchpanel`, `status`, `bin`, `brain`, `dogfeed`, `new-project`, `package`, `rcode-tools`, `rihal-tools`, `team`, `usp`, `v4`, `observability`, `audit`, `agent-rules`, `cursor`, `i18n`, `phase`, `scaffold`, `campaign`, `ship`, plus numeric phase/sprint scopes (e.g. `docs(15)`, `feat(8.3)`)
27
+ - Scopes allowed: `agents`, `skills`, `workflows`, `templates`, `dashboard`, `docs`, `config`, `github`, `commands`, `memory`, `brand`, `cli`, `ci`, `release`, `meta`, `tasks`, `migrations`, `refs`, `state`, `hooks`, `install`, `parity`, `triggers`, `dogfood`, `namespace`, `planning`, `insights`, `help`, `roadmap`, `session`, `audits`, `execute`, `executor`, `plan`, `planner`, `readme`, `sync`, `sprint`, `agent-exp`, `extensibility`, `lens-audit`, `tiers`, `build`, `council`, `doctor`, `postinstall`, `progress`, `security`, `tools`, `uninstall`, `update`, `test`, `changelog`, `scopes`, `phases`, `references`, `kanban`, `orchestrator`, `orchpanel`, `status`, `bin`, `brain`, `dogfeed`, `new-project`, `package`, `rcode-tools`, `rihal-tools`, `team`, `usp`, `v4`, `observability`, `audit`, `agent-rules`, `cursor`, `i18n`, `phase`, `scaffold`, `campaign`, `ship`, `getting-started`, plus numeric phase/sprint scopes (e.g. `docs(15)`, `feat(8.3)`)
28
28
  - Subject: lowercase first letter, imperative mood, no trailing period, under 72 chars
29
29
  - **NEVER add Claude/AI attribution to commit messages.** No "Generated with Claude Code", no "Co-Authored-By: Claude", no "🤖 Generated". The user does not want this.
30
30
  - **NEVER use `--no-verify`** to bypass hooks. If hooks fail, fix the underlying issue.
package/CONTRIBUTING.md CHANGED
@@ -279,6 +279,7 @@ We use [Conventional Commits](https://www.conventionalcommits.org/) format. The
279
279
  - `templates` — memory bank or pitch templates
280
280
  - `dashboard` — Majlis/Diwan server
281
281
  - `docs` — README, METHODOLOGY, SKILLS_INDEX, USER-GUIDE, FAQ
282
+ - `getting-started` — the `docs/getting-started.md` onboarding guide
282
283
  - `config` — team.yaml, config.yaml
283
284
  - `github` — CI/CD, issue templates, PR templates
284
285
  - `cli` — `cli/*.js` and `rcode/bin/rcode-tools.cjs`
@@ -520,7 +521,7 @@ only surface at install time.
520
521
  ### For dashboard changes
521
522
  1. `node server/dashboard.js` starts cleanly
522
523
  2. Visit `http://localhost:7717` — all sections render
523
- 3. Stop with `kill $(lsof -t -i:7717)`
524
+ 3. Stop with `kill $(ss -ltnp 'sport = :7717' | awk 'NR>1{match($6,/pid=([0-9]+)/,m); print m[1]}')`
524
525
 
525
526
  ### For new workflows
526
527
  1. Read the workflow instructions end-to-end as if executing it
package/README.md CHANGED
@@ -2,6 +2,16 @@
2
2
 
3
3
  <div dir="rtl">طريقة رحال</div>
4
4
 
5
+ <p align="center"><img src="brand/dashboard-tour.gif" alt="rcode Diwan dashboard tour — cycling through the project cockpit (progress donut, current phase executing, milestone outlook), the specialist agent roster, the Kanban board (TODO / in-progress / done), and the phase-driven delivery view" width="860"></p>
6
+
7
+ ### An engineering org in a folder — and you can watch it work.
8
+
9
+ *A roster of specialist agents, phase-driven delivery, and a persistent Memory Bank — running as plain files your IDE reads. Every number is reproducible with one command (`node benchmarks/facts.cjs`); marketing rounds up, this repo ships the receipts: **497 tests, 0 failing · 45 agents · 116 commands · 1 runtime dependency**.*
10
+
11
+ <p align="center"><img src="brand/dashboard-team.png" alt="rcode agent roster grouped by function — Leadership (Sadiq / strategy, Waleed / CTO, Ahmed / delivery, Nasser / eng manager), Engineering (Omar, Haitham / frontend, Yousef / backend, Zayd / ML, Khalid / DevOps), Product (Hussain / PM, Mariam / marketing), each card showing its role and tools" width="860"></p>
12
+
13
+ <p align="center"><sub>The <a href="docs/install.md">Diwan dashboard</a> (view-only, <code>node server/dashboard.js</code>) — your project's phases, sprints, agents, decisions, and live orchestration, read straight from the files in <code>.rcode/</code>.</sub></p>
14
+
5
15
  > **A curated composition of the best AI-development practices — shipped as files.** Surgical-change discipline, parallel-agent orchestration, persistent Memory Bank patterns, phase-driven planning — packaged as one workflow for Claude Code power users. No multi-agent harness. No vector DB. Your IDE keeps the methodology; the project keeps the memory.
6
16
 
7
17
  ```bash
@@ -10,10 +20,10 @@ pnpm dlx @hanzlaa/rcode install
10
20
 
11
21
  [![npm version](https://img.shields.io/npm/v/@hanzlaa/rcode)](https://www.npmjs.com/package/@hanzlaa/rcode)
12
22
  [![downloads](https://img.shields.io/npm/dw/@hanzlaa/rcode)](https://www.npmjs.com/package/@hanzlaa/rcode)
13
- [![CI](https://github.com/hanzlahabib/rihal-code/actions/workflows/test.yml/badge.svg)](https://github.com/hanzlahabib/rihal-code/actions/workflows/test.yml)
23
+ [![CI](https://github.com/hanzlahabib/rcode/actions/workflows/test.yml/badge.svg)](https://github.com/hanzlahabib/rcode/actions/workflows/test.yml)
14
24
  [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
15
25
 
16
- Status: `@hanzlaa/rcode` v4.0.0 on npm. 457 automated tests across 63 files, 45 agents, 116 commands, 87 skills. Actively dogfooded on real projects every week.
26
+ Status: `@hanzlaa/rcode` v4.3.2 on npm. 497 automated tests (100% green) across 61 files · 45 agents · 116 commands · 129 workflows · 88 skills · **1 runtime dependency**. Every number here is reproducible — run `node benchmarks/facts.cjs`. Actively dogfooded on real projects every week.
17
27
 
18
28
  ---
19
29
 
@@ -31,18 +41,20 @@ That means two things:
31
41
  - **The dogfood loop is the test suite.** Every release is run against fresh projects (calories-counter RN, reelspeed services) before publish. Bugs surface as GitHub issues, get fixed, ship.
32
42
  - **The tool grows from real friction, not theory.** Half the v3.6.20 fixes came from a single dogfeed session where 3 parallel agents found 50+ real bugs in 4 hours.
33
43
 
34
- If you're a solo dev or small team using Claude Code (or Cursor, Gemini, VS Code), rcode gives you the **scaffolding a 10-person engineering org would have**: code review standards, sprint cadence, decision archives, onboarding context — without hiring the org.
44
+ If you're a solo dev or small team using Claude Code (or Cursor, Codex, VS Code), rcode gives you the **scaffolding a 10-person engineering org would have**: code review standards, sprint cadence, decision archives, onboarding context — without hiring the org.
35
45
 
36
46
  ---
37
47
 
38
48
  ## What it actually is
39
49
 
50
+ <p align="center"><img src="brand/hero-org-in-folder.png" alt="rcode is an engineering org in a folder: agents, commands, workflows, and skills as plain markdown" width="760"></p>
51
+
40
52
  Three layers, specialised for software delivery:
41
53
 
42
54
  | Layer | What lives here | Example |
43
55
  |-------|-----------------|---------|
44
56
  | **Memory** | `.rcode/memory/` — git-tracked markdown, lossless distillates | "We chose Postgres over Mongo because of JSON-B + RLS — see ADR-007" |
45
- | **Skills** | `rcode/skills/` — 87 phrase-activated playbooks | `rcode-sprint-checker` validates file/symbol refs before execute |
57
+ | **Skills** | `rcode/skills/` — 88 phrase-activated playbooks | `rcode-sprint-checker` validates file/symbol refs before execute |
46
58
  | **Workflows** | `rcode/workflows/` — orchestrated multi-step paths | `/rcode-plan` runs research → planner → checker → confirm |
47
59
 
48
60
  Single agent navigates the structure. No LangChain, no AutoGen, no orchestrator process. Just folders the model can read.
@@ -84,10 +96,10 @@ What you won't get:
84
96
 
85
97
  I dogfood this hard, so the honest version:
86
98
 
87
- - **Not a chatbot wrapper.** Zero opinions about which LLM. Works with Claude Code, Cursor, Gemini, VS Code, Antigravity, Windsurf. Bring your own keys.
99
+ - **Not a chatbot wrapper.** Zero opinions about which LLM. Works with Claude Code, Cursor, Codex, VS Code, Antigravity, Windsurf. Bring your own keys.
88
100
  - **Not a multi-agent framework.** No agent-to-agent message bus. One agent reads markdown structure and navigates it.
89
101
  - **Not a no-code tool.** You will read markdown files. You will write commit messages. You will type slash commands.
90
- - **Not finished.** v4 is solid for solo and small-team work. Open issues are tracked at the [issues page](https://github.com/hanzlahabib/rihal-code/issues) — most P1 bugs get fixed within 48 hours of a dogfeed run.
102
+ - **Not finished.** v4 is solid for solo and small-team work. Open issues are tracked at the [issues page](https://github.com/hanzlahabib/rcode/issues) — most P1 bugs get fixed within 48 hours of a dogfeed run.
91
103
  - **Not replacing senior engineers.** It gives you their scaffolding (review standards, sprint hygiene, decision archives). You still need judgment for the hard calls.
92
104
 
93
105
  ---
@@ -100,13 +112,36 @@ I dogfood this hard, so the honest version:
100
112
  | **Specialist agents** | 1 generalist | Define in Python | Define in Python | 45 shipped |
101
113
  | **Install** | IDE extension | `pip install` + config | `pip install` + code | `pnpm dlx` — one command |
102
114
  | **Infrastructure** | Cloud API | Python server | Vector store + indexer | Zero — pure files |
103
- | **IDE lock-in** | Cursor only | Framework-specific | Framework-specific | Claude / Cursor / Gemini / VS Code / Antigravity / Windsurf |
115
+ | **IDE lock-in** | Cursor only | Framework-specific | Framework-specific | Claude / Cursor / Codex / VS Code / Antigravity / Windsurf |
104
116
  | **Auditability** | Chat scrollback | Tracing dashboard | Tracing dashboard | `git log` |
105
117
 
106
118
  The point isn't "I beat LangChain." The point is **you don't need LangChain for software delivery**. You need a methodology that survives session resets, and a methodology lives in files.
107
119
 
108
120
  ---
109
121
 
122
+ ## By the numbers
123
+
124
+ > **Marketing teams round up. This repo ships the script.** Every figure below is computed by [`benchmarks/facts.cjs`](benchmarks/facts.cjs) from files on disk and local CLI timings — no network, no LLM calls, no hand-entered numbers. Clone the repo and run it:
125
+ >
126
+ > ```bash
127
+ > node benchmarks/facts.cjs
128
+ > ```
129
+
130
+ <p align="center"><img src="brand/hero-receipt.png" alt="benchmarks/facts.cjs output — 497 tests, 0 failing · 45 agents · 116 commands · 1 runtime dependency, computed from files on disk" width="720"></p>
131
+
132
+ | Metric | Value | Why it's not a vanity number |
133
+ |---|---|---|
134
+ | **Portable methodology corpus** | **94,481 lines** of markdown | A 10-person eng org's playbooks (agents + commands + workflows + skills + references) — as files you own and grep, not a SaaS you rent. |
135
+ | **Automated tests** | **497**, 100% passing across 61 files | The methodology is *guarded*, not vibes. CI runs them on every push; `node --test` reproduces locally in seconds. |
136
+ | **Tested CLI engine** | **9,005 lines** (`rcode-tools.cjs` + `lib/`) | The deterministic brain — routing, state, planning math — is real code under test, not prompt soup. |
137
+ | **Runtime dependencies** | **1** (`ws`, for the dashboard socket) | The view-only dashboard is pure Node stdlib. Almost nothing to audit, nothing to CVE-scan, nothing to break on `npm install`. |
138
+ | **Specialist agents / commands / workflows / skills** | **45 / 116 / 129 / 88** | An entire engineering org, phrase-activated, that travels with you across Claude Code, Cursor, Codex, VS Code, Antigravity, Windsurf. |
139
+ | **Core-op latency** | **~33 ms**, **0 LLM tokens** (best-of-7) | Intent routing, state reads, and milestone-health are deterministic *local* compute — a few ms over Node's own cold-start floor. The orchestration layer doesn't burn API tokens on bookkeeping the way pure-LLM agent frameworks do. |
140
+
141
+ **The headline:** an entire software-delivery methodology — 94k lines of it — guarded by 497 tests, riding on a single runtime dependency, with an orchestration brain that costs **zero tokens** to think. Not a viral prompt. A system you can verify line by line.
142
+
143
+ ---
144
+
110
145
  ## Quickstart
111
146
 
112
147
  ```bash
@@ -117,7 +152,7 @@ pnpm dlx @hanzlaa/rcode install
117
152
  /rcode-init
118
153
  ```
119
154
 
120
- > **Don't have pnpm?** On Node 18+ / npm 11.x we recommend pnpm to avoid `npx` cache issues:
155
+ > **Don't have pnpm?** We recommend pnpm to avoid peer-dependency resolution issues on npm 11.x and `npx` cache issues:
121
156
  > `npm install -g pnpm`
122
157
 
123
158
  `/rcode-init` detects your project state (fresh / existing / returning) and routes to the right first action. For a greenfield project it auto-routes to `/rcode-new-project`.
@@ -159,9 +194,9 @@ The non-goal: building yet another agent framework. There are enough. rcode stay
159
194
 
160
195
  ## Honest state of things
161
196
 
162
- - **v4.0.0** is the current release — Memory Bank now ships populated by default, brain-pull is live, and 50+ bug fixes landed from the most recent 3-project dogfeed run.
197
+ - **v4.3.2** is the current release — Memory Bank now ships populated by default, brain-pull is live, and 50+ bug fixes landed from the most recent 3-project dogfeed run.
163
198
  - **Open issues**: ~50 — half are feature requests, the rest are backlog bugs ranked by severity.
164
- - **Test suite**: 339 automated tests across 58 files, 100% pass on every release. Coverage is structural (compliance + artifact schema + workflow behavioral), not line-coverage.
199
+ - **Test suite**: 497 automated tests across 61 files, 100% pass on every release (run `node --test`). Coverage is structural (compliance + artifact schema + workflow behavioral), not line-coverage.
165
200
  - **Real users**: I run it on 4 projects daily. A handful of others run it on theirs. If you find a bug, file it — most P1s ship within 48 hours.
166
201
  - **Funding**: none. This is solo work. If your company wants commercial support, [email me](mailto:hanzla.dev@gmail.com).
167
202
 
package/cli/doctor.js CHANGED
@@ -67,10 +67,17 @@ function checkCompliance(filePath) {
67
67
  if (!/^## Examples/m.test(content)) missing.push('Examples');
68
68
 
69
69
  // Negative-boundary clause (component 1 of the 5-component standard).
70
- // Parse the frontmatter description so folded-block YAML is normalized
71
- // before the regex runs "Do\n NOT" becomes "Do NOT" after normalization.
70
+ // Three valid locations, checked in order:
71
+ // a) frontmatter `not-for:` array with at least one entry (canonical YAML form)
72
+ // b) a boundary phrase in the frontmatter `description` field
73
+ // c) a "## Do NOT use" heading or "do not use/include" in the body
74
+ // Bug #874: only (b) and (c) were checked, missing skills that use (a).
75
+ const notForField = frontmatter['not-for'];
76
+ const hasNotForField =
77
+ Array.isArray(notForField) && notForField.length > 0;
72
78
  const desc = typeof frontmatter.description === 'string' ? frontmatter.description : '';
73
79
  const hasBoundary =
80
+ hasNotForField ||
74
81
  NEGATIVE_BOUNDARY_RE.test(desc) ||
75
82
  /##[^\n]*\bnot\b/i.test(body) ||
76
83
  /\bdo not (use|include)\b/i.test(body);
@@ -188,7 +195,18 @@ function runPreflight(cwd, packageRoot) {
188
195
  // 6. Agent manifest drift (only if .rcode/ is initialized — indicates installed editors)
189
196
  if (fs.existsSync(rcodeDir)) {
190
197
  const editors = [];
191
- if (fs.existsSync(path.join(cwd, '.claude/skills'))) editors.push('claude');
198
+ // Detect Claude install via flat .claude/commands/rcode-*.md (installer writes
199
+ // slash commands flat, not under a subdirectory) or .claude/skills as a fallback
200
+ // for legacy layouts. Bug #873: checking only .claude/skills missed fresh installs.
201
+ const claudeCommandsDir = path.join(cwd, '.claude/commands');
202
+ const hasClaudeFlatCommands =
203
+ fs.existsSync(claudeCommandsDir) &&
204
+ fs.readdirSync(claudeCommandsDir).some(
205
+ (f) => f.startsWith('rcode-') && f.endsWith('.md'),
206
+ );
207
+ if (hasClaudeFlatCommands || fs.existsSync(path.join(cwd, '.claude/skills'))) {
208
+ editors.push('claude');
209
+ }
192
210
  if (fs.existsSync(path.join(cwd, '.cursor/rules'))) editors.push('cursor');
193
211
  if (fs.existsSync(path.join(cwd, '.windsurf/rules'))) editors.push('windsurf');
194
212
  if (fs.existsSync(path.join(cwd, '.antigravity/agents'))) editors.push('antigravity');
package/cli/index.js CHANGED
@@ -64,6 +64,10 @@ Usage:
64
64
  init Alias for install
65
65
  update Refresh skill files (backs up .rcode/ state first)
66
66
  uninstall Remove rcode from the current project
67
+ --yes Skip confirmation prompts
68
+ --purge Remove everything: .rcode/ state, .planning/ scaffolds,
69
+ .claude/agents/rules/, .cursor/ rcode files,
70
+ .gitignore block, and .git/hooks/pre-commit
67
71
  remove Alias for uninstall
68
72
  nuke Wipe ALL rcode/rcode installs everywhere (global packages,
69
73
  binaries, ~/.claude/* rcode artifacts, ~/.rcode/, project artifacts)
@@ -116,7 +120,7 @@ Getting started:
116
120
  rcode tiers # see the Golden Path
117
121
  rcode set-profile # choose model profile (quality | balanced | budget)
118
122
 
119
- Documentation: https://github.com/hanzlahabib/rihal-code
123
+ Documentation: https://github.com/hanzlahabib/rcode
120
124
  `.trim());
121
125
  }
122
126
 
package/cli/install.js CHANGED
@@ -158,6 +158,9 @@ const ConfigSchema = z.object({
158
158
  git: z.object({
159
159
  branching_strategy: z.string().optional(),
160
160
  }).optional(),
161
+ // Declared for validation only — default ('every') lives in the hook (rcode-hooks.cjs prompt-router).
162
+ // Install does NOT write this key; the feature stays dormant until hooks are opted into via /rcode-enable-hooks.
163
+ prompt_nudge: z.enum(['every', 'once-per-intent', 'when-stale', 'off']).optional(),
161
164
  }).passthrough();
162
165
 
163
166
  /**
@@ -367,7 +370,7 @@ function printInstallHeader(targetVersion) {
367
370
  pc.cyan('│') + ' ' + dim('A persistent context-brain for your editor') + ' ' + pc.cyan('│'),
368
371
  pc.cyan('│') + ' ' + pc.cyan('│'),
369
372
  pc.cyan('│') + ' ' + dim('version ') + pc.green('v' + v) + ' ' + pc.cyan('│'),
370
- pc.cyan('│') + ' ' + dim('docs ') + 'github.com/hanzlahabib/rihal-code ' + pc.cyan('│'),
373
+ pc.cyan('│') + ' ' + dim('docs ') + 'github.com/hanzlahabib/rcode ' + pc.cyan('│'),
371
374
  pc.cyan('│') + ' ' + dim('by ') + 'Hanzla Habib' + ' ' + pc.cyan('│'),
372
375
  pc.cyan('│') + ' ' + pc.cyan('│'),
373
376
  pc.cyan('╰───────────────────────────────────────────────────────────╯'),
@@ -723,7 +726,7 @@ function seedStarterPlanning(target, projectName) {
723
726
  // planning artifacts. See issues #670 #671 #676.
724
727
  const STUB_BANNER =
725
728
  `<!-- INSTALL STUB — overwritten by /rcode-new-project. Delete this file or run\n` +
726
- ` /rcode-new-project before committing. See https://github.com/hanzlahabib/rihal-code/issues/670 -->\n\n`;
729
+ ` /rcode-new-project before committing. See https://github.com/hanzlahabib/rcode/issues/670 -->\n\n`;
727
730
 
728
731
  fs.writeFileSync(projectPath,
729
732
  STUB_BANNER +
@@ -2111,6 +2114,13 @@ async function installInner(opts) {
2111
2114
  // Codex installs to .claude/ and AGENTS.md; lifecycle via rcode workflow bridge.
2112
2115
  if (opts.ides.includes('codex')) {
2113
2116
  console.log(' ' + dim('Codex → installing to .claude/ paths + AGENTS.md. Use `rcode workflow show <name>` to feed workflows to Codex.'));
2117
+ // #908: /rcode-* slash commands in Codex are wired via the UserPromptSubmit
2118
+ // hook in ~/.codex/hooks.json, which installNativeHomeSlashCommands() only
2119
+ // writes on a GLOBAL install. A project-local install silently leaves Codex
2120
+ // with no working slash commands — warn instead of implying success.
2121
+ if (!opts.global) {
2122
+ console.log(' ' + warn('Codex /rcode-* slash commands need a GLOBAL install — re-run with `--global` to wire the ~/.codex/hooks.json router. This project-local install does NOT enable them.'));
2123
+ }
2114
2124
  }
2115
2125
 
2116
2126
  // Gemini IDE support deferred
@@ -2128,6 +2138,10 @@ async function installInner(opts) {
2128
2138
  if (opts.ides.includes('antigravity')) {
2129
2139
  console.log(' ' + warn('Antigravity install is experimental. Files land at .antigravity/rcode/{agents,commands}/.'));
2130
2140
  console.log(' ' + dim('If Antigravity expects a different path, adjust .rcode/config.yaml and re-run.'));
2141
+ // #908: same as Codex — the UserPrompt hook is only wired on a global install.
2142
+ if (!opts.global) {
2143
+ console.log(' ' + warn('Antigravity /rcode-* slash commands need a GLOBAL install — re-run with `--global`. This project-local install does NOT wire the hook.'));
2144
+ }
2131
2145
  }
2132
2146
 
2133
2147
  // Validate requested modules exist
@@ -134,7 +134,7 @@ More:
134
134
  rcode help # all commands (grouped)
135
135
  rcode dashboard # view-only Diwan on :7717
136
136
 
137
- Docs: https://github.com/hanzlahabib/rihal-code
137
+ Docs: https://github.com/hanzlahabib/rcode
138
138
  `);
139
139
  }
140
140
 
package/cli/uninstall.js CHANGED
@@ -949,17 +949,59 @@ async function runUninstall(args) {
949
949
  // Notice about what was intentionally preserved (#876 — never delete user data silently)
950
950
  const rcodeStillExists = plan.stateDir && fs.existsSync(path.join(cwd, '.rcode'));
951
951
  const planningStillExists = !opts.purge && fs.existsSync(path.join(cwd, '.planning'));
952
- if (rcodeStillExists || planningStillExists) {
952
+ const agentsRulesStillExists = !opts.purge && fs.existsSync(path.join(cwd, '.claude/agents/rules'));
953
+ // Only flag .cursor/ as residue if rcode files are still inside it — the dir
954
+ // may exist for unrelated Cursor user config that was never touched by rcode.
955
+ const cursorStillExists = !opts.purge && (() => {
956
+ const rulesDir = path.join(cwd, '.cursor/rules');
957
+ if (!fs.existsSync(rulesDir)) return false;
958
+ try {
959
+ return fs.readdirSync(rulesDir).some(
960
+ (f) => f.startsWith('rcode-') || f === 'rcode.mdc' || f === 'rcode-method.mdc' || f === 'rcode',
961
+ );
962
+ } catch { return false; }
963
+ })();
964
+ const gitignoreBlockStillExists = !opts.purge && (() => {
965
+ try {
966
+ const gi = path.join(cwd, '.gitignore');
967
+ if (!fs.existsSync(gi)) return false;
968
+ const txt = fs.readFileSync(gi, 'utf8');
969
+ return txt.includes('# ===== rcode-managed gitignore block') || txt.includes('# >>> rcode >>>');
970
+ } catch { return false; }
971
+ })();
972
+ // Only flag pre-commit as residue if the rcode block is still present inside
973
+ // it — the hook file may exist for user-written scripts unrelated to rcode.
974
+ const preCommitStillExists = !opts.purge && (() => {
975
+ const hookPath = path.join(cwd, '.git/hooks/pre-commit');
976
+ if (!fs.existsSync(hookPath)) return false;
977
+ try {
978
+ return fs.readFileSync(hookPath, 'utf8').includes('# ===== rcode-managed pre-commit block =====');
979
+ } catch { return false; }
980
+ })();
981
+
982
+ if (rcodeStillExists || planningStillExists || agentsRulesStillExists || cursorStillExists || gitignoreBlockStillExists || preCommitStillExists) {
953
983
  console.log();
954
- console.log(`ℹ Preserved (your project data not removed by default):`);
984
+ console.log(`ℹ Preserved (use --purge to remove all of these):`);
955
985
  if (rcodeStillExists) {
956
- console.log(` .rcode/ phases, decisions, progress, config`);
957
- console.log(` /rcode-init will detect this on reinstall`);
986
+ console.log(` .rcode/ project state, config, decisions`);
958
987
  }
959
988
  if (planningStillExists) {
960
- console.log(` .planning/ planning scaffolds (ROADMAP, STATE, PROJECT)`);
989
+ console.log(` .planning/ ROADMAP, STATE, PROJECT scaffolds`);
961
990
  }
962
- console.log(` To remove these on next uninstall: rcode uninstall --purge`);
991
+ if (agentsRulesStillExists) {
992
+ console.log(` .claude/agents/rules/ agent rule files`);
993
+ }
994
+ if (cursorStillExists) {
995
+ console.log(` .cursor/ Cursor IDE integration`);
996
+ }
997
+ if (gitignoreBlockStillExists) {
998
+ console.log(` .gitignore rcode-managed block still present`);
999
+ }
1000
+ if (preCommitStillExists) {
1001
+ console.log(` .git/hooks/ pre-commit hook still present`);
1002
+ }
1003
+ console.log();
1004
+ console.log(` Full cleanup: rcode uninstall --purge`);
963
1005
  }
964
1006
 
965
1007
  // IDE cache reload hint — Claude Code caches the slash-command list in memory.