بنقرة واحدة
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>