sinapse-ai 1.25.1 → 1.25.3

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 (36) hide show
  1. package/.sinapse-ai/data/entity-registry.yaml +39 -14
  2. package/.sinapse-ai/install-manifest.yaml +3 -3
  3. package/CHANGELOG.md +2 -8
  4. package/README.en.md +38 -30
  5. package/README.md +33 -25
  6. package/bin/commands/install.js +6 -2
  7. package/bin/commands/update.js +6 -2
  8. package/bin/lib/command-generator.js +60 -36
  9. package/bin/lib/global-provider-adapters.js +244 -49
  10. package/bin/lib/provider-contract.js +23 -0
  11. package/bin/lib/provider-parity.js +60 -9
  12. package/docs/getting-started.md +13 -5
  13. package/docs/guides/codex-config.md +35 -51
  14. package/docs/guides/ide-integration.md +22 -23
  15. package/docs/guides/project-status-feature.md +35 -55
  16. package/docs/guides/user-guide.md +21 -10
  17. package/docs/installation/README.md +4 -4
  18. package/docs/installation/faq.md +84 -70
  19. package/docs/installation/linux.md +11 -14
  20. package/docs/installation/macos.md +10 -4
  21. package/docs/installation/troubleshooting.md +10 -4
  22. package/docs/installation/v4-quick-start.md +13 -13
  23. package/docs/installation/windows.md +11 -15
  24. package/docs/pt/guides/project-status-feature.md +35 -55
  25. package/docs/pt/guides/user-guide.md +21 -11
  26. package/docs/pt/installation/README.md +2 -4
  27. package/docs/pt/installation/faq.md +54 -89
  28. package/docs/pt/installation/linux.md +9 -27
  29. package/docs/pt/installation/macos.md +8 -12
  30. package/docs/pt/installation/troubleshooting.md +10 -8
  31. package/docs/pt/installation/v4-quick-start.md +16 -16
  32. package/docs/pt/installation/windows.md +8 -21
  33. package/docs/troubleshooting.md +9 -7
  34. package/package.json +1 -1
  35. package/scripts/validate-article-vii.js +305 -20
  36. package/scripts/validate-install-docs.js +87 -3
@@ -1,7 +1,7 @@
1
1
  metadata:
2
2
  version: 1.0.0
3
- lastUpdated: '2026-07-15T08:35:27.084Z'
4
- entityCount: 817
3
+ lastUpdated: '2026-07-15T14:30:07.448Z'
4
+ entityCount: 818
5
5
  checksumAlgorithm: sha256
6
6
  resolutionRate: 100
7
7
  entities:
@@ -166,8 +166,8 @@ entities:
166
166
  score: 0.7
167
167
  constraints: []
168
168
  extensionPoints: []
169
- checksum: sha256:1f385982ca84a8232f3f6b1fce4257ca3971a5fd24830b5389477f9a5a8e943a
170
- lastVerified: '2026-07-15T08:12:47.676Z'
169
+ checksum: sha256:86db5a2578b6a0b4849fde4e0f4a197a41560a3a213b247f0edd8522d857ffea
170
+ lastVerified: '2026-07-15T13:41:11.702Z'
171
171
  local:
172
172
  path: bin/commands/local.js
173
173
  layer: L1
@@ -276,8 +276,8 @@ entities:
276
276
  score: 0.7
277
277
  constraints: []
278
278
  extensionPoints: []
279
- checksum: sha256:b51998a172a91e134330847185c078d317ed9be2da6746de3af18d209b7e08d9
280
- lastVerified: '2026-07-15T08:12:47.677Z'
279
+ checksum: sha256:05056e197ecb29e6f63a1d86d9d77d944e3083021bf632b48a76eb4cb2223b95
280
+ lastVerified: '2026-07-15T13:41:11.703Z'
281
281
  command-generator:
282
282
  path: bin/lib/command-generator.js
283
283
  layer: L1
@@ -299,6 +299,7 @@ entities:
299
299
  - constants
300
300
  - squads
301
301
  - fs-utils
302
+ - provider-contract
302
303
  externalDeps: []
303
304
  plannedDeps: []
304
305
  lifecycle: production
@@ -306,8 +307,8 @@ entities:
306
307
  score: 0.7
307
308
  constraints: []
308
309
  extensionPoints: []
309
- checksum: sha256:ed3f86d0349e4a709240728c0872bf44c3ebb2f1b8f3522c83e2f43c9b8c5647
310
- lastVerified: '2026-07-15T02:37:43.455Z'
310
+ checksum: sha256:837f10f3ce227b1f3ff9b3d4c9e824e8928cd67ec07b0dcebd78e85468eed003
311
+ lastVerified: '2026-07-15T13:41:11.703Z'
311
312
  constants:
312
313
  path: bin/lib/constants.js
313
314
  layer: L1
@@ -413,7 +414,8 @@ entities:
413
414
  usedBy:
414
415
  - install
415
416
  - update
