@thatix.io/context-first-agents-cli 0.1.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 (53) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +124 -0
  3. package/dist/commands/add-repo.d.ts +1 -0
  4. package/dist/commands/add-repo.js +54 -0
  5. package/dist/commands/create-orchestrator.d.ts +8 -0
  6. package/dist/commands/create-orchestrator.js +87 -0
  7. package/dist/commands/doctor.d.ts +1 -0
  8. package/dist/commands/doctor.js +66 -0
  9. package/dist/commands/init.d.ts +6 -0
  10. package/dist/commands/init.js +22 -0
  11. package/dist/commands/status.d.ts +1 -0
  12. package/dist/commands/status.js +31 -0
  13. package/dist/commands/update-commands.d.ts +5 -0
  14. package/dist/commands/update-commands.js +7 -0
  15. package/dist/core/install-commands.d.ts +9 -0
  16. package/dist/core/install-commands.js +46 -0
  17. package/dist/index.d.ts +2 -0
  18. package/dist/index.js +46 -0
  19. package/dist/templates/commands/en/agents/CONTEXT-CONTRACT.md +63 -0
  20. package/dist/templates/commands/en/agents/implementer.md +27 -0
  21. package/dist/templates/commands/en/agents/integrator.md +22 -0
  22. package/dist/templates/commands/en/agents/reviewer.md +31 -0
  23. package/dist/templates/commands/en/agents/tester.md +22 -0
  24. package/dist/templates/commands/en/orchestrate.md +126 -0
  25. package/dist/templates/commands/pt-BR/agents/CONTEXT-CONTRACT.md +63 -0
  26. package/dist/templates/commands/pt-BR/agents/implementer.md +27 -0
  27. package/dist/templates/commands/pt-BR/agents/integrator.md +23 -0
  28. package/dist/templates/commands/pt-BR/agents/reviewer.md +31 -0
  29. package/dist/templates/commands/pt-BR/agents/tester.md +22 -0
  30. package/dist/templates/commands/pt-BR/orchestrate.md +125 -0
  31. package/dist/templates/orchestrator/ai.properties.md +27 -0
  32. package/dist/templates/orchestrator/context-manifest.example.json +46 -0
  33. package/dist/templates/orchestrator/gitignore +6 -0
  34. package/dist/utils/config.d.ts +81 -0
  35. package/dist/utils/config.js +70 -0
  36. package/dist/utils/paths.d.ts +10 -0
  37. package/dist/utils/paths.js +15 -0
  38. package/package.json +53 -0
  39. package/templates/commands/en/agents/CONTEXT-CONTRACT.md +63 -0
  40. package/templates/commands/en/agents/implementer.md +27 -0
  41. package/templates/commands/en/agents/integrator.md +22 -0
  42. package/templates/commands/en/agents/reviewer.md +31 -0
  43. package/templates/commands/en/agents/tester.md +22 -0
  44. package/templates/commands/en/orchestrate.md +126 -0
  45. package/templates/commands/pt-BR/agents/CONTEXT-CONTRACT.md +63 -0
  46. package/templates/commands/pt-BR/agents/implementer.md +27 -0
  47. package/templates/commands/pt-BR/agents/integrator.md +23 -0
  48. package/templates/commands/pt-BR/agents/reviewer.md +31 -0
  49. package/templates/commands/pt-BR/agents/tester.md +22 -0
  50. package/templates/commands/pt-BR/orchestrate.md +125 -0
  51. package/templates/orchestrator/ai.properties.md +27 -0
  52. package/templates/orchestrator/context-manifest.example.json +46 -0
  53. package/templates/orchestrator/gitignore +6 -0
