@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.
- package/LICENSE +21 -0
- package/README.md +124 -0
- package/dist/commands/add-repo.d.ts +1 -0
- package/dist/commands/add-repo.js +54 -0
- package/dist/commands/create-orchestrator.d.ts +8 -0
- package/dist/commands/create-orchestrator.js +87 -0
- package/dist/commands/doctor.d.ts +1 -0
- package/dist/commands/doctor.js +66 -0
- package/dist/commands/init.d.ts +6 -0
- package/dist/commands/init.js +22 -0
- package/dist/commands/status.d.ts +1 -0
- package/dist/commands/status.js +31 -0
- package/dist/commands/update-commands.d.ts +5 -0
- package/dist/commands/update-commands.js +7 -0
- package/dist/core/install-commands.d.ts +9 -0
- package/dist/core/install-commands.js +46 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +46 -0
- package/dist/templates/commands/en/agents/CONTEXT-CONTRACT.md +63 -0
- package/dist/templates/commands/en/agents/implementer.md +27 -0
- package/dist/templates/commands/en/agents/integrator.md +22 -0
- package/dist/templates/commands/en/agents/reviewer.md +31 -0
- package/dist/templates/commands/en/agents/tester.md +22 -0
- package/dist/templates/commands/en/orchestrate.md +126 -0
- package/dist/templates/commands/pt-BR/agents/CONTEXT-CONTRACT.md +63 -0
- package/dist/templates/commands/pt-BR/agents/implementer.md +27 -0
- package/dist/templates/commands/pt-BR/agents/integrator.md +23 -0
- package/dist/templates/commands/pt-BR/agents/reviewer.md +31 -0
- package/dist/templates/commands/pt-BR/agents/tester.md +22 -0
- package/dist/templates/commands/pt-BR/orchestrate.md +125 -0
- package/dist/templates/orchestrator/ai.properties.md +27 -0
- package/dist/templates/orchestrator/context-manifest.example.json +46 -0
- package/dist/templates/orchestrator/gitignore +6 -0
- package/dist/utils/config.d.ts +81 -0
- package/dist/utils/config.js +70 -0
- package/dist/utils/paths.d.ts +10 -0
- package/dist/utils/paths.js +15 -0
- package/package.json +53 -0
- package/templates/commands/en/agents/CONTEXT-CONTRACT.md +63 -0
- package/templates/commands/en/agents/implementer.md +27 -0
- package/templates/commands/en/agents/integrator.md +22 -0
- package/templates/commands/en/agents/reviewer.md +31 -0
- package/templates/commands/en/agents/tester.md +22 -0
- package/templates/commands/en/orchestrate.md +126 -0
- package/templates/commands/pt-BR/agents/CONTEXT-CONTRACT.md +63 -0
- package/templates/commands/pt-BR/agents/implementer.md +27 -0
- package/templates/commands/pt-BR/agents/integrator.md +23 -0
- package/templates/commands/pt-BR/agents/reviewer.md +31 -0
- package/templates/commands/pt-BR/agents/tester.md +22 -0
- package/templates/commands/pt-BR/orchestrate.md +125 -0
- package/templates/orchestrator/ai.properties.md +27 -0
- package/templates/orchestrator/context-manifest.example.json +46 -0
- 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
|
+
}
|