416
- dependencies: []
417
+ dependencies:
418
+ - provider-contract
417
419
  externalDeps: []
418
420
  plannedDeps: []
419
421
  lifecycle: production
@@ -421,8 +423,8 @@ entities:
421
423
  score: 0.7
422
424
  constraints: []
423
425
  extensionPoints: []
424
- checksum: sha256:d28b19935a9c75408df9da7430fc3ca9568bdea0cfc1ae3c01d0025ad19fc2a3
425
- lastVerified: '2026-07-15T07:09:56.286Z'
426
+ checksum: sha256:898fbe5a00cf1bb77bc8e8a34ee40337145912374a2e809789a02d5345fdd679
427
+ lastVerified: '2026-07-15T14:30:07.273Z'
426
428
  header:
427
429
  path: bin/lib/header.js
428
430
  layer: L1
@@ -475,6 +477,28 @@ entities:
475
477
  extensionPoints: []
476
478
  checksum: sha256:dc7cc1109f2bbdb7b3c5927df0de2418925842bdacdc0ba82815bfa2783d0b42
477
479
  lastVerified: '2026-06-22T02:41:18.152Z'
480
+ provider-contract:
481
+ path: bin/lib/provider-contract.js
482
+ layer: L1
483
+ type: script
484
+ purpose: Entity at bin\lib\provider-contract.js
485
+ keywords:
486
+ - provider
487
+ - contract
488
+ usedBy:
489
+ - command-generator
490
+ - global-provider-adapters
491
+ - provider-parity
492
+ dependencies: []
493
+ externalDeps: []
494
+ plannedDeps: []
495
+ lifecycle: production
496
+ adaptability:
497
+ score: 0.7
498
+ constraints: []
499
+ extensionPoints: []
500
+ checksum: sha256:a18d271a73b2f371213af4d9503e302e9237920057afd521b723c96efd28fda0
501
+ lastVerified: '2026-07-15T13:41:11.704Z'
478
502
  provider-parity:
479
503
  path: bin/lib/provider-parity.js
480
504
  layer: L1
@@ -486,7 +510,8 @@ entities:
486
510
  usedBy:
487
511
  - install
488
512
  - update
489
- dependencies: []
513
+ dependencies:
514
+ - provider-contract
490
515
  externalDeps: []
491
516
  plannedDeps: []
492
517
  lifecycle: production
@@ -494,8 +519,8 @@ entities:
494
519
  score: 0.7
495
520
  constraints: []
496
521
  extensionPoints: []
497
- checksum: sha256:592206326a2a3c5a3d89068d9ef065d698562aef40e6096d971fb793cea11c97
498
- lastVerified: '2026-07-15T08:35:26.859Z'
522
+ checksum: sha256:5f0ff4517425fef01683f035afef1d139aede2fe47956773a398e7c761ace42d
523
+ lastVerified: '2026-07-15T13:41:11.704Z'
499
524
  setup-statusline:
500
525
  path: bin/lib/setup-statusline.js
501
526
  layer: L1
@@ -7,7 +7,7 @@
7
7
  # - SHA256 hashes for change detection
8
8
  # - File types for categorization
9
9
  #
10
- version: 1.25.1
10
+ version: 1.25.3
11
11
  generator: scripts/generate-install-manifest.js
12
12
  file_count: 1156
13
13
  files:
@@ -1368,9 +1368,9 @@ files:
1368
1368
  type: data
1369
1369
  size: 9671
1370
1370
  - path: data/entity-registry.yaml
1371
- hash: sha256:ed0919b2bc3479beb4e46d3ccfbbbda66e46161c7eebc9018b9f0c8e5278d7f1
1371
+ hash: sha256:08edc9d3cde1bf956cce462004670a3d2924a691a16c27bdfd2bf1ce4de037f8
1372
1372
  type: data
1373
- size: 559991
1373
+ size: 560701
1374
1374
  - path: data/learned-patterns.yaml
1375
1375
  hash: sha256:1a4cd045c087b9dfd7046ff1464a9d2edb85fba77cf0b6fba14f4bb9004c741e
1376
1376
  type: data
package/CHANGELOG.md CHANGED
@@ -1,14 +1,8 @@
1
- ## [1.25.1](https://github.com/caioimori/sinapse-ai/compare/1.25.0...1.25.1) (2026-07-15)
1
+ ## [1.25.3](https://github.com/caioimori/sinapse-ai/compare/1.25.2...1.25.3) (2026-07-15)
2
2
 
3
3
  ### Bug Fixes
4
4
 