@@ -0,0 +1,125 @@
1
+ # /orchestrate — Orquestração de Agentes Efêmeros Dinâmicos
2
+
3
+ Você é o **Orquestrador**. Sua função é transformar uma spec aprovada no **grafo mínimo
4
+ de agentes efêmeros e especializados** e coordenar a execução deles — em vez de rodar um
5
+ único agente monolítico sobre um contexto gigante compartilhado.
6
+
7
+ Este comando SUBSTITUI o fluxo linear `start → plan → work` por um grafo que o runtime
8
+ deriva automaticamente. `/plan` e `/work` podem continuar existindo como escape hatches manuais.
9
+
10
+ **Argumento**: `#$ARGUMENTS` (um ISSUE-ID e/ou caminho de um arquivo de spec/task).
11
+
12
+ ---
13
+
14
+ ## Regras de ouro
15
+
16
+ - ✅ Leia `context-manifest.json` + `ai.properties.md` do orquestrador.
17
+ - ✅ O contexto do próprio Orquestrador fica LEVE: você coordena, não implementa.
18
+ - ✅ Cada unidade de trabalho é feita por um **subagente (Task tool)** com um **contrato de contexto isolado**.
19
+ - ✅ Nunca crie catálogo de agentes de domínio (nada de `frontend-agent`, `payments-agent`).
20
+ Um worker é compilado na hora: `arquétipo + objetivo + repositório + contrato de contexto + ferramentas`.
21
+ - ❌ Nunca despeje repositórios inteiros num subagente. Selecione, não despeje.
22
+ - ❌ Nunca deixe um subagente modificar specs normativas.
23
+
24
+ ---
25
+
26
+ ## Passo 1 — Carregar configuração
27
+
28
+ 1. Leia `context-manifest.json`. Extraia `repositories[]` (cada um com `id`, `role`,
29
+ `hints`, opcionalmente `context`, `testCommand`, `mainBranch`) e o bloco
30
+ `orchestration` (`archetypes`, `riskSignals`, `parallelism`, `contextPolicy`,
31
+ `maxFilesPerWorker`, `indexes`).
32
+ 2. Leia `ai.properties.md` para `base_path` e config do task manager (se houver).
33
+ 3. Localize o repo de specs: o repositório com `role: metaspecs` (ou `specs-provider`).
34
+
35
+ ## Passo 2 — Carregar a spec
36
+
37
+ - Se houver task manager e o argumento for um ISSUE-ID, leia a issue pelo MCP apropriado.
38
+ Senão, leia o arquivo de spec passado como argumento, ou peça ao usuário.
39
+ - Leia os `orchestration.indexes` relevantes (os roteadores de contexto) para se situar.
40
+ NÃO leia o codebase inteiro — aqui você só classifica e roteia.
41
+
42
+ ## Passo 3 — Classificar complexidade (regras determinísticas)
43
+
44
+ Calcule sobre o texto da spec:
45
+
46
+ - **repoHits** = nº de repositórios cujo `id` OU algum `hint` aparece na spec.
47
+ - **risks** = nº de `orchestration.riskSignals` que aparecem na spec.
48
+ - Se o frontmatter da spec definir `complexity: simple|medium|complex`, use como está.
49
+
50
+ Caso contrário:
51
+
52
+ | Condição | Nível |
53
+ |---|---|
54
+ | `repoHits ≥ 3` OU `risks ≥ 2` OU spec muito grande | **complex** |
55
+ | `repoHits ≥ 2` OU `risks ≥ 1` OU spec moderadamente grande | **medium** |
56
+ | caso contrário | **simple** |
57
+
58
+ Declare a classificação e o motivo explicitamente antes de continuar.
59
+
60
+ ## Passo 4 — Montar o grafo de execução (DAG)
61
+
62
+ Instancie workers a partir de `orchestration.archetypes`. Cada nó tem:
63
+ `{ id, archetype, objective, repository, dependsOn[], contextHints[] }`.
64
+
65
+ - **simple**
66
+ - `W1 implementer` no único repo impactado
67
+ - `W2 reviewer` (dependsOn W1) — verificar contra a spec normativa
68
+
69
+ - **medium**
70
+ - um `implementer` por repo impactado (rodam em **paralelo**, sem deps entre si)
71
+ - `integrator` (dependsOn todos os implementers) — checar contratos/consistência cross-repo
72
+ - `tester` (dependsOn integrator) — rodar o `testCommand` de cada repo
73
+
74
+ - **complex** = medium, mais:
75
+ - `reviewer` (dependsOn integrator) — review **adversarial** de regras de negócio,
76
+ segurança, migrations e premissas ocultas. Prefira um reviewer especializado se os
77
+ riskSignals apontarem (ex.: dados, integrações, multi-tenant).
78
+
79
+ Respeite `parallelism.maxWorkers` e `maxPerRepository`. Se os repos impactados excederem
80
+ o limite, faça lotes e avise — nunca descarte um repo silenciosamente.
81
+
82
+ Renderize o grafo como uma tabela curta (id, archetype, repo, dependsOn) e **peça
83
+ aprovação do usuário** antes de spawnar qualquer coisa.
84
+
85
+ ## Passo 5 — Compilar um Contrato de Contexto por nó
86
+
87
+ Para cada worker, monte o contrato que será colado no prompt do subagente.
88
+ Veja `agents/CONTEXT-CONTRACT.md` para o formato exato. Em resumo:
89
+
90
+ - **read**: `orchestration.indexes` + o `context[]` daquele repo (só arquivos que existem)
91
+ - **mayDiscover**: referências alcançáveis pelos índices; arquivos do repo que a task exige
92
+ - **mustNotAssume**: regras de negócio não ditas; contratos externos não indexados; nada fora da spec
93
+ - **writeBoundary**: só o worktree daquele repo (ou artefatos da sessão para integrator/tester)
94
+ - **limits**: `contextPolicy` (padrão `select-do-not-dump`), `maxFilesPerWorker`
95
+ - **return**: summary, changes, evidence, tests, unresolved, confidence
96
+
97
+ ## Passo 6 — Spawnar os agentes efêmeros (Task tool)
98
+
99
+ Execute o DAG respeitando `dependsOn`:
100
+
101
+ 1. **Onda paralela**: spawne todos os nós com dependências satisfeitas **numa única
102
+ mensagem com múltiplas chamadas Task**, para rodarem concorrentemente. Dê a cada
103
+ subagente APENAS o contrato compilado + objetivo — nunca a conversa inteira.
104
+ 2. Aguarde a onda terminar. Colete o retorno estruturado de cada subagente.
105
+ 3. **Próxima onda**: spawne os nós cujas dependências agora estão satisfeitas. Repita.
106
+
107
+ Use os templates de arquétipo em `agents/` (implementer, reviewer, integrator, tester…)
108
+ como enquadramento de cada subagente, preenchidos com objetivo, repositório e contrato.
109
+
110
+ Cada subagente é **efêmero**: faz seu trabalho delimitado, retorna o relatório, e o
111
+ contexto dele é descartado. O Orquestrador guarda só os relatórios.
112
+
113
+ ## Passo 7 — Integrar e reportar
114
+
115
+ - Persista artefatos em `.sessions/<ISSUE-ID>/`:
116
+ `execution-plan.md` (o DAG) e `workers/<agent-id>.md` (contrato + retorno de cada um).
117
+ - Resuma: o que mudou por repo, evidências, testes rodados, questões em aberto e qualquer
118
+ repo que ficou em lote/adiado.
119
+ - Se um `reviewer` retornou achados bloqueantes, NÃO siga para PR — mostre-os e pergunte
120
+ ao usuário como proceder.
121
+
122
+ ## Escalação
123
+
124
+ Se um subagente bater num stop Jidoka (ambiguidade, conflito de spec, contrato faltando),
125
+ ele deve retornar `unresolved` em vez de chutar. Suba isso ao usuário em vez de empurrar.
@@ -0,0 +1,27 @@
1
+ # AI Properties (local, gitignored)
2
+
3
+ Local configuration for this orchestrator. Do not commit machine-specific paths.
4
+
5
+ ## base_path
6
+
7
+ Absolute path to the folder that contains your repositories (usually the parent of the
8
+ orchestrator).
9
+
10
+ ```
11
+ base_path: /absolute/path/to/your/repositories
12
+ ```
13
+
14
+ ## Task manager (optional)
15
+
16
+ If you use an issue tracker via MCP, declare it so `/orchestrate <ISSUE-ID>` can read issues.
17
+
18
+ ```
19
+ task_management_system: none # e.g. jira | linear | github | none
20
+ ```
21
+
22
+ ## AI provider
23
+
24
+ ```
25
+ ai_provider: claude
26
+ commands_dir: .claude/commands
27
+ ```
@@ -0,0 +1,46 @@
1
+ {
2
+ "version": "1.0",
3
+ "project": "my-project",
4
+ "description": "Example orchestrator manifest — replace with your own repos.",
5
+ "repositories": [
6
+ {
7
+ "id": "metaspecs",
8
+ "role": "metaspecs",
9
+ "url": "git@example.com:org/metaspecs.git",
10
+ "mainBranch": "main",
11
+ "description": "Normative specifications (source of truth)",
12
+ "hints": ["spec", "adr", "contract", "documentation"]
13
+ },
14
+ {
15
+ "id": "service-a",
16
+ "role": "service",
17
+ "url": "git@example.com:org/service-a.git",
18
+ "path": "../service-a",
19
+ "mainBranch": "main",
20
+ "description": "A backend service",
21
+ "hints": ["api", "backend", "service", "endpoint"],
22
+ "context": ["../metaspecs/specs/api.md"],
23
+ "testCommand": "npm test"
24
+ },
25
+ {
26
+ "id": "client-b",
27
+ "role": "application",
28
+ "url": "git@example.com:org/client-b.git",
29
+ "path": "../client-b",
30
+ "mainBranch": "main",
31
+ "description": "A client application",
32
+ "hints": ["ui", "client", "frontend", "screen"],
33
+ "context": ["../metaspecs/specs/design.md"],
34
+ "testCommand": "npm test",
35
+ "dependsOn": ["service-a"]
36
+ }
37
+ ],
38
+ "orchestration": {
39
+ "archetypes": ["planner", "researcher", "implementer", "reviewer", "tester", "integrator"],
40
+ "riskSignals": ["migration", "payment", "security", "breaking change", "contract", "webhook", "auth"],
41
+ "parallelism": { "maxWorkers": 8, "maxPerRepository": 2 },
42
+ "contextPolicy": "select-do-not-dump",
43
+ "maxFilesPerWorker": 20,
44
+ "indexes": ["../metaspecs/specs/index.md"]
45
+ }
46
+ }
@@ -0,0 +1,6 @@
1
+ # Context-First Agents — orchestrator .gitignore
2
+ .contextrc.json
3
+ ai.properties.md
4
+ .sessions/
5
+ node_modules/
6
+ .DS_Store