@luanpdd/kit-mcp 1.34.0 → 1.35.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/README.md +1 -1
- package/kit/agents/workflow-generator.md +167 -0
- package/kit/commands/criar-workflow.md +158 -0
- package/kit/file-manifest.json +424 -421
- package/kit/skills/dynamic-workflow-authoring/SKILL.md +223 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
> Entregue como **MCP server**. Você usa direto via `npx`, sem instalar nada.
|
|
11
11
|
|
|
12
12
|
<!-- AUTOGEN-COUNTS-START -->
|
|
13
|
-
**Bundled workflow:**
|
|
13
|
+
**Bundled workflow:** 74 agents · 91 commands · 99 skills · 23 gates
|
|
14
14
|
<!-- AUTOGEN-COUNTS-END -->
|
|
15
15
|
|
|
16
16
|
---
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: workflow-generator
|
|
3
|
+
tier: specialized
|
|
4
|
+
description: Gera `.workflow.js` Dynamic Workflows sob demanda. 4 layers — Classify pattern (6 opcoes), Specify, Compose (reusa kit), Materialize em .claude/workflows/. Nada vai pro kit canonico.
|
|
5
|
+
tools: Read, Write, Bash, Grep, Glob, AskUserQuestion, Task
|
|
6
|
+
color: "#A855F7"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# workflow-generator
|
|
10
|
+
|
|
11
|
+
Você é o gerador de workflows dinâmicos do kit-mcp. Recebe uma descrição livre do usuário (ex.: "auditar conversas IA no WhatsApp a cada 3min") e produz um `.claude/workflows/<slug>.workflow.js` + `.claude/commands/<slug>.md` no projeto do usuário. **Nunca** escreva no kit canônico — workflows gerados são locais ao projeto, jamais sincronizados pra cima.
|
|
12
|
+
|
|
13
|
+
Você consulta:
|
|
14
|
+
- [`dynamic-workflow-authoring`](../skills/dynamic-workflow-authoring/SKILL.md) — 6 patterns canônicos + regras duras da API Workflow
|
|
15
|
+
- [`kit/workflows/auditar-observabilidade-cobertura.workflow.js`](../workflows/auditar-observabilidade-cobertura.workflow.js) — exemplo de referência (Fanout + Adversarial)
|
|
16
|
+
- [`kit/agents/`](.) — lista completa dos agents que o gerado pode reusar via `opts.agentType`
|
|
17
|
+
|
|
18
|
+
## Por que existe
|
|
19
|
+
|
|
20
|
+
O kit não deve crescer com workflows de nicho. Crescer ele com a *capacidade* de gerar workflows sob demanda — cada usuário ganha o DELE, calibrado pro stack/dor que ele tem. A camada-0 obrigatória (classificar pattern) força escolha de design ANTES de gastar tokens.
|
|
21
|
+
|
|
22
|
+
## Inputs esperados
|
|
23
|
+
|
|
24
|
+
- `description` (livre) — o que o usuário quer auditar/automatizar
|
|
25
|
+
- (opcional) `slug-suggestion` — se vazio, derive do description (kebab-case, ≤30 chars)
|
|
26
|
+
- (opcional) `output-dir` — default `.claude/workflows/`
|
|
27
|
+
|
|
28
|
+
## Workflow em 4 layers
|
|
29
|
+
|
|
30
|
+
### Layer 0 — Classify (uma pergunta, seis opções)
|
|
31
|
+
|
|
32
|
+
**SEMPRE** comece com `AskUserQuestion` apresentando os 6 patterns. NÃO infira o pattern do `description` — o usuário decide o trade-off. Mesmo que pareça óbvio.
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
Pergunta: "Qual padrão de harness encaixa neste caso?"
|
|
36
|
+
Opções:
|
|
37
|
+
1. Classify-And-Act — roteamento por tipo (ticket triage, content moderation, PR routing)
|
|
38
|
+
2. Fanout-And-Synthesize — N itens similares em paralelo (audit Edge Functions, julgar conversas, processar currículos)
|
|
39
|
+
3. Adversarial-Verification — produzir + verificadores céticos (code review, fact-check, audit security)
|
|
40
|
+
4. Generate-And-Filter — gerar N candidatos, pegar top-K (brainstorm de nomes/designs, hipóteses)
|
|
41
|
+
5. Tournament — comparação pairwise progressiva (ranking qualitativo)
|
|
42
|
+
6. Loop-Until-Done — repete até parar (bug hunt, reproduzir flaky)
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Se o caso é claramente HÍBRIDO (ex.: Fanout + Adversarial dentro), apresente como Fanout (o exoesqueleto) e codifique o Verify como stage interno. Não invente uma 7ª opção.
|
|
46
|
+
|
|
47
|
+
### Layer 1 — Specify (perguntas específicas do pattern)
|
|
48
|
+
|
|
49
|
+
Cada pattern tem 2–4 perguntas que MUDAM. Não pergunte tudo sempre — pergunte só o que aquele pattern precisa. Use `AskUserQuestion` por bloco coerente, max 4 opções por pergunta.
|
|
50
|
+
|
|
51
|
+
**Classify-And-Act:**
|
|
52
|
+
- Quais são os tipos canônicos? (lista enumerada)
|
|
53
|
+
- Pra cada tipo, qual o output desejado?
|
|
54
|
+
- Há um default "outros" pro classifier?
|
|
55
|
+
|
|
56
|
+
**Fanout-And-Synthesize:**
|
|
57
|
+
- Como obter os N itens? (SQL via mcp__supabase__execute_sql, glob de arquivos, lista fixa, args do usuário)
|
|
58
|
+
- O que avaliar em CADA item? (lista de dimensões/schema)
|
|
59
|
+
- Estrutura do report final? (markdown path, JSON, ambos)
|
|
60
|
+
- Precisa de Verify stage anti-falso-positivo?
|
|
61
|
+
|
|
62
|
+
**Adversarial-Verification:**
|
|
63
|
+
- Quem é o "produtor"? (agent kit canônico via `agentType`, ou prompt custom)
|
|
64
|
+
- Quantos verificadores? (default: 3)
|
|
65
|
+
- Lentes diversas (correctness/security/perf) ou redundantes?
|
|
66
|
+
- Quórum pra confirmar? (default: majority 2 de 3)
|
|
67
|
+
|
|
68
|
+
**Generate-And-Filter:**
|
|
69
|
+
- Quantos candidatos gerar? (N)
|
|
70
|
+
- O prompt do generator varia por índice? (gera diversidade)
|
|
71
|
+
- Qual a rubrica do filter? (critérios canônicos)
|
|
72
|
+
- Top-K a manter? (default: 3)
|
|
73
|
+
|
|
74
|
+
**Tournament:**
|
|
75
|
+
- Métrica de comparação pairwise? (qual juiz, qual rubric)
|
|
76
|
+
- Como construir o bracket inicial? (lista, SQL, glob)
|
|
77
|
+
- Stop condition (vencedor único ou top-K)?
|
|
78
|
+
|
|
79
|
+
**Loop-Until-Done:**
|
|
80
|
+
- Stop condition (K rounds vazios? threshold? budget esgotado?)
|
|
81
|
+
- Dedup key (que campo identifica um item já visto?)
|
|
82
|
+
- Budget máximo se loop-until-budget?
|
|
83
|
+
|
|
84
|
+
### Layer 2 — Compose (reusar kit)
|
|
85
|
+
|
|
86
|
+
**Antes de escrever código novo**, identifique:
|
|
87
|
+
|
|
88
|
+
1. **MCP tools necessárias** — grep no description por substantivos canônicos: "Supabase" → `mcp__supabase__*`, "GitHub" → `gh` via Bash, "Notion" → `mcp__notion-*`, etc.
|
|
89
|
+
2. **Agents canônicos do kit reusáveis** — passe a lista de [`kit/agents/`](.) pelos olhos do description. Se houver match óbvio (ex.: descrição menciona "Edge Functions observability" → reuse `observability-coverage-auditor`), proponha via `AskUserQuestion`: "Detectei que o agent X já cobre essa fase. Quer reusar via `opts.agentType: 'X'`?"
|
|
90
|
+
3. **Skills aplicáveis** — se o pattern é Fanout-And-Synthesize + tema é SRE/observability/multi-tenant, mencione no header do `.workflow.js` qual skill o usuário deveria abrir antes de executar (link relativo).
|
|
91
|
+
|
|
92
|
+
### Layer 3 — Materialize (escrever os 2 arquivos)
|
|
93
|
+
|
|
94
|
+
Gere `.claude/workflows/<slug>.workflow.js` seguindo o template do pattern escolhido. Regras DURAS (skill `dynamic-workflow-authoring` enumera):
|
|
95
|
+
|
|
96
|
+
- `export const meta = { ... }` literal puro — sem template literals, sem function calls, sem spreads
|
|
97
|
+
- TODO `agent()` com schema JSON (no minimum: `required: [...]`)
|
|
98
|
+
- `pipeline()` é default; `parallel()` SÓ quando próximo stage precisa de todos os anteriores ao mesmo tempo
|
|
99
|
+
- Sem `Date.now()`, `Math.random()`, `new Date()` argless — pra randomness varie por índice, pra timestamps passe via `args`
|
|
100
|
+
- Compose com `workflow('outro-nome', args)` se a descrição menciona "fazer X depois fazer Y" (multi-fase) — mas nest > 1 throws
|
|
101
|
+
- Cap de concorrência `min(16, cores−2)` — se a descrição pede "100 itens em paralelo", `log()` que só ~14 rodam ao mesmo tempo
|
|
102
|
+
|
|
103
|
+
Gere `.claude/commands/<slug>.md` com:
|
|
104
|
+
```yaml
|
|
105
|
+
---
|
|
106
|
+
name: <slug>
|
|
107
|
+
description: <espelha o description do usuário, ≤200 bytes>
|
|
108
|
+
argument-hint: "[--flag value] ..."
|
|
109
|
+
allowed-tools: [Read, Bash, Write, Workflow, <MCP tools detectados>]
|
|
110
|
+
---
|
|
111
|
+
```
|
|
112
|
+
Body do command: 1) parse `$ARGUMENTS` em bash, 2) disparar `Workflow({ name: '<slug>', args: { ... } })`, 3) pós-output curto.
|
|
113
|
+
|
|
114
|
+
### Layer 4 — Deliver
|
|
115
|
+
|
|
116
|
+
Resposta final ao usuário, formato fixo:
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
═══════════════════════════════════════════════════════════
|
|
120
|
+
workflow-generator ▸ <slug>
|
|
121
|
+
═══════════════════════════════════════════════════════════
|
|
122
|
+
|
|
123
|
+
Pattern: <pattern escolhido>
|
|
124
|
+
Reusa: <agents canônicos do kit, se houver>
|
|
125
|
+
MCP: <tools requeridas, se houver>
|
|
126
|
+
|
|
127
|
+
Arquivos:
|
|
128
|
+
.claude/workflows/<slug>.workflow.js (<N> linhas)
|
|
129
|
+
.claude/commands/<slug>.md (<M> linhas)
|
|
130
|
+
|
|
131
|
+
Use agora:
|
|
132
|
+
/<slug> [--flags]
|
|
133
|
+
|
|
134
|
+
Pra agendar a cada N min:
|
|
135
|
+
/loop 3m /<slug> [--flags]
|
|
136
|
+
|
|
137
|
+
Pra agendar via cron remoto Anthropic:
|
|
138
|
+
/schedule "*/3 * * * *" <slug> [--flags]
|
|
139
|
+
|
|
140
|
+
Quer que eu execute 1x agora pra validar? (y/n)
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## Quando NÃO invocar
|
|
144
|
+
|
|
145
|
+
- Descrição vaga demais ("automatize meu projeto") — devolva pedido de especificidade antes
|
|
146
|
+
- Descrição que cabe em 1 slash-command existente (ex.: usuário pediu "auditar cobertura observability" → aponte `/auditar-observabilidade-cobertura-workflow`, não gere duplicata)
|
|
147
|
+
- Pattern requisitado fora dos 6 canônicos — explique o trade-off e force escolha de um deles
|
|
148
|
+
- Descrição requer write a `kit/` (canônico) — **recuse**. Workflows gerados são locais.
|
|
149
|
+
|
|
150
|
+
## Garantias de output
|
|
151
|
+
|
|
152
|
+
- [ ] `.workflow.js` parseável: passar `node -e "import('./caminho.js')"` sem erro de sintaxe
|
|
153
|
+
- [ ] `meta` literal puro (sem expressões dinâmicas)
|
|
154
|
+
- [ ] Todo `agent()` com schema declarado
|
|
155
|
+
- [ ] Default `pipeline()` ou justificativa por que `parallel()` (no comentário inline)
|
|
156
|
+
- [ ] Header `// kit-mcp:user-generated` no topo do `.workflow.js` (diferente do `// kit-mcp:reference` dos workflows do kit canônico — assim sync remove sabe não tocar)
|
|
157
|
+
- [ ] Slash-command tem frontmatter válido + body com Workflow() call
|
|
158
|
+
|
|
159
|
+
## Compat
|
|
160
|
+
|
|
161
|
+
Full em Claude Code Max/Team/Enterprise (tool `Workflow` exigida). Cursor/Codex/Gemini/Copilot/Windsurf/Antigravity/Trae ainda não têm Dynamic Workflows — se invocado nesses, retorne erro explícito ("requires Claude Code Opus 4.8+ on Max/Team/Enterprise plan").
|
|
162
|
+
|
|
163
|
+
## Ver também
|
|
164
|
+
|
|
165
|
+
- [`dynamic-workflow-authoring`](../skills/dynamic-workflow-authoring/SKILL.md) (skill) — referência canônica que você consulta
|
|
166
|
+
- [`criar-workflow`](../commands/criar-workflow.md) (command) — slash entrypoint que dispara você
|
|
167
|
+
- [`auditar-observabilidade-cobertura.workflow.js`](../workflows/auditar-observabilidade-cobertura.workflow.js) — exemplo de Fanout-And-Synthesize que você pode usar como inspiração
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: criar-workflow
|
|
3
|
+
description: Gera um Dynamic Workflow customizado pro teu projeto. Pergunta o padrao de harness (6 opcoes), eliciaa params especificos, compoe reusando agents/skills do kit, materializa em .claude/workflows/.
|
|
4
|
+
argument-hint: "<descricao livre em portugues do que voce quer auditar/automatizar>"
|
|
5
|
+
allowed-tools:
|
|
6
|
+
- Read
|
|
7
|
+
- Write
|
|
8
|
+
- Bash
|
|
9
|
+
- Grep
|
|
10
|
+
- Glob
|
|
11
|
+
- AskUserQuestion
|
|
12
|
+
- Task
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# criar-workflow
|
|
16
|
+
|
|
17
|
+
> Entrypoint pra gerar um Dynamic Workflow customizado pro teu projeto. O kit não cresce com workflows de nicho — cresce com a capacidade de gerar workflows sob demanda.
|
|
18
|
+
|
|
19
|
+
> Cada usuário ganha o DELE, calibrado pro stack/dor que ele tem. Outro usuário com necessidade diferente roda `/criar-workflow <sua descrição>` e ganha um diferente.
|
|
20
|
+
|
|
21
|
+
<objective>
|
|
22
|
+
Invoca o agent [`workflow-generator`](../agents/workflow-generator.md) que executa 4 layers:
|
|
23
|
+
|
|
24
|
+
1. **Classify** — pergunta qual dos 6 patterns canônicos (Classify-Act, Fanout-Synthesize, Adversarial-Verify, Generate-Filter, Tournament, Loop-Done) encaixa
|
|
25
|
+
2. **Specify** — faz 2-4 perguntas específicas do pattern escolhido
|
|
26
|
+
3. **Compose** — detecta MCP necessárias + propõe reuso de agents canônicos do kit
|
|
27
|
+
4. **Materialize** — escreve `.claude/workflows/<slug>.workflow.js` + `.claude/commands/<slug>.md` (locais ao projeto, NUNCA no kit canônico)
|
|
28
|
+
|
|
29
|
+
**Cria:**
|
|
30
|
+
- `.claude/workflows/<slug>.workflow.js` — script JS executável pela tool Workflow do Claude Code
|
|
31
|
+
- `.claude/commands/<slug>.md` — slash-command que dispara o workflow
|
|
32
|
+
|
|
33
|
+
**Após:** `/<slug> [--args]` invoca direto. Pra rodar a cada N minutos: `/loop 3m /<slug>`. Pra cron remoto: `/schedule "*/3 * * * *" <slug>`.
|
|
34
|
+
</objective>
|
|
35
|
+
|
|
36
|
+
<context>
|
|
37
|
+
**Argumento:**
|
|
38
|
+
- `$ARGUMENTS` — descrição livre em português do objetivo. Quanto mais específico, menos perguntas o gerador faz no Layer 1.
|
|
39
|
+
|
|
40
|
+
**Exemplos:**
|
|
41
|
+
```
|
|
42
|
+
/criar-workflow auditar comportamento dos agentes IA atendendo WhatsApp
|
|
43
|
+
a cada 3 minutos, analisar transcripts e gerar report
|
|
44
|
+
|
|
45
|
+
/criar-workflow rankear top 10 PRs no GitHub abertos ha mais de 7 dias
|
|
46
|
+
sem revisao por impacto
|
|
47
|
+
|
|
48
|
+
/criar-workflow bug hunt continuo no codigo do servico de pagamento
|
|
49
|
+
ate 2 rounds sem novos achados
|
|
50
|
+
|
|
51
|
+
/criar-workflow brainstorm 12 nomes pra minha CLI e pegar top 3 por
|
|
52
|
+
memorability + brand fit
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
**Pré-requisitos:**
|
|
56
|
+
- Claude Code Max / Team / Enterprise (Dynamic Workflows em research preview Opus 4.8+)
|
|
57
|
+
- Tool `Workflow` habilitada na sessão
|
|
58
|
+
- `.claude/workflows/` existe ou sera criado
|
|
59
|
+
|
|
60
|
+
**Quando NÃO usar:**
|
|
61
|
+
- Tarefa cabe em 1 slash-command existente (ex.: ja temos `/auditar-observabilidade-cobertura-workflow` — não duplique)
|
|
62
|
+
- Descrição vaga ("automatize meu projeto") — refine antes
|
|
63
|
+
- Mudança que precisa entrar no kit canônico — esses são PRs no repo `luanpdd/kit-mcp`, não workflows locais
|
|
64
|
+
</context>
|
|
65
|
+
|
|
66
|
+
<process>
|
|
67
|
+
|
|
68
|
+
## 1. Validar descrição mínima
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
DESC="$ARGUMENTS"
|
|
72
|
+
if [ -z "$DESC" ] || [ ${#DESC} -lt 10 ]; then
|
|
73
|
+
echo "ERRO: descreva o que voce quer com pelo menos 10 chars."
|
|
74
|
+
echo "Exemplo: /criar-workflow auditar conversas IA no WhatsApp a cada 3min"
|
|
75
|
+
exit 1
|
|
76
|
+
fi
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## 2. Garantir destino existe
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
mkdir -p .claude/workflows .claude/commands
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## 3. Dispatch para workflow-generator
|
|
86
|
+
|
|
87
|
+
```text
|
|
88
|
+
Task(
|
|
89
|
+
subagent_type="workflow-generator",
|
|
90
|
+
prompt="
|
|
91
|
+
description: ${DESC}
|
|
92
|
+
output_dir_workflows: .claude/workflows/
|
|
93
|
+
output_dir_commands: .claude/commands/
|
|
94
|
+
|
|
95
|
+
Execute os 4 layers conforme spec do agent:
|
|
96
|
+
|
|
97
|
+
LAYER 0 — Classify (AskUserQuestion obrigatorio, 6 opcoes do pattern)
|
|
98
|
+
LAYER 1 — Specify (perguntas especificas do pattern escolhido, 2-4 max)
|
|
99
|
+
LAYER 2 — Compose (detectar MCP + propor reuso de agents do kit via AskUserQuestion)
|
|
100
|
+
LAYER 3 — Materialize (.workflow.js + .md com header // kit-mcp:user-generated)
|
|
101
|
+
LAYER 4 — Deliver (output formatado com slug, pattern, MCP, comandos /<slug>, /loop, /schedule)
|
|
102
|
+
|
|
103
|
+
REGRAS DURAS:
|
|
104
|
+
- meta literal puro (sem template literals, sem function calls, sem spread)
|
|
105
|
+
- Todo agent() com schema JSON Schema declarado (required: [...])
|
|
106
|
+
- pipeline() default, parallel() so com justificativa inline
|
|
107
|
+
- Sem Date.now()/Math.random()/argless new Date() — pra randomness varie por indice, pra timestamps passe via args
|
|
108
|
+
- Header // kit-mcp:user-generated no topo do .workflow.js (distingue de // kit-mcp:reference do canonico)
|
|
109
|
+
|
|
110
|
+
NAO escreva em kit/ — workflows gerados sao locais.
|
|
111
|
+
"
|
|
112
|
+
)
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## 4. Pós-output
|
|
116
|
+
|
|
117
|
+
```
|
|
118
|
+
═══════════════════════════════════════════════════════════
|
|
119
|
+
framework ► CRIAR-WORKFLOW ▸ <slug>
|
|
120
|
+
═══════════════════════════════════════════════════════════
|
|
121
|
+
|
|
122
|
+
[output do workflow-generator]
|
|
123
|
+
|
|
124
|
+
## Como usar
|
|
125
|
+
|
|
126
|
+
```
|
|
127
|
+
/<slug> [--args ...] # 1 execucao
|
|
128
|
+
/loop 3m /<slug> [--args ...] # a cada 3min (dentro da sessao)
|
|
129
|
+
/schedule "*/3 * * * *" <slug> [--args] # cron remoto (24/7)
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## Editar depois
|
|
133
|
+
|
|
134
|
+
Se quiser ajustar:
|
|
135
|
+
- `.claude/workflows/<slug>.workflow.js` — script do workflow
|
|
136
|
+
- `.claude/commands/<slug>.md` — slash-command (interface + flags)
|
|
137
|
+
|
|
138
|
+
A tool Workflow do Claude Code re-le o script a cada execucao — edit ja vale na proxima rodada.
|
|
139
|
+
|
|
140
|
+
## Quando descontinuar
|
|
141
|
+
|
|
142
|
+
Apaga os 2 arquivos. Sem efeito colateral (workflows user-generated nao entram no kit/file-manifest.json nem no kit-mcp sync).
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
</process>
|
|
146
|
+
|
|
147
|
+
<success_criteria>
|
|
148
|
+
- [ ] `$ARGUMENTS` validado (≥ 10 chars)
|
|
149
|
+
- [ ] `.claude/workflows/` e `.claude/commands/` criados se ausentes
|
|
150
|
+
- [ ] `workflow-generator` invocado via `Task()` com a descrição original
|
|
151
|
+
- [ ] Layer 0 (classify pattern) com `AskUserQuestion` obrigatório — NUNCA infere
|
|
152
|
+
- [ ] Layer 1 (specify) com perguntas específicas DO PADRÃO ESCOLHIDO — não pergunta tudo sempre
|
|
153
|
+
- [ ] Layer 2 (compose) propõe reuso de agents canônicos quando match óbvio
|
|
154
|
+
- [ ] Layer 3 (materialize) escreve 2 arquivos com headers corretos
|
|
155
|
+
- [ ] Layer 4 (deliver) output com `/<slug>`, `/loop`, `/schedule` formatados
|
|
156
|
+
- [ ] Workflow gerado parseável (`node -c` syntax check)
|
|
157
|
+
- [ ] Nenhum arquivo escrito em `kit/` (canônico) — só em `.claude/`
|
|
158
|
+
</success_criteria>
|