5
- * **ci:** derive Codex skill count from payload [Story sinapse-only-catalog-cleanup] ([e371a0d](https://github.com/caioimori/sinapse-ai/commit/e371a0ddf9daf944ca803a75dac9807b89d8e257))
6
- * **installer:** enforce conservative provider ownership [Story sinapse-only-catalog-cleanup] ([1b4f896](https://github.com/caioimori/sinapse-ai/commit/1b4f896d520a02124dc3107c604106f8ba8c8fae))
7
- * **installer:** harden ownership and hook validation [Story sinapse-only-catalog-cleanup] ([4575a84](https://github.com/caioimori/sinapse-ai/commit/4575a84d6062feb8198e9480f15365e6218b7e61))
8
- * **installer:** preserve provider-owned state [Story sinapse-only-catalog-cleanup] ([df67e88](https://github.com/caioimori/sinapse-ai/commit/df67e8836e4f2f42a2cb075d6063a01e0b8ad4c6))
9
- * **installer:** reconcile provider-native catalogs [Story sinapse-only-catalog-cleanup] ([830b36c](https://github.com/caioimori/sinapse-ai/commit/830b36c8108610de2067d09426bfd7e13d315672))
10
- * **security:** harden managed file reconciliation [Story sinapse-only-catalog-cleanup] ([3899921](https://github.com/caioimori/sinapse-ai/commit/3899921579851a6490e4866e7284ed88afe67c92))
11
- * **test:** resolve Bash paths across Windows runtimes [Story sinapse-only-catalog-cleanup] ([a788b04](https://github.com/caioimori/sinapse-ai/commit/a788b0434f9718eb74c1caa6dc0ae091ea4dac65))
5
+ * **installer:** restore provider adapter parity ([#385](https://github.com/caioimori/sinapse-ai/issues/385)) ([4c5c9fb](https://github.com/caioimori/sinapse-ai/commit/4c5c9fb1a60e5d8610da08f25f6f01a67a85a063))
12
6
 
13
7
  # Changelog
14
8
 
package/README.en.md CHANGED
@@ -19,9 +19,9 @@
19
19
 
20
20
  ## What is SINAPSE?
21
21
 
22
- SINAPSE is an open-source meta-framework that organizes **172 AI agents into 17 specialized squads**, operating directly in the terminal via Claude Code or Codex CLI. Each agent has a defined role, each squad masters a discipline, and the entire system is governed by a **Constitution with real enforcement** -- 17 active hooks that block violations at runtime.
22
+ SINAPSE is an open-source meta-framework that organizes **172 AI agents into 17 specialized squads**, operating directly in the terminal via Claude Code or Codex CLI. Each agent has a defined role, each squad masters a discipline, and the entire system is governed by a **Constitution with real enforcement** -- 20 registered Claude Code hooks and 9 Codex lifecycle events through the compatibility bridge.
23
23
 
24
- The core concept is simple: instead of a single AI assistant trying to do everything, SINAPSE structures work into specialized teams. A branding squad handles visual identity. A cybersecurity squad handles compliance and pentesting. A copywriting squad handles persuasion and conversion. Each with its own knowledge base, workflows, and tasks -- totaling **1,200 executable tasks** ready to use.
24
+ The core concept is simple: instead of a single AI assistant trying to do everything, SINAPSE structures work into specialized teams. A branding squad handles visual identity. A cybersecurity squad handles compliance and pentesting. A copywriting squad handles persuasion and conversion. The runtime measures **1,412 task files**: **1,201 squad tasks** and **211 development tasks**. Of those files, **1,348 pointers are resolvable** by real agents.
25
25
 
26
26
  Unlike tools that just chat with AI, SINAPSE enforces discipline. The **Documentation-First** pipeline requires a story to be created and validated before any code is written. Quality gates run automatically before merge. Unauthorized agents are blocked from pushing. All via hooks that intercept operations in real time -- not after the fact.
27
27
 
@@ -33,7 +33,7 @@ Generative AI has a known problem: the more you ask of it, the worse it gets. A
33
33
 
34
34
  SINAPSE solves this the way human teams solve it: **coordinated specialization**. Instead of one tired generalist, you have 172 agents in 17 squads, each with a defined role, its own knowledge base, and executable tasks. An orchestrator routes your request to whoever actually knows how to solve it -- automatically, without you needing to memorize agent names or commands.
35
35
 
36
- The differential isn't just the quantity of agents. It's **real governance**: 17 active hooks intercept operations at runtime, a Constitution with 11 articles governs the framework, and 7 of those articles are NON-NEGOTIABLE -- violations are blocked before execution, not detected afterwards. **Speed with rigor, without choosing between the two.**
36
+ The differential isn't just the quantity of agents. It's **real governance**: 20 Claude Code hook registrations and 9 Codex lifecycle events intercept operations at runtime, a Constitution with 11 articles governs the framework, and 7 of those articles are NON-NEGOTIABLE -- violations are blocked before execution, not detected afterwards. **Speed with rigor, without choosing between the two.**
37
37
 
38
38
  ---
39
39
 
@@ -55,9 +55,18 @@ npx sinapse-ai doctor
55
55
 
56
56
  ### 3. Activate your first agent
57
57
 
58
+ Claude Code:
59
+
60
+ ```text
61
+ @developer
62
+ *help
58
63
  ```
59
- @developer # Activate the development agent
60
- *help # List available commands
64
+
65
+ Codex:
66
+
67
+ ```text
68
+ $snps
69
+ $sinapse-agent developer
61
70
  ```
62
71
 
63
72
  Done. You have 17 squads operating in your terminal.
@@ -174,7 +183,7 @@ Deny rules in `.claude/settings.json` enforce this deterministically. **Framewor
174
183
 
175
184
  ### Constitution
176
185
 
177
- SINAPSE is governed by a formal Constitution with 11 articles and 17 enforcement hooks:
186
+ SINAPSE is governed by a formal Constitution with 11 articles and provider-specific enforcement surfaces: 20 Claude Code hook registrations and 9 Codex lifecycle events.
178
187
 
179
188
  | Article | Principle | Severity |
180
189
  |---------|-----------|----------|
@@ -213,7 +222,7 @@ SINAPSE includes 12 core agents covering the complete development cycle:
213
222
  | `devops` | **Pipeline** | CI/CD, git push (exclusive), releases |
214
223
  | `squad-creator` | **Loom** | New squad creation |
215
224
 
216
- Activate any agent with `@agent-name` and use `*help` to see its commands.
225
+ In Claude Code, activate an agent with `@agent-name` and use `*help` to see its commands. In Codex, start with `$snps` for routing or use `$sinapse-agent agent-id` for direct activation.
217
226
 
218
227
  ### Development Workflow
219
228
 
@@ -263,15 +272,19 @@ Each squad is an autonomous team with its own orchestrator, specialist agents, k
263
272
  | **squad-growth** | Analytics, CRO, SEO, growth hacking | 7 |
264
273
  | **squad-finance** | Budget, pricing, profitability analysis | 8 |
265
274
 
266
- **Total: 17 squads, 172 specialized agents, 1,201 tasks**
275
+ **Total: 17 squads, 172 specialized agents, and 1,412 task files** (**1,201 squad tasks + 211 development tasks; 1,348 resolvable pointers**)
267
276
 
268
- Activate any squad via its orchestrator:
277
+ Activate any squad via its orchestrator using the provider-native syntax:
269
278
 
270
- ```
279
+ ```text
280
+ # Claude Code
271
281
  @brand-orqx # Brand squad
272
282
  @copy-orqx # Copy squad
273
- @cyber-orqx # Cybersecurity squad
274
- @research-orqx # Research squad
283
+
284
+ # Codex
285
+ $sinapse-agent brand-orqx
286
+ $sinapse-agent copy-orqx
287
+ $snps # Route through the primary orchestrator
275
288
  ```
276
289
 
277
290
  The orchestrator receives your request and automatically delegates to the right specialist within the squad.
@@ -285,27 +298,22 @@ SINAPSE supports two IDEs with deep integrations:
285
298
  | IDE | Activation | Highlights |
286
299
  |-----|------------|------------|
287
300
  | **Claude Code** | `@agent-name` | Hooks, contextual rules, deny/allow, Chrome Brain |
288
- | **Codex CLI** | `/skills` or `$skill-name` | Native skills, multi-model, `codex exec` for CI/CD |
301
+ | **Codex CLI** | `$snps` or `$sinapse-agent agent-id` | Native skills, multi-model, `codex exec` for CI/CD |
289
302
 
290
303
  Both IDEs have access to all 17 squads, 172 agents, workflows, and knowledge bases. The installer detects and configures automatically.
291
304
 
292
305
  ### Parity Table
293
306
 
294
- | Feature | Claude Code | Codex CLI |
295
- |---------|:-----------:|:---------:|
296
- | Agent activation (@agent) | Full | Full |
297
- | Constitutional hooks (20) | Full | Partial (5) |
298
- | Story-driven development | Full | Full |
299
- | Quality gates | Full | Full |
300
- | Delegation enforcement | Full | Partial |
301
- | Secret scanning | Full | Manual |
302
- | CodeRabbit integration | Full | N/A |
303
- | Skills system | Full | Commands |
304
- | MCP servers | Full | N/A |
305
- | Terminal Bus | Full | N/A |
306
-
307
- **Claude Code** for the most integrated and automated experience.
308
- **Codex CLI** for model flexibility and CI/CD automation.
307
+ | Measured surface | Claude Code | Codex CLI |
308
+ |------------------|:-----------:|:---------:|
309
+ | Native agents | 172 | 172 |
310
+ | Direct activation | `@agent-name` | `$sinapse-agent agent-id` |
311
+ | Primary routing | `@sinapse-orqx` | `$snps` |
312
+ | Installed skills | 36 | 37 |
313
+ | Registered hooks | 20 native registrations | 9 lifecycle events through the bridge |
314
+ | Validation source | `npm run validate:providers` | `npm run validate:codex-native` |
315
+
316
+ Both providers resolve the same agents, tasks, workflows, and knowledge bases. Their activation and hook surfaces are different native adapters validated independently by the parity gate.
309
317
 
310
318
  ---
311
319
 
@@ -335,7 +343,7 @@ If you identify with the first group, you're in the right place.
335
343
 
336
344
  ### Constitutional Enforcement
337
345
 
338
- SINAPSE doesn't just document rules -- it enforces them with **17 active hooks**:
346
+ SINAPSE doesn't just document rules -- Claude Code uses **20 registered hooks**, while Codex exposes **9 lifecycle events** through the compatibility bridge:
339
347
 
340
348
  - `enforce-git-push-authority.sh` -- blocks push by unauthorized agents
341
349
  - `enforce-story-gate.cjs` -- blocks code without a validated story
@@ -400,7 +408,7 @@ npx sinapse-ai doctor --dry-run # Show what `--fix` would do without applying
400
408
  npx sinapse-ai chrome-brain install # Install browser automation
401
409
  ```
402
410
 
403
- All commands are safe to re-run. To list active agents after installing, open Claude Code or Codex CLI and type `@` to autocomplete.
411
+ All commands are safe to re-run. After installing, use `@agent-name` in Claude Code or `$snps` / `$sinapse-agent agent-id` in Codex.
404
412
 
405
413
  ---
406
414
 
package/README.md CHANGED
@@ -23,7 +23,7 @@
23
23
 
24
24
  SINAPSE é um meta-framework open source que organiza **172 agentes de IA em 17 squads especializados**, operando direto no terminal via Claude Code ou Codex CLI. Cada agente tem um papel definido, cada squad domina uma disciplina, e o sistema inteiro é governado por uma **Constitution com enforcement real** — 20 hooks registrados que bloqueiam violações em tempo de execução.
25
25
 
26
- O conceito central é simples: em vez de um único assistente de IA tentando fazer tudo, o SINAPSE estrutura o trabalho em equipes especializadas. Um squad de branding cuida da identidade visual. Um squad de cybersecurity cuida de compliance e pentest. Um squad de copywriting cuida de persuasão e conversão. Cada um com sua própria knowledge base, workflows e tasks totalizando **1.201 tasks executáveis** prontas para uso, distribuídas pelos 17 squads.
26
+ O conceito central é simples: em vez de um único assistente de IA tentando fazer tudo, o SINAPSE estrutura o trabalho em equipes especializadas. Um squad de branding cuida da identidade visual. Um squad de cybersecurity cuida de compliance e pentest. Um squad de copywriting cuida de persuasão e conversão. Cada um com sua própria knowledge base, workflows e tasks. O runtime mede **1.412 task files**: **1.201 squad tasks** nos 17 squads e **211 development tasks**. Desses arquivos, **1.348 são resolvíveis** pelos ponteiros reais dos agentes.
27
27
 
28
28
  Diferente de ferramentas que apenas conversam com IA, o SINAPSE impõe disciplina. O pipeline **Documentation-First** exige que uma story seja criada e validada antes de qualquer linha de código. Quality gates rodam automaticamente antes de merge. Agentes não autorizados são bloqueados de fazer push. Tudo isso via hooks que interceptam operações em tempo real — não depois.
29
29
 
@@ -63,9 +63,18 @@ Se algo estiver fora do lugar, `doctor --fix` corrige automaticamente.
63
63
 
64
64
  ### 3. Ative seu primeiro agente
65
65
 
66
+ Claude Code:
67
+
68
+ ```text
69
+ @developer
70
+ *help
66
71
  ```
67
- @developer # Ativa o agente de desenvolvimento
68
- *help # Lista comandos disponíveis
72
+
73
+ Codex:
74
+
75
+ ```text
76
+ $snps
77
+ $sinapse-agent developer
69
78
  ```
70
79
 
71
80
  Pronto. Você tem 17 squads operando no seu terminal.
@@ -235,7 +244,7 @@ O SINAPSE inclui 12 agentes core que cobrem o ciclo completo de desenvolvimento:
235
244
  | `devops` | **Pipeline** | CI/CD, git push (exclusivo), releases |
236
245
  | `squad-creator` | **Loom** | Criação de novos squads |
237
246
 
238
- Ative qualquer agente com `@agent-name` e use `*help` para ver seus comandos.
247
+ No Claude Code, ative um agente com `@agent-name` e use `*help` para ver seus comandos. No Codex, comece com `$snps` para roteamento ou use `$sinapse-agent agent-id` para ativação direta.
239
248
 
240
249
  ### Workflow de Desenvolvimento
241
250
 
@@ -285,15 +294,19 @@ Cada squad é uma equipe autônoma com orquestrador, agentes especialistas, know
285
294
  | **squad-growth** | Analytics, CRO, SEO, growth hacking | 7 |
286
295
  | **squad-finance** | Budget, pricing, profitability analysis | 8 |
287
296
 
288
- **Total: 17 squads, 172 agentes especializados, 1.201 tasks**
297
+ **Total: 17 squads, 172 agentes especializados e 1.412 task files** (**1.201 squad tasks + 211 development tasks; 1.348 ponteiros resolvíveis**)
289
298
 
290
- Cada squad é ativado via seu orquestrador:
299
+ Cada squad é ativado via seu orquestrador, com a sintaxe nativa do provedor:
291
300
 
292
- ```
301
+ ```text
302
+ # Claude Code
293
303
  @brand-orqx # Squad de brand
294
304
  @copy-orqx # Squad de copy
295
- @cyber-orqx # Squad de cybersecurity
296
- @research-orqx # Squad de research
305
+
306
+ # Codex
307
+ $sinapse-agent brand-orqx
308
+ $sinapse-agent copy-orqx
309
+ $snps # Roteamento pelo orquestrador principal
297
310
  ```
298
311
 
299
312
  O orquestrador recebe seu pedido e delega automaticamente ao especialista correto dentro do squad.
@@ -306,28 +319,23 @@ O SINAPSE suporta duas IDEs com integrações profundas:
306
319
 
307
320
  | IDE | Ativação | Destaques |
308
321
  |-----|----------|-----------|
309
- | **Claude Code** | `@agent-name` ou `/skill-name` | Subagentes e skills nativos, hooks e rules contextuais |
322
+ | **Claude Code** | `@agent-name` | Subagentes e skills nativos, hooks e rules contextuais |
310
323
  | **Codex CLI** | `$snps` ou `$sinapse-agent agent-id` | Agentes TOML, skills nativas e `codex exec` para CI/CD |
311
324
 
312
325
  Ambas as IDEs têm acesso a todos os 17 squads, 172 agentes, workflows e knowledge bases. O installer detecta e configura automaticamente.
313
326
 
314
327
  ### Tabela de Paridade
315
328
 
316
- | Funcionalidade | Claude Code | Codex CLI |
317
- |---------------|:-----------:|:---------:|
318
- | Ativação dos 172 agentes | `@agent-name` | `$sinapse-agent agent-id` |
319
- | Hooks constitucionais (20) | Completo | Parcial (5) |
320
- | Story-driven development | Completo | Completo |
321
- | Quality gates | Completo | Completo |
322
- | Enforcement de delegação | Completo | Parcial |
323
- | Secret scanning | Completo | Manual |
324
- | Integração CodeRabbit | Completo | N/A |
325
- | Sistema de skills | Completo | Comandos |
326
- | MCP servers | Completo | N/A |
327
- | Terminal Bus | Completo | N/A |
328
-
329
- **Claude Code** para a experiência mais integrada e automatizada.
330
- **Codex CLI** para flexibilidade de modelo e automação CI/CD.
329
+ | Superfície medida | Claude Code | Codex CLI |
330
+ |-------------------|:-----------:|:---------:|
331
+ | Agentes nativos | 172 | 172 |
332
+ | Ativação direta | `@agent-name` | `$sinapse-agent agent-id` |
333
+ | Roteamento principal | `@sinapse-orqx` | `$snps` |
334
+ | Skills instaladas | 36 | 37 |
335
+ | Hooks registrados | 20 registros nativos | 9 eventos de lifecycle via bridge |
336
+ | Fonte de validação | `npm run validate:providers` | `npm run validate:codex-native` |
337
+
338
+ Os dois providers resolvem os mesmos agents, tasks, workflows e knowledge bases. As superfícies de ativação e hooks são adapters nativos diferentes e são validadas separadamente pelo gate de paridade.
331
339
 
332
340
  ---
333
341
 
@@ -560,7 +560,7 @@ function installFatalPhases({ squads, squadsDir, isUpsert, llmChoice, existing,
560
560
  // Phase 2: Generate agent commands (shared with `update` via command-generator).
561
561
  logger.always(`\n${CYAN}Phase 2:${NC} Generating agent commands`);
562
562
  const commandStagingDir = getGlobalCommandStagingDir({ llmChoice, sinapseHome: SINAPSE_HOME, claudeCommandsDir: CLAUDE_COMMANDS_DIR });
563
- const { writtenAgents, totalAgents } = regenerateAgentCommands({
563
+ const { writtenAgents, canonicalAgents } = regenerateAgentCommands({
564
564
  sinapseHome: SINAPSE_HOME,
565
565
  commandsDir: commandStagingDir,
566
566
  squads,
@@ -571,7 +571,11 @@ function installFatalPhases({ squads, squadsDir, isUpsert, llmChoice, existing,
571
571
 
572
572
  // Phase 2b: Install global agents based on LLM choice
573
573
  const globalAdapters = deliverGlobalProviderAdapters({ llmChoice, home: HOME, commandsDir: commandStagingDir });
574
- const activeAgentCount = assertProviderAdapterParity(llmChoice, globalAdapters, totalAgents);
574
+ const activeAgentCount = assertProviderAdapterParity(
575
+ llmChoice,
576
+ globalAdapters,
577
+ canonicalAgents,
578
+ );
575
579
  const installedAgentFilenames = new Set([...globalAdapters.claude, ...globalAdapters.codex]);
576
580
  const installedIdes = [];
577
581
  if (globalAdapters.claude.length) installedIdes.push('claude-code');
@@ -170,7 +170,7 @@ async function cmdUpdateGlobal() {
170
170
  logger.always(`\n${CYAN}Phase 2:${NC} Regenerating commands`);
171
171
  const commandStagingDir = getGlobalCommandStagingDir({ llmChoice, sinapseHome: SINAPSE_HOME, claudeCommandsDir: CLAUDE_COMMANDS_DIR });
172
172
  rmDirSync(commandStagingDir);
173
- const { writtenAgents, totalAgents } = regenerateAgentCommands({
173
+ const { writtenAgents, canonicalAgents, totalAgents } = regenerateAgentCommands({
174
174
  sinapseHome: SINAPSE_HOME,
175
175
  commandsDir: commandStagingDir,
176
176
  squads,
@@ -181,7 +181,11 @@ async function cmdUpdateGlobal() {
181
181
 
182
182
  // Phase 2b: Install global agents based on LLM choice
183
183
  const globalAdapters = deliverGlobalProviderAdapters({ llmChoice, home: HOME, commandsDir: commandStagingDir });
184
- const activeAgentCount = assertProviderAdapterParity(llmChoice, globalAdapters, totalAgents);
184
+ const activeAgentCount = assertProviderAdapterParity(
185
+ llmChoice,
186
+ globalAdapters,
187
+ canonicalAgents,
188
+ );
185
189
  if (globalAdapters.claude.length) logger.always(` ${GREEN}OK${NC} Claude Code global agents (${globalAdapters.claude.length})`);
186
190
  if (globalAdapters.codex.length) logger.always(` ${GREEN}OK${NC} Codex global agents (${globalAdapters.codex.length} TOML, ${globalAdapters.skills.length} skills)`);
187
191
 
@@ -20,6 +20,7 @@ const { toForwardSlash, atomicWriteFileSync } = require('./fs-utils');
20
20
  // sync-counts uses so the master-stub headline can never drift from README/persona
21
21
  // (Constitution Article VII). Fails open to 0 if the dir is unavailable.
22
22
  const CORE_AGENTS_DIR = path.join(ROOT, '.sinapse-ai', 'development', 'agents');
23
+ const { MASTER_ALIAS_ENTRY_POINTS } = require('./provider-contract');
23
24
 
24
25
  function countCoreAgents(dir = CORE_AGENTS_DIR) {
25
26
  try {
@@ -207,7 +208,7 @@ If the task requires expertise outside this squad:
207
208
  * @param {string} [deps.commandsDir] - Target commands dir.
208
209
  * @param {Array} deps.squads - Squad descriptors ({ name, agents, ... }).
209
210
  * @param {string} [deps.sinapseMasterDest] - Path to the installed sinapse/ master squad.
210
- * @returns {{ writtenAgents: Set<string>, totalAgents: number }}
211
+ * @returns {{ writtenAgents: Set<string>, canonicalAgents: Array<{ id: string, file: string, origin: string }>, aliasEntryPoints: string[], totalAgents: number }}
211
212
  */
212
213
  function regenerateAgentCommands(deps = {}) {
213
214
  const {
@@ -222,20 +223,21 @@ function regenerateAgentCommands(deps = {}) {
222
223
  throw new Error('regenerateAgentCommands: `squads` array is required');
223
224
  }
224
225
 
225
- fs.mkdirSync(commandsDir, { recursive: true });
226
-
227
- // Clear old commands (dir may not exist on a fresh install — guarded).
228
- try {
229
- for (const f of fs.readdirSync(commandsDir)) {
230
- fs.unlinkSync(path.join(commandsDir, f));
231
- }
232
- } catch { /* dir may not exist yet */ }
233
-
234
226
  const sinapseBase = toForwardSlash(sinapseHome);
235
227
  const writtenAgents = new Set();
228
+ const catalogById = new Map();
229
+ const definitions = [];
230
+
231
+ function registerDefinition(definition) {
232
+ const previous = catalogById.get(definition.id);
233
+ if (previous) {
234
+ throw new Error(`Duplicate canonical agent ID "${definition.id}" from ${previous.origin} and ${definition.origin}`);
235
+ }
236
+ catalogById.set(definition.id, definition);
237
+ definitions.push(definition);
238
+ }
236
239
 
237
- // 1. A command/subagent for EVERY agent (not only -orqx), so every specialist
238
- // is invokable via @agent and /SINAPSE:agents:agent.
240
+ // Inventory every canonical definition before clearing or writing commands.
239
241
  for (const squad of squads) {
240
242
  const squadPath = `${sinapseBase}/${squad.name}`;
241
243
  const agentsDir = path.join(sinapseHome, squad.name, 'agents');
@@ -244,10 +246,14 @@ function regenerateAgentCommands(deps = {}) {
244
246
  const squadAgents = fs.readdirSync(agentsDir).filter(f => f.endsWith('.md'));
245
247
  for (const file of squadAgents) {
246
248
  const agentId = file.replace('.md', '');
247
- const meta = extractAgentMeta(path.join(agentsDir, file));
248
- const cmdContent = generateCommandMd(agentId, meta.name, meta.icon, squad.name, squadPath, file);
249
- atomicWriteFileSync(path.join(commandsDir, `${agentId}.md`), cmdContent);
250
- writtenAgents.add(file);
249
+ registerDefinition({
250
+ id: agentId,
251
+ file,
252
+ origin: path.join(agentsDir, file),
253
+ squadName: squad.name,
254
+ squadPath,
255
+ hasManifest: true,
256
+ });
251
257
  }
252
258
  }
253
259
 
@@ -257,29 +263,37 @@ function regenerateAgentCommands(deps = {}) {
257
263
  if (fs.existsSync(coreAgentsDir)) {
258
264
  const coreBase = toForwardSlash(coreDevelopmentDest);
259
265
  for (const file of fs.readdirSync(coreAgentsDir).filter(f => f.endsWith('.md'))) {
260
- if (file === 'README.md' || file === 'MEMORY.md' || file.startsWith('_') || writtenAgents.has(file)) continue;
266
+ if (file === 'README.md' || file === 'MEMORY.md' || file.startsWith('_')) continue;
261
267
  const agentId = file.replace('.md', '');
262
- const meta = extractAgentMeta(path.join(coreAgentsDir, file));
263
- const cmdContent = generateCommandMd(agentId, meta.name, meta.icon, 'core', coreBase, file, { hasManifest: false });
264
- atomicWriteFileSync(path.join(commandsDir, `${agentId}.md`), cmdContent);
265
- writtenAgents.add(file);
268
+ registerDefinition({
269
+ id: agentId,
270
+ file,
271
+ origin: path.join(coreAgentsDir, file),
272
+ squadName: 'core',
273
+ squadPath: coreBase,
274
+ hasManifest: false,
275
+ });
266
276
  }
267
277
  }
268
278
 
269
- // 2. Commands for sinapse/ master squad agents.
270
- if (fs.existsSync(sinapseMasterDest)) {
271
- const masterAgentsDir = path.join(sinapseMasterDest, 'agents');
272
- if (fs.existsSync(masterAgentsDir)) {
273
- for (const file of fs.readdirSync(masterAgentsDir).filter(f => f.endsWith('.md'))) {
274
- if (writtenAgents.has(file)) continue;
275
- const agentId = file.replace('.md', '');
276
- const meta = extractAgentMeta(path.join(masterAgentsDir, file));
277
- const squadPath = `${sinapseBase}/sinapse`;
278
- const cmdContent = generateCommandMd(agentId, meta.name, meta.icon, 'sinapse', squadPath, file);
279
- atomicWriteFileSync(path.join(commandsDir, `${agentId}.md`), cmdContent);
280
- writtenAgents.add(file);
281
- }
282
- }
279
+ fs.mkdirSync(commandsDir, { recursive: true });
280
+ for (const file of fs.readdirSync(commandsDir)) {
281
+ fs.unlinkSync(path.join(commandsDir, file));
282
+ }
283
+
284
+ for (const definition of definitions) {
285
+ const meta = extractAgentMeta(definition.origin);
286
+ const cmdContent = generateCommandMd(
287
+ definition.id,
288
+ meta.name,
289
+ meta.icon,
290
+ definition.squadName,
291
+ definition.squadPath,
292
+ definition.file,
293
+ { hasManifest: definition.hasManifest },
294
+ );
295
+ atomicWriteFileSync(path.join(commandsDir, definition.file), cmdContent);
296
+ writtenAgents.add(definition.file);
283
297
  }
284
298
 
285
299
  // 3. Master entry points (@sinapse, @snps, @sinapse-orqx, @snps-orqx) → rich
@@ -301,7 +315,16 @@ function regenerateAgentCommands(deps = {}) {
301
315
  }
302
316
  }
303
317
 
304
- return { writtenAgents, totalAgents: writtenAgents.size };
318
+ const aliasEntryPoints = [...MASTER_ALIAS_ENTRY_POINTS]
319
+ .filter((id) => writtenAgents.has(`${id}.md`));
320
+ const canonicalAgents = definitions.map(({ id, file, origin }) => ({ id, file, origin }));
321
+
322
+ return {
323
+ writtenAgents,
324
+ canonicalAgents,
325
+ aliasEntryPoints,
326
+ totalAgents: canonicalAgents.length,
327
+ };
305
328
  }
306
329
 
307
330
  module.exports = {
@@ -309,4 +332,5 @@ module.exports = {
309
332
  generateMasterStub,
310
333
  regenerateAgentCommands,
311
334
  countCoreAgents,
335
+ MASTER_ALIAS_ENTRY_POINTS,
312
336
  };