一键导入
forge-probe
Experimentos descartaveis para validar viabilidade antes de comprometer um milestone.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Experimentos descartaveis para validar viabilidade antes de comprometer um milestone.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Executa o milestone inteiro de forma autonoma ate concluir.
Executa exatamente uma unidade de trabalho e para (step mode).
Task autonoma sem milestone — brainstorm, discuss, plan, execute.
Gerencia múltiplas contas Claude e troca entre elas (setup-token). Use ao esgotar a sessão de uma conta.
Qualidade do codebase — lint, nomenclatura. Flags: --fix, --paths.
Configuracoes do Forge — status line, hooks, MCPs.
| name | forge-probe |
| description | Experimentos descartaveis para validar viabilidade antes de comprometer um milestone. |
| disable-model-invocation | true |
| allowed-tools | Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion, WebSearch, WebFetch |
Não requer /forge-init — cria .gsd/probes/ sob demanda.
<essential_principles>
package.json se precisar de deps. Zero toque em src/, package.json raiz ou qualquer código de produção.
</essential_principles>Flags:
--quick — pula decomposição/alinhamento, vai direto pro build. Use quando já sabe exatamente o que testar.
Parse $ARGUMENTS:
--quick → QUICK_MODE=truemkdir -p .gsd/probes
# Descobre próximo número sequencial
LAST=$(ls -d .gsd/probes/[0-9][0-9][0-9]-* 2>/dev/null | sort | tail -1 | sed 's|.*/\([0-9]*\)-.*|\1|')
NEXT=$(printf "%03d" $((${LAST:-0} + 1)))
Lê para dar contexto às decisões do probe:
.gsd/PROJECT.md — stack do projeto.gsd/AUTO-MEMORY.md (primeiras 60 linhas) — gotchas conhecidos.gsd/STATE.md — posição atual.gsd/DECISIONS.md — decisões travadas.gsd/probes/MANIFEST.md (se existe) — probes anterioresls package.json pyproject.toml Cargo.toml go.mod requirements.txt 2>/dev/null
Use a linguagem/framework do projeto por padrão. Para greenfield, escolha o que chega a resultado executável mais rápido (Python, Node, Bash, HTML único).
Evite no probe a menos que seja a pergunta central:
.env — hardcode tudonpm install / pip install local ao probe dir--quick)Se QUICK_MODE é true: pule decomposição e alinhamento. Trata a ideia do usuário como probe único. Jump pro Step 6.
Caso contrário: quebra a ideia em 2-5 perguntas independentes, cada uma prova algo específico. Framing Given/When/Then:
| # | Probe | Pergunta (Given/When/Then) | Risco |
|---|-------|----------------------------|-------|
| 001 | redis-pubsub-latency | Given 10k msgs/s em Redis pub/sub, when cliente consome, then latência p95 < 50ms | Alto |
| 002 | kafka-pubsub-setup | Given um Kafka single-node via docker, when publisher envia 10k msgs, then consumer recebe sem perda | Médio |
Probes bons respondem UMA pergunta específica:
Probes ruins (rejeite e reformule):
Ordene por risco. O probe mais provável de matar a ideia roda primeiro.
--quick)Use AskUserQuestion apresentando a lista:
Pergunta: "Build all probes in this order, or adjust?"
Opções:
Aguarde alinhamento antes de seguir.
Escreve (ou atualiza) .gsd/probes/MANIFEST.md:
# Probes Manifest
## Idea
{descrição da ideia geral sendo explorada}
## Probes
| # | Name | Question | Verdict | Tags |
|---|------|----------|---------|------|
Anexa linhas novas se MANIFEST.md já existe.
Para cada probe na ordem de risco:
.gsd/probes/NNN-descriptive-name/ — três dígitos zero-padded + nome kebab-case descritivo.
Todo arquivo serve à pergunta. Nada incidental. Tipicamente:
probe.js / probe.py / probe.sh — o experimento em sipackage.json — se precisar de deps, isolado desse dir.gitignore — node_modules/, *.log, dados temporáriosfixtures/Se ficar maior que ~200 linhas, provavelmente o probe está largo demais — reduza.
README.md com frontmatter---
probe: NNN
name: descriptive-name
validates: "Given X, when Y, then Z"
verdict: PENDING
related: []
tags: [tag1, tag2]
---
# Probe NNN: {Descriptive Name}
## What This Validates
{Pergunta específica de viabilidade, Given/When/Then}
## How to Run
```bash
cd .gsd/probes/NNN-descriptive-name
{single command ou sequência curta}
{Outcomes observáveis: "quando você rodar X, deve ver Y em Z segundos"}
{Preenchido após rodar — verdict, evidência, surpresas}
### d. Auto-linkar probes relacionados
Lê READMEs de probes existentes; infere relações por tags/nomes/descrições. Escreve campo `related` silenciosamente.
### e. Rodar e verificar
**Auto-verificável** (probe produz output definitivo como exit code 0 + benchmark numbers):
- Rode
- Capture output/metrics
- Atualize verdict e seção Results do README
**Precisa julgamento humano** (UI, aproximações qualitativas):
- Rode
- Apresente via `AskUserQuestion`:
Pergunta: "Probe NNN ({name}) — does this match what you expected?"
Opções:
- "Yes, validates the hypothesis"
- "No, invalidates it"
- "Partial — works but with caveats"
- "Need to dig deeper — describe why"
### f. Atualizar verdict
- `VALIDATED` — hipótese confirmada com evidência
- `INVALIDATED` — hipótese falhou; preservar o motivo na seção Results
- `PARTIAL` — funciona com caveats; anotar boundaries
### g. Atualizar MANIFEST.md
Adicionar/atualizar a linha deste probe com verdict + tags.
### h. Commit (se `auto_commit: true` nas prefs)
```bash
# Ler auto_commit das prefs (canonical CLI — dual-read md/jsonc)
PREFS_ENGINE=$([ -f scripts/forge-prefs.js ] && echo scripts/forge-prefs.js || echo "$HOME/.claude/scripts/forge-prefs.js")
AUTO_COMMIT=$(node "$PREFS_ENGINE" --resolved --key auto_commit 2>/dev/null | node -e "let d='';process.stdin.on('data',c=>d+=c).on('end',()=>{try{const v=JSON.parse(d).value;process.stdout.write(String(v).toLowerCase()==='true'?'true':'false')}catch{process.stdout.write('false')}})")
if [ "$AUTO_COMMIT" = "true" ]; then
git add .gsd/probes/NNN-descriptive-name/ .gsd/probes/MANIFEST.md
git commit -m "probe(NNN): [{VERDICT}] — {key finding in one sentence}"
fi
◆ Probe NNN: {name}
Verdict: {VALIDATED ✓ / INVALIDATED ✗ / PARTIAL ⚠}
Finding: {uma frase}
Impact: {efeito nos probes restantes, se houver}
Se um probe INVALIDATED derruba premissa central dos próximos probes, pare. Apresente via AskUserQuestion:
Pergunta: "Probe NNN invalidates core assumption. Continue with remaining probes or stop?"
Opções:
Depois de todos os probes (ou short-circuit):
## Probes Complete — Summary
**Idea:** {idea original}
**Probes run:** N — {X validated, Y invalidated, Z partial}
### Findings
- **001 {name}** ({VERDICT}): {key finding}
- **002 {name}** ({VERDICT}): {key finding}
### Recommendations
{Based nos verdicts:}
- **Se majority VALIDATED:** "Viabilidade confirmada. Próximo passo: `/forge-new-milestone {refined description}` — o planner vai ler `.gsd/probes/MANIFEST.md` como contexto."
- **Se majority INVALIDATED:** "Abordagem não é viável como especificada. Sugestão: {pivot alternatives baseadas nos findings} ou volte ao `/forge-ask` para brainstorm."
- **Se PARTIAL:** "Viabilidade condicional. Restrições identificadas: {list}. Pode prosseguir com milestone se aceitar essas constraints."
### Artifacts
- `.gsd/probes/MANIFEST.md` — índice
- `.gsd/probes/NNN-*/README.md` — evidência por probe
- Código descartável — deletar com `rm -rf .gsd/probes/NNN-*` quando quiser, ou arquivar commitando
Se algum finding for project-specific + non-obvious + durable (gate do forge-memory), sugira ao usuário:
Finding do probe 001 se qualifica pra AUTO-MEMORY: "{finding}". Salvar? (s/n)
Se sim, adiciona entrada em .gsd/AUTO-MEMORY.md com categoria gotcha ou pattern conforme apropriado. Usa Edit (append-only).
<success_criteria>
src/, package.json raiz, ou qualquer arquivo de produção<fast_mode>
Com --quick: pula decomposição E alinhamento. Trata input como probe único, número 001 (ou próximo disponível). Build direto, verdict direto. Use quando usuário já formulou a pergunta exata.
</fast_mode>