@runecraft/grimoire 1.0.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 (73) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +21 -0
  3. package/catalog.json +9 -0
  4. package/dist/grimoire.js +1758 -0
  5. package/package.json +54 -0
  6. package/references/definition-of-done.md +67 -0
  7. package/references/testing-patterns.md +260 -0
  8. package/skills/code-review-and-quality/README.md +13 -0
  9. package/skills/code-review-and-quality/SKILL.md +389 -0
  10. package/skills/code-simplification/README.md +13 -0
  11. package/skills/code-simplification/SKILL.md +338 -0
  12. package/skills/debugging-and-error-recovery/README.md +13 -0
  13. package/skills/debugging-and-error-recovery/SKILL.md +343 -0
  14. package/skills/debugging-and-error-recovery/scripts/__pycache__/triage_state.cpython-314.pyc +0 -0
  15. package/skills/debugging-and-error-recovery/scripts/triage_state.py +206 -0
  16. package/skills/deprecation-and-migration/README.md +13 -0
  17. package/skills/deprecation-and-migration/SKILL.md +248 -0
  18. package/skills/deprecation-and-migration/scripts/__pycache__/migration_tracker.cpython-314.pyc +0 -0
  19. package/skills/deprecation-and-migration/scripts/migration_tracker.py +237 -0
  20. package/skills/doubt-driven-development/README.md +13 -0
  21. package/skills/doubt-driven-development/SKILL.md +251 -0
  22. package/skills/git-commit-learning/.skill-meta.json +14 -0
  23. package/skills/git-commit-learning/README.md +205 -0
  24. package/skills/git-commit-learning/SKILL.md +435 -0
  25. package/skills/git-commit-learning/references/commit-patterns.md +595 -0
  26. package/skills/git-worktree/README.md +13 -0
  27. package/skills/git-worktree/SKILL.md +220 -0
  28. package/skills/idea-refine/README.md +13 -0
  29. package/skills/idea-refine/SKILL.md +186 -0
  30. package/skills/interview-me/README.md +13 -0
  31. package/skills/interview-me/SKILL.md +233 -0
  32. package/skills/linkedin-audit/SKILL.md +98 -0
  33. package/skills/linkedin-audit/references/dashboard-spec.md +43 -0
  34. package/skills/memory-management/README.md +13 -0
  35. package/skills/memory-management/SKILL.md +198 -0
  36. package/skills/security-and-hardening/README.md +13 -0
  37. package/skills/security-and-hardening/SKILL.md +472 -0
  38. package/skills/shipping-and-launch/README.md +13 -0
  39. package/skills/shipping-and-launch/SKILL.md +317 -0
  40. package/skills/skill-forge/README.md +153 -0
  41. package/skills/skill-forge/SKILL.md +291 -0
  42. package/skills/skill-forge/assets/SKILL.template.md +73 -0
  43. package/skills/skill-forge/references/authoring-patterns.md +249 -0
  44. package/skills/skill-forge/references/description-optimization.md +171 -0
  45. package/skills/skill-forge/references/output-evaluation.md +276 -0
  46. package/skills/skill-forge/references/scripts-guide.md +232 -0
  47. package/skills/skill-forge/references/spec.md +175 -0
  48. package/skills/skill-forge/scripts/validate.py +536 -0
  49. package/skills/spec-driven/.skill-meta.json +14 -0
  50. package/skills/spec-driven/README.md +335 -0
  51. package/skills/spec-driven/SKILL.md +174 -0
  52. package/skills/spec-driven/references/code-analysis.md +98 -0
  53. package/skills/spec-driven/references/coding-principles.md +56 -0
  54. package/skills/spec-driven/references/context-limits.md +31 -0
  55. package/skills/spec-driven/references/design.md +199 -0
  56. package/skills/spec-driven/references/discuss.md +136 -0
  57. package/skills/spec-driven/references/implement.md +425 -0
  58. package/skills/spec-driven/references/lessons.md +113 -0
  59. package/skills/spec-driven/references/memory.md +126 -0
  60. package/skills/spec-driven/references/specify.md +210 -0
  61. package/skills/spec-driven/references/sub-agents.md +96 -0
  62. package/skills/spec-driven/references/tasks.md +484 -0
  63. package/skills/spec-driven/references/validate.md +350 -0
  64. package/skills/spec-driven/scripts/__pycache__/lessons.cpython-314.pyc +0 -0
  65. package/skills/spec-driven/scripts/lessons.py +370 -0
  66. package/skills/spec-loop/README.md +36 -0
  67. package/skills/spec-loop/SKILL.md +61 -0
  68. package/skills/test-driven-development/README.md +13 -0
  69. package/skills/test-driven-development/SKILL.md +388 -0
  70. package/skills/typescript-patterns/README.md +13 -0
  71. package/skills/typescript-patterns/SKILL.md +346 -0
  72. package/skills/using-agent-skills/README.md +13 -0
  73. package/skills/using-agent-skills/SKILL.md +187 -0
@@ -0,0 +1,98 @@
1
+ ---
2
+ name: linkedin-audit
3
+ description: Audita o perfil do LinkedIn (notas 0-10 em 8 seções, diagnósticos diretos, reescritas sugeridas) e gera um dashboard HTML standalone com as cores do LinkedIn. Use when the user asks for LinkedIn profile analysis or audit, "avalia meu perfil", "melhora meu LinkedIn", "audita meu LinkedIn", "dashboard do LinkedIn", or provides LinkedIn data, exported resume, profile photo or cover photo. Do NOT use for writing standalone posts, feed content, prospecting or job search without a profile analysis request.
4
+ license: CC-BY-4.0
5
+ metadata:
6
+ author: runecraft
7
+ version: 1.0.0
8
+ ---
9
+
10
+ # LinkedIn Audit
11
+
12
+ Audita o perfil do LinkedIn do usuário contra o objetivo que ele declarar, produz um relatório de análise com notas 0-10 por seção e gera um dashboard HTML standalone (arquivo único, abre no navegador) com as cores oficiais do LinkedIn.
13
+
14
+ ## Fluxo
15
+
16
+ 1. **Coletar entradas** (se faltar algo, peça — nunca invente dados)
17
+ 2. **Ensinar a exportar do LinkedIn** (se o usuário ainda não tem os arquivos)
18
+ 3. **PARTE 1 — Análise** (notas, diagnósticos, reescritas)
19
+ 4. **PARTE 2 — Dashboard HTML** (arquivo salvo em disco)
20
+ 5. **Entregar** (resumo no chat + caminho do arquivo)
21
+
22
+ ## Passo 1: Coletar entradas
23
+
24
+ Peça, em uma única mensagem clara:
25
+
26
+ - **Objetivo no LinkedIn** — se o usuário não declarou, pergunte com exemplos: autoridade em IA, parcerias, clientes, emprego.
27
+ - **Dados do perfil em qualquer formato** — texto colado, currículo exportado (PDF), arquivo, print ou URL. Se vier um PDF, extraia o texto antes de analisar. Se vier imagem, descreva o que conseguir ler.
28
+ - **Foto de perfil e capa (opcional, mas sempre pedir)** — arquivos ou URLs. Sem elas o dashboard funciona, mas fica mais fraco.
29
+ - **Número de seguidores** — se estiver nos dados, use; senão pergunte ou omita.
30
+
31
+ Regras de entrada: nunca invente conquistas, números ou fatos que não estejam nos dados. Toda reescrita deve manter o tom e o contexto real do usuário.
32
+
33
+ ## Passo 2: Como exportar do LinkedIn (instruções para o usuário)
34
+
35
+ Se o usuário não sabe como obter os arquivos, passe estas instruções:
36
+
37
+ **Currículo exportado (mais rápido):** no perfil do LinkedIn, clique em "Mais..." → "Salvar em PDF". Isso baixa o currículo completo em PDF.
38
+
39
+ **Exportação completa de dados:** clique em "Eu" → "Configurações e privacidade" → "Privacidade de dados" → "Obter uma cópia dos seus dados" → selecione ao menos "Perfil" (e "Conta" se quiser conexões) → "Solicitar arquivo". O LinkedIn envia um ZIP por e-mail; extraia e use o conteúdo da pasta.
40
+
41
+ **Foto de perfil e capa:** clique na foto ou capa para ampliar → clique com o botão direito → "Salvar imagem como...". Prefira o arquivo original em vez de print.
42
+
43
+ ## Passo 3: PARTE 1 — Análise
44
+
45
+ Avalie as 8 seções abaixo, cada uma com:
46
+
47
+ - **Nota de 0 a 10** (inteira ou com meio ponto)
48
+ - **Diagnóstico direto em 2 linhas** — o problema concreto, sem rodeios
49
+ - **Reescrita sugerida quando a nota for abaixo de 7** — mantendo o tom e o contexto real do usuário, sem inventar fatos
50
+
51
+ Seções e critérios (calibre tudo para o objetivo declarado):
52
+
53
+ 1. **Foto & Banner** — qualidade da imagem, presença de rosto, coerência visual, se o banner comunica o posicionamento
54
+ 2. **Headline** — clareza do posicionamento, keywords do objetivo, público-alvo reconhecível
55
+ 3. **About/Resumo** — narrativa com começo/meio/fim, keywords, prova ou resultados, chamada à ação
56
+ 4. **Experiências** — impacto e resultados quantificados, descrição orientada a resultados, keywords
57
+ 5. **Skills** — relevância ao objetivo, ordem das mais importantes, cobertura
58
+ 6. **Recomendações** — quantidade, qualidade e diversidade de autores
59
+ 7. **URL** — personalizada, limpa, fácil de citar, presente no perfil
60
+ 8. **Atividade** — frequência e qualidade dos posts, consistência, engajamento
61
+
62
+ Score geral: média ponderada — peso 2 para as seções mais críticas ao objetivo (emprego → Experiências e Atividade; autoridade → Atividade e About; clientes/parcerias → Headline e About) e peso 1 para as demais. Arredonde para uma casa decimal e feche com um veredito em uma frase.
63
+
64
+ Formato do relatório no chat: uma seção por bloco (nota, diagnóstico, reescrita quando aplicável), depois o score geral e as 3 prioridades mais urgentes.
65
+
66
+ ## Passo 4: PARTE 2 — Dashboard HTML
67
+
68
+ Leia `references/dashboard-spec.md` e gere o arquivo HTML completo seguindo exatamente aquela especificação (cores, fontes, estrutura, radar chart, ano dinâmico). Salve o arquivo como `linkedin-dashboard.html` no diretório de trabalho atual (ou pergunte onde salvar) e confirme o caminho absoluto no chat. Se o usuário forneceu foto ou capa, converta para base64 e embuta no HTML para o arquivo ficar autocontido.
69
+
70
+ ## Passo 5: Entregar
71
+
72
+ No chat, em português:
73
+
74
+ - Score geral e veredito em uma frase
75
+ - As 3 prioridades mais urgentes
76
+ - Caminho absoluto do arquivo HTML e como abrir (duplo clique ou `open <caminho>`)
77
+
78
+ ## Exemplos
79
+
80
+ ### Exemplo 1: usuário cola o resumo e pede avaliação
81
+
82
+ Usuário: "avalia meu LinkedIn, meu objetivo é autoridade em IA" + texto do resumo colado.
83
+ Ações: pedir foto/capa e seguidores (se faltarem) → analisar as 8 seções com notas → gerar o dashboard.
84
+ Resultado: relatório com notas no chat + `linkedin-dashboard.html` salvo.
85
+
86
+ ### Exemplo 2: usuário envia só o PDF do currículo
87
+
88
+ Usuário: "meu objetivo é emprego, aqui está meu currículo exportado" + PDF.
89
+ Ações: extrair o texto do PDF → analisar com o que existe e anotar as lacunas → gerar o dashboard.
90
+ Resultado: análise honesta sobre os dados disponíveis, sem inventar.
91
+
92
+ ## Troubleshooting
93
+
94
+ - **Usuário não informou o objetivo:** pergunte antes de analisar — a calibração muda notas e prioridades.
95
+ - **Dados insuficientes (ex: sem experiências, sem atividade):** pontue com base no que existe, marque a seção como "sem dados" quando não der para avaliar e diga o que pedir.
96
+ - **Só tem o PDF do currículo:** o PDF não traz foto, capa, URL personalizada nem atividade — avalie o que der e indique o que falta.
97
+ - **Radar chart não aparece:** confirme que o canvas tem altura definida no CSS e que o JS roda depois do DOM (script no fim do body ou DOMContentLoaded).
98
+ - **Fotos não abrem no navegador:** use base64 embutido em vez de caminho relativo — arquivo HTML local não carrega caminhos arbitrários de forma confiável.
@@ -0,0 +1,43 @@
1
+ # Especificação do dashboard HTML do LinkedIn Audit
2
+
3
+ Gere UM arquivo HTML completo, standalone: CSS e JS inline, sem bibliotecas externas. Única exceção: fontes Google (Inter + DM Mono). O arquivo deve abrir direto no navegador via `file://` sem erros.
4
+
5
+ ## Paleta (usar exatamente estes valores)
6
+
7
+ - Azul principal: `#0A66C2`
8
+ - Azul escuro: `#004182`
9
+ - Fundo claro: `#F3F2EF`
10
+ - Superfície branca: `#FFFFFF`
11
+ - Texto principal: `#1C1C1C`
12
+ - Texto secundário: `#666666`
13
+ - Verde (notas ≥ 8): `#057642`
14
+ - Amarelo (notas 5–7): `#E8A400`
15
+ - Vermelho (notas < 5): `#CC1016`
16
+
17
+ Faixas de cor da nota na lógica JS: `nota >= 8 ? verde : nota >= 5 ? amarelo : vermelho`.
18
+
19
+ ## Fontes
20
+
21
+ Google Fonts: `Inter` (texto) + `DM Mono` (números, notas e destaques). Inclua o `<link>` no head com fallback `sans-serif` / `monospace`.
22
+
23
+ ## Estrutura obrigatória
24
+
25
+ 1. **Header** — nome do usuário, objetivo declarado e número de seguidores; foto de perfil quando fornecida (embutida em base64, redonda); o ano atual gerado dinamicamente com `new Date().getFullYear()` — NUNCA ano fixo no código.
26
+ 2. **Banner de score geral** — nota em um círculo (cor conforme a faixa) e veredito em uma frase.
27
+ 3. **Grid de cards, um por seção (8)** — cada card com:
28
+ - Nome da seção + ícone emoji
29
+ - Nota colorida conforme a faixa
30
+ - Barra de progresso animada na cor correspondente (anima de 0 até a nota ao carregar, via CSS transition ou animação JS)
31
+ - Diagnóstico curto
32
+ - Box "Reescrita sugerida" com borda esquerda azul `#0A66C2` — SOMENTE quando a nota < 7
33
+ 4. **Radar chart (canvas)** — com as 8 dimensões, desenhado em JS puro (sem bibliotecas): eixos, grades, polígono preenchido com leve transparência, rótulos das dimensões e valores das notas. O canvas precisa de altura definida (ex: 320–380px) para renderizar.
34
+ 5. **Footer** — as 3 prioridades mais urgentes em destaque.
35
+
36
+ ## Regras de implementação
37
+
38
+ - Título da aba: `LinkedIn Audit — <nome>`.
39
+ - Layout responsivo: grid com `auto-fit minmax(280px, 1fr)` ou equivalente; header empilha em telas estreitas.
40
+ - Radar chart: normalizar notas para o raio (0–10 → 0–100%); desenhar com `Math.cos`/`Math.sin`; fundo `#FFFFFF`, grade e texto em `#666666`, polígono em `#0A66C2` com preenchimento `rgba(10,102,194,0.25)`.
41
+ - Imagens (foto de perfil, capa): base64 embutido; sem imagens, omitir o elemento sem quebrar o layout.
42
+ - Não usar ano fixo em lugar nenhum do HTML/JS.
43
+ - Todo o conteúdo (nomes, notas, diagnósticos, reescritas, prioridades) vem da análise do Passo 3 da SKILL.md — nunca gere conteúdo aleatório ou inventado.
@@ -0,0 +1,13 @@
1
+ # memory-management
2
+
3
+ Lightweight agent memory for non-Guild projects. Maintains project decisions and error patterns in a flat `.agent-memory/` directory.
4
+
5
+ | Field | Value |
6
+ |-------|-------|
7
+ | Version | 1.0.0 |
8
+ | Trigger | `/memory`, "agent memory", "project memory", "remember this", "record decision", "capture learning" |
9
+ | PT trigger | `/memória`, "memória do agente", "memória do projeto", "lembrar disso", "registrar decisão", "capturar aprendizado" |
10
+
11
+ **Do not use for** Guild projects (use guild-commit-learning), large knowledge bases, or replacing a proper wiki.
12
+
13
+ See [SKILL.md](SKILL.md) for the full process.
@@ -0,0 +1,198 @@
1
+ ---
2
+ name: memory-management
3
+ description: >
4
+ Lightweight agent memory for non-Guild projects. Maintains project decisions
5
+ and error patterns in a flat .agent-memory/ directory so future sessions
6
+ can learn from past work.
7
+ EN triggers: /memory, agent memory, project memory, remember this, record decision, capture learning.
8
+ PT triggers: /memória, memória do agente, memória do projeto, lembrar disso, registrar decisão, capturar aprendizado.
9
+ Do NOT use for: Guild projects (use guild-commit-learning), large knowledge bases, or replacing a proper wiki.
10
+ license: CC-BY-4.0
11
+ ---
12
+
13
+ # memory-management
14
+
15
+ Lightweight agent memory for non-Guild projects. Maintains project decisions and error patterns in a flat `.agent-memory/` directory.
16
+
17
+ ```
18
+ DECIDE → SELECT FILE → FORMAT ENTRY → WRITE → VERIFY
19
+ ```
20
+
21
+ ---
22
+
23
+ ## Overview
24
+
25
+ This skill maintains two flat files in `.agent-memory/` so AI agents can persist learnings across sessions. It is intentionally simpler than Guild's `guild-commit-learning` — designed for solo developers and small teams that do not run the full Guild orchestration system.
26
+
27
+ No archive subfolder, no promotion rules, no index maintenance. Two files, one directory, one format.
28
+
29
+ ---
30
+
31
+ ## Directory Structure
32
+
33
+ ```
34
+ .agent-memory/
35
+ ├── project_decisions.md # Architectural decisions, conventions, rationale
36
+ └── error_patterns.md # Bugs encountered, root causes, fixes applied
37
+ ```
38
+
39
+ Create the directory and both files on first use. Do not create any subdirectories or additional files.
40
+
41
+ ---
42
+
43
+ ## When to Use
44
+
45
+ Write to `.agent-memory/` when:
46
+
47
+ - A feature is complete and the decisions behind it are not obvious from code
48
+ - A tricky bug was fixed and the root-cause discovery is worth preserving
49
+ - An architectural choice was made (library selection, pattern adoption, API design)
50
+ - A convention was established that future sessions should follow
51
+ - You want the next agent session to know what you learned
52
+
53
+ Do not write when:
54
+
55
+ - The change is trivial and self-evident from the code
56
+ - The information duplicates what is already in ADRs, README, or docs
57
+ - You are on a Guild project (use `guild-commit-learning` instead)
58
+
59
+ ---
60
+
61
+ ## Process
62
+
63
+ ### Step 1: Decide
64
+
65
+ Ask: Is this worth remembering?
66
+
67
+ - Does it have cross-session value?
68
+ - Is it not obvious from reading the code?
69
+ - Would knowing this save future time?
70
+
71
+ If the answer to all three is yes, proceed.
72
+
73
+ ### Step 2: Select the Right File
74
+
75
+ | If the entry is about... | Write to... |
76
+ |--------------------------|-------------|
77
+ | Architectural decisions, library choices, pattern adoption, API design, conventions, rationale for a technical choice | `project_decisions.md` |
78
+ | Bugs encountered, root causes, fixes applied, symptoms, how to prevent recurrence | `error_patterns.md` |
79
+
80
+ When in doubt, prefer `project_decisions.md` for anything structural and `error_patterns.md` for anything reactive (discovered through failure).
81
+
82
+ ### Step 3: Format the Entry
83
+
84
+ Use one consistent format for both files. Append new entries at the top so the most recent learning appears first.
85
+
86
+ ```markdown
87
+ ## [Title] (YYYY-MM-DD)
88
+
89
+ **Context**: [what was happening — the situation, the task, the system state]
90
+
91
+ **Decision/Discovery**: [what was decided or found — the thing worth remembering]
92
+
93
+ **Rationale**: [why this matters — alternatives considered, future impact, prevention]
94
+ ```
95
+
96
+ Rules for good entries:
97
+
98
+ - **Title** is specific and searchable. Prefer "Why the auth service uses RS256 instead of HS256" over "Auth decision".
99
+ - **Context** gives enough background to understand the entry without reading the full codebase.
100
+ - **Decision/Discovery** states the conclusion clearly. One entry = one idea.
101
+ - **Rationale** explains the why. An entry without rationale is just a fact; with rationale it is a lesson.
102
+ - **No secrets.** Never capture API keys, tokens, passwords, or internal URLs.
103
+
104
+ ### Step 4: Write
105
+
106
+ Read the target file first. Append the new entry at the top, leaving one blank line before the previous entry.
107
+
108
+ ```bash
109
+ # Create directory and files if they do not exist
110
+ mkdir -p .agent-memory
111
+ [ ! -f .agent-memory/project_decisions.md ] && echo "# Project Decisions\n" > .agent-memory/project_decisions.md
112
+ [ ! -f .agent-memory/error_patterns.md ] && echo "# Error Patterns\n" > .agent-memory/error_patterns.md
113
+ ```
114
+
115
+ ### Step 5: Keep It Current
116
+
117
+ When re-reading entries for context:
118
+
119
+ - **Update** entries that have changed (e.g., a decision was revisited and reversed). Add a note like *(Updated: YYYY-MM-DD)* and describe what changed.
120
+ - **Remove** entries that are no longer relevant (e.g., a bug fixed by a library upgrade).
121
+ - **Merge** entries that cover the same topic. Prefer one good entry over two partial ones.
122
+
123
+ ---
124
+
125
+ ## Example Entries
126
+
127
+ ### project_decisions.md
128
+
129
+ ```markdown
130
+ ## Adopted Zod v4 for runtime validation (2026-07-15)
131
+
132
+ **Context**: Evaluating validation libraries for the new API layer. Needed runtime type checking with TypeScript inference.
133
+
134
+ **Decision/Discovery**: Chose Zod v4 over Yup and io-ts. Zod's TypeScript integration is tighter, the API is simpler, and v4 adds string formats and better error messages.
135
+
136
+ **Rationale**: Yup has more plugins but weaker TypeScript inference. io-ts is powerful but harder to teach. Zod v4 strikes the right balance for a team that values type safety but not functional programming purity.
137
+ ```
138
+
139
+ ```markdown
140
+ ## REST over GraphQL for internal services (2026-07-10)
141
+
142
+ **Context**: Designing inter-service communication for the new orders platform.
143
+
144
+ **Decision/Discovery**: REST with OpenAPI schemas, not GraphQL. Internal services need simple request/response contracts; GraphQL adds query complexity without benefit for machine-to-machine calls.
145
+
146
+ **Rationale**: GraphQL excels when a single client needs flexible data shapes. Our internal consumers are other services with fixed needs. REST + OpenAPI gives us contract generation and simpler caching.
147
+ ```
148
+
149
+ ### error_patterns.md
150
+
151
+ ```markdown
152
+ ## SQLite "database is locked" under concurrent writes (2026-07-16)
153
+
154
+ **Context**: Integration tests started failing with SQLITE_BUSY after adding parallel test workers.
155
+
156
+ **Decision/Discovery**: Root cause was multiple workers opening write transactions on the same SQLite file. SQLite serializes writes — concurrent writers get "database is locked".
157
+
158
+ **Rationale**: Fix was setting `busyTimeout` to 5000ms and adding `WAL` journal mode. For future: if write concurrency grows, switch to a client-server database. SQLite is fine for reads but serializes writes by design.
159
+ ```
160
+
161
+ ```markdown
162
+ ## Environment variable leak in CI logs (2026-07-14)
163
+
164
+ **Context**: CI logs were printing full environment variables when a build script failed, exposing DATABASE_URL and API keys.
165
+
166
+ **Decision/Discovery**: The build script used `console.log(process.env)` in its error handler. Secrets appeared in plaintext in the CI job output.
167
+
168
+ **Rationale**: Removed the full env dump. Replaced with a filtered log that redacts values matching known secret key patterns. Added a pre-commit hook that scans for `process.env` in logging statements.
169
+ ```
170
+
171
+ ---
172
+
173
+ ## Verification
174
+
175
+ After writing to `.agent-memory/`:
176
+
177
+ - [ ] Both `.agent-memory/project_decisions.md` and `.agent-memory/error_patterns.md` exist
178
+ - [ ] New entry is at the top of the correct file
179
+ - [ ] Entry has a dated title, Context, Decision/Discovery, and Rationale sections
180
+ - [ ] Entry has enough context to be useful standalone — a new session can understand it without reading the full codebase
181
+ - [ ] No secrets, tokens, passwords, or internal URLs captured
182
+ - [ ] Entry does not duplicate information already in ADRs, README, or docs
183
+
184
+ ---
185
+
186
+ ## When Not to Use This Skill
187
+
188
+ - **Guild projects.** Use `guild-commit-learning` instead — it integrates with Guild's orchestration, analytics, and knowledge graph.
189
+ - **Large knowledge bases.** Two flat files do not scale to team-wide knowledge management. When you outgrow this, consider a wiki, Notion, or Guild.
190
+ - **Replacing proper documentation.** `.agent-memory/` complements ADRs and READMEs — it does not replace them. Decisions that affect the team or public API still belong in ADRs.
191
+
192
+ ---
193
+
194
+ ## See Also
195
+
196
+ - `guild-commit-learning` — Full Guild-integrated memory system with archive, promotion rules, and index maintenance
197
+ - `spec-driven` — Feature workflow that produces specs worth recording as decisions
198
+ - `code-review-and-quality` — Reviews that surface bugs worth capturing in `error_patterns.md`
@@ -0,0 +1,13 @@
1
+ # security-and-hardening
2
+
3
+ Harden code against vulnerabilities with the OWASP Top 10 and a three-tier boundary system (input, processing, output).
4
+
5
+ | Field | Value |
6
+ |-------|-------|
7
+ | Version | 1.1.0 |
8
+ | Trigger | `/security`, "security audit", "OWASP", "three-tier boundary", "least privilege" |
9
+ | PT trigger | `/segurança`, "auditoria de segurança", "privilégio mínimo" |
10
+
11
+ **Do not use for** non-security performance work (use `/review`'s performance axis) or dependency updates with no security exposure.
12
+
13
+ See [SKILL.md](SKILL.md) for the full process.