create-genia-os 2.0.0 → 2.1.1

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 (88) hide show
  1. package/README.md +154 -0
  2. package/bin/index.js +240 -0
  3. package/package.json +40 -42
  4. package/template/.claude/CLAUDE.md +215 -0
  5. package/template/.claude/agent-memory/analyst/MEMORY.md +20 -0
  6. package/template/.claude/agent-memory/architect/MEMORY.md +20 -0
  7. package/template/.claude/agent-memory/dev/MEMORY.md +20 -0
  8. package/template/.claude/agent-memory/devops/MEMORY.md +20 -0
  9. package/template/.claude/agent-memory/pm/MEMORY.md +20 -0
  10. package/template/.claude/agent-memory/po/MEMORY.md +20 -0
  11. package/template/.claude/agent-memory/qa/MEMORY.md +20 -0
  12. package/template/.claude/agent-memory/reviewer/MEMORY.md +20 -0
  13. package/template/.claude/agent-memory/sm/MEMORY.md +20 -0
  14. package/template/.claude/hooks/enforce-git-push-authority.py +70 -0
  15. package/template/.claude/hooks/precompact-session-digest.cjs +87 -0
  16. package/template/.claude/hooks/sql-governance.py +65 -0
  17. package/template/.claude/hooks/synapse-engine.cjs +122 -0
  18. package/template/.claude/hooks/write-path-validation.py +59 -0
  19. package/template/.claude/rules/agent-authority.md +39 -0
  20. package/template/.claude/rules/agent-handoff.md +71 -0
  21. package/template/.claude/rules/agent-memory.md +61 -0
  22. package/template/.claude/rules/ids-principles.md +52 -0
  23. package/template/.claude/rules/mcp-usage.md +49 -0
  24. package/template/.claude/rules/story-lifecycle.md +87 -0
  25. package/template/.claude/rules/workflow-execution.md +68 -0
  26. package/template/.claude/settings.json +58 -0
  27. package/template/.claude/settings.local.json +14 -0
  28. package/template/.genia/CONSTITUTION.md +129 -0
  29. package/template/.genia/contexts/api-patterns.md +134 -0
  30. package/template/.genia/contexts/nextjs-react.md +210 -0
  31. package/template/.genia/contexts/projeto.md +18 -0
  32. package/template/.genia/contexts/supabase.md +152 -0
  33. package/template/.genia/contexts/whatsapp-cloud.md +176 -0
  34. package/template/.genia/core-config.yaml +192 -0
  35. package/template/.genia/development/agents/analyst.md +138 -0
  36. package/template/.genia/development/agents/architect.md +171 -0
  37. package/template/.genia/development/agents/dev.md +160 -0
  38. package/template/.genia/development/agents/devops.md +200 -0
  39. package/template/.genia/development/agents/pm.md +142 -0
  40. package/template/.genia/development/agents/po.md +165 -0
  41. package/template/.genia/development/agents/qa.md +183 -0
  42. package/template/.genia/development/agents/reviewer.md +198 -0
  43. package/template/.genia/development/agents/sm.md +230 -0
  44. package/template/.genia/development/checklists/architecture-review.md +189 -0
  45. package/template/.genia/development/checklists/pre-commit.md +205 -0
  46. package/template/.genia/development/checklists/pre-deploy.md +230 -0
  47. package/template/.genia/development/checklists/qa-gate.md +216 -0
  48. package/template/.genia/development/checklists/story-dod.md +155 -0
  49. package/template/.genia/development/tasks/code-review.md +197 -0
  50. package/template/.genia/development/tasks/criar-prd.md +170 -0
  51. package/template/.genia/development/tasks/criar-spec.md +188 -0
  52. package/template/.genia/development/tasks/criar-story.md +185 -0
  53. package/template/.genia/development/tasks/debug-sistematico.md +230 -0
  54. package/template/.genia/development/tasks/dev-implement.md +199 -0
  55. package/template/.genia/development/tasks/qa-review.md +224 -0
  56. package/template/.genia/development/workflows/brownfield.md +178 -0
  57. package/template/.genia/development/workflows/delivery.md +208 -0
  58. package/template/.genia/development/workflows/development.md +189 -0
  59. package/template/.genia/development/workflows/greenfield.md +166 -0
  60. package/template/.genia/development/workflows/planning.md +167 -0
  61. package/template/.genia/development/workflows/qa-loop.md +179 -0
  62. package/template/.genia/development/workflows/spec-pipeline.md +192 -0
  63. package/template/.genia/development/workflows/story-development-cycle.md +252 -0
  64. package/template/.genia/guidelines/clean-code.md +98 -0
  65. package/template/.genia/guidelines/testing.md +176 -0
  66. package/template/.genia/skills/design/canvas-design.md +109 -0
  67. package/template/.genia/skills/design/frontend-design.md +140 -0
  68. package/template/.genia/skills/dev/mcp-builder.md +172 -0
  69. package/template/.genia/skills/dev/webapp-testing.md +150 -0
  70. package/template/.genia/skills/documents/docx.md +153 -0
  71. package/template/.genia/skills/documents/pdf.md +134 -0
  72. package/template/.genia/skills/documents/pptx.md +118 -0
  73. package/template/.genia/skills/documents/xlsx.md +140 -0
  74. package/template/.synapse/agent-analyst +8 -0
  75. package/template/.synapse/agent-architect +8 -0
  76. package/template/.synapse/agent-dev +8 -0
  77. package/template/.synapse/agent-devops +8 -0
  78. package/template/.synapse/agent-pm +8 -0
  79. package/template/.synapse/agent-po +7 -0
  80. package/template/.synapse/agent-qa +8 -0
  81. package/template/.synapse/agent-reviewer +7 -0
  82. package/template/.synapse/agent-sm +7 -0
  83. package/template/.synapse/constitution +7 -0
  84. package/template/.synapse/context +8 -0
  85. package/template/.synapse/global +8 -0
  86. package/template/.synapse/manifest +14 -0
  87. package/template/README.md +53 -0
  88. package/bin/create.js +0 -181
@@ -0,0 +1,20 @@
1
+ # MEMORY — @analyst (Ana)
2
+ > Analista de Negócios — {PROJECT_NAME}
3
+ > Última atualização: {SETUP_DATE}
4
+
5
+ ## Padrões Confirmados
6
+
7
+ _Nenhum ainda._
8
+
9
+ ## Preferências da Usuária
10
+
11
+ - Idioma: {LANGUAGE}
12
+ - Projeto: {PROJECT_NAME}
13
+
14
+ ## Regra Crítica
15
+
16
+ Apenas briefings e requisitos. Zero código.
17
+
18
+ ## Gotchas
19
+
20
+ _Nenhum ainda._
@@ -0,0 +1,20 @@
1
+ # MEMORY — @architect (Arqui)
2
+ > Arquiteta de Sistemas — {PROJECT_NAME}
3
+ > Última atualização: {SETUP_DATE}
4
+
5
+ ## Padrões Confirmados
6
+
7
+ _Nenhum ainda._
8
+
9
+ ## Preferências da Usuária
10
+
11
+ - Idioma: {LANGUAGE}
12
+ - Projeto: {PROJECT_NAME}
13
+
14
+ ## Regra Crítica
15
+
16
+ VETO técnico absoluto. Nenhuma decisão de arquitetura sem aprovação.
17
+
18
+ ## Gotchas
19
+
20
+ _Nenhum ainda._
@@ -0,0 +1,20 @@
1
+ # MEMORY — @dev (Dev)
2
+ > Desenvolvedor Full Stack — {PROJECT_NAME}
3
+ > Última atualização: {SETUP_DATE}
4
+
5
+ ## Padrões Confirmados
6
+
7
+ _Nenhum ainda._
8
+
9
+ ## Preferências da Usuária
10
+
11
+ - Idioma: {LANGUAGE}
12
+ - Projeto: {PROJECT_NAME}
13
+
14
+ ## Regra Crítica
15
+
16
+ Implementa APENAS stories aprovadas por @po. NUNCA faz git push.
17
+
18
+ ## Gotchas
19
+
20
+ _Nenhum ainda._
@@ -0,0 +1,20 @@
1
+ # MEMORY — @devops (Gate)
2
+ > DevOps Engineer — {PROJECT_NAME}
3
+ > Última atualização: {SETUP_DATE}
4
+
5
+ ## Padrões Confirmados
6
+
7
+ _Nenhum ainda._
8
+
9
+ ## Preferências da Usuária
10
+
11
+ - Idioma: {LANGUAGE}
12
+ - Projeto: {PROJECT_NAME}
13
+
14
+ ## Regra Crítica
15
+
16
+ Único agente com autoridade para git push, PR e releases.
17
+
18
+ ## Gotchas
19
+
20
+ _Nenhum ainda._
@@ -0,0 +1,20 @@
1
+ # MEMORY — @pm (Marina)
2
+ > Product Manager — {PROJECT_NAME}
3
+ > Última atualização: {SETUP_DATE}
4
+
5
+ ## Padrões Confirmados
6
+
7
+ _Nenhum ainda._
8
+
9
+ ## Preferências da Usuária
10
+
11
+ - Idioma: {LANGUAGE}
12
+ - Projeto: {PROJECT_NAME}
13
+
14
+ ## Regra Crítica
15
+
16
+ PRD aprovado por @po antes de qualquer story.
17
+
18
+ ## Gotchas
19
+
20
+ _Nenhum ainda._
@@ -0,0 +1,20 @@
1
+ # MEMORY — @po (Pax)
2
+ > Product Owner — {PROJECT_NAME}
3
+ > Última atualização: {SETUP_DATE}
4
+
5
+ ## Padrões Confirmados
6
+
7
+ _Nenhum ainda._
8
+
9
+ ## Preferências da Usuária
10
+
11
+ - Idioma: {LANGUAGE}
12
+ - Projeto: {PROJECT_NAME}
13
+
14
+ ## Regra Crítica
15
+
16
+ Story com menos de 8/10 pontos no checklist = REJEITADA.
17
+
18
+ ## Gotchas
19
+
20
+ _Nenhum ainda._
@@ -0,0 +1,20 @@
1
+ # MEMORY — @qa (Quinn)
2
+ > QA Engineer — {PROJECT_NAME}
3
+ > Última atualização: {SETUP_DATE}
4
+
5
+ ## Padrões Confirmados
6
+
7
+ _Nenhum ainda._
8
+
9
+ ## Preferências da Usuária
10
+
11
+ - Idioma: {LANGUAGE}
12
+ - Projeto: {PROJECT_NAME}
13
+
14
+ ## Regra Crítica
15
+
16
+ Veredicto de qualidade é final. Aprovação obrigatória antes de @reviewer.
17
+
18
+ ## Gotchas
19
+
20
+ _Nenhum ainda._
@@ -0,0 +1,20 @@
1
+ # MEMORY — @reviewer (Rev)
2
+ > Code Reviewer — {PROJECT_NAME}
3
+ > Última atualização: {SETUP_DATE}
4
+
5
+ ## Padrões Confirmados
6
+
7
+ _Nenhum ainda._
8
+
9
+ ## Preferências da Usuária
10
+
11
+ - Idioma: {LANGUAGE}
12
+ - Projeto: {PROJECT_NAME}
13
+
14
+ ## Regra Crítica
15
+
16
+ LGTM ou CHANGES REQUESTED. Sem meio-termo.
17
+
18
+ ## Gotchas
19
+
20
+ _Nenhum ainda._
@@ -0,0 +1,20 @@
1
+ # MEMORY — @sm (Sami)
2
+ > Scrum Master — {PROJECT_NAME}
3
+ > Última atualização: {SETUP_DATE}
4
+
5
+ ## Padrões Confirmados
6
+
7
+ _Nenhum ainda._
8
+
9
+ ## Preferências da Usuária
10
+
11
+ - Idioma: {LANGUAGE}
12
+ - Projeto: {PROJECT_NAME}
13
+
14
+ ## Regra Crítica
15
+
16
+ Único agente que cria STORY-*.md. Toda story vai para @po antes de @dev.
17
+
18
+ ## Gotchas
19
+
20
+ _Nenhum ainda._
@@ -0,0 +1,70 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ GEN.IA OS — Hook: enforce-git-push-authority
4
+ Trigger: PreToolUse (Bash)
5
+ Ação: Bloqueia git push por agentes não-devops.
6
+ Permite push quando @devops está autorizado via flag file.
7
+ Artigo II da Constituição GEN.IA OS — NÃO-NEGOCIÁVEL.
8
+
9
+ Protocolo de autorização:
10
+ 1. Claude pergunta à usuária se quer invocar @devops
11
+ 2. Se sim, @devops cria .genia/session/devops-active
12
+ 3. Este hook lê o flag e permite o push (uma única vez)
13
+ 4. Flag é removido automaticamente após uso
14
+ """
15
+ import json
16
+ import os
17
+ import sys
18
+ import re
19
+
20
+
21
+ PUSH_PATTERNS = [
22
+ r"\bgit\s+push\b",
23
+ r"\bgit\s+push\s+--force\b",
24
+ r"\bgit\s+push\s+-f\b",
25
+ r"\bgit\s+push\s+-u\b",
26
+ ]
27
+
28
+ FLAG_FILE = ".genia/session/devops-active"
29
+
30
+
31
+ def main():
32
+ try:
33
+ raw = sys.stdin.read()
34
+ data = json.loads(raw)
35
+ except Exception:
36
+ sys.exit(0)
37
+
38
+ tool = data.get("tool_name", "")
39
+ if tool != "Bash":
40
+ sys.exit(0)
41
+
42
+ command = data.get("tool_input", {}).get("command", "")
43
+
44
+ for pattern in PUSH_PATTERNS:
45
+ if re.search(pattern, command, re.IGNORECASE):
46
+ # Verificar se @devops foi autorizado via flag file
47
+ if os.path.exists(FLAG_FILE):
48
+ try:
49
+ os.remove(FLAG_FILE) # Consumir o flag (uso único)
50
+ except Exception:
51
+ pass
52
+ print(
53
+ "[GEN.IA OS] ✅ @devops (Gate) autorizado — executando push.",
54
+ file=sys.stderr,
55
+ )
56
+ sys.exit(0) # Permitir
57
+
58
+ # Sem autorização — bloquear
59
+ print(
60
+ "[GEN.IA OS] 🚫 BLOQUEADO — Artigo II: Apenas @devops pode executar git push.\n"
61
+ "[GEN.IA OS] Diga: '@devops faça o push' para invocar Gate.",
62
+ file=sys.stderr,
63
+ )
64
+ sys.exit(2) # exit 2 = BLOCK no Claude Code
65
+
66
+ sys.exit(0)
67
+
68
+
69
+ if __name__ == "__main__":
70
+ main()
@@ -0,0 +1,87 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * GEN.IA OS — Session Digest
4
+ * Trigger: PreCompact
5
+ *
6
+ * Salva um resumo da sessão antes do Claude compactar o contexto.
7
+ * Preserva memória institucional entre sessões longas.
8
+ * Inspirado no AIOS precompact-session-digest (MIT License, SynkraAI)
9
+ */
10
+
11
+ 'use strict';
12
+
13
+ const fs = require('fs');
14
+ const path = require('path');
15
+ const readline = require('readline');
16
+
17
+ async function main() {
18
+ let inputData = '';
19
+ try {
20
+ const rl = readline.createInterface({ input: process.stdin, terminal: false });
21
+ for await (const line of rl) {
22
+ inputData += line + '\n';
23
+ }
24
+ } catch (_) {
25
+ process.exit(0);
26
+ }
27
+
28
+ let data = {};
29
+ try {
30
+ data = JSON.parse(inputData);
31
+ } catch (_) {
32
+ process.exit(0);
33
+ }
34
+
35
+ const cwd = data.cwd || process.cwd();
36
+ const sessionId = data.session_id || 'unknown';
37
+ const timestamp = new Date()
38
+ .toISOString()
39
+ .slice(0, 19)
40
+ .replace('T', '_')
41
+ .replace(/:/g, '-');
42
+
43
+ const digestDir = path.join(cwd, '.genia', 'session-digests');
44
+ try {
45
+ fs.mkdirSync(digestDir, { recursive: true });
46
+ } catch (_) {
47
+ process.exit(0);
48
+ }
49
+
50
+ const digestPath = path.join(digestDir, `digest-${timestamp}.md`);
51
+
52
+ const content = `# Session Digest — ${timestamp}
53
+
54
+ **Session ID:** ${sessionId}
55
+ **Sistema:** GEN.IA OS — {{TEAM_NAME}}
56
+
57
+ ## Contexto Compactado
58
+
59
+ O Claude Code compactou o contexto desta sessão.
60
+ Este arquivo preserva o estado para retomada.
61
+
62
+ ## Como Retomar
63
+
64
+ 1. Leia as stories ativas em \`docs/stories/\`
65
+ 2. Verifique \`.genia/session/workflow-state.md\` para workflow em andamento
66
+ 3. Consulte \`.claude/agent-memory/[agente]/MEMORY.md\` do agente ativo
67
+ 4. Verifique git log para entender o que foi commitado
68
+
69
+ ## Dica
70
+
71
+ Ao retomar, informe ao agente:
72
+ > "Estou retomando a sessão. [descreva o contexto brevemente]"
73
+
74
+ ---
75
+ *Gerado automaticamente pelo GEN.IA OS Synapse Engine*
76
+ `;
77
+
78
+ try {
79
+ fs.writeFileSync(digestPath, content, 'utf8');
80
+ } catch (_) {
81
+ // Falha silenciosa — nunca bloquear o usuário
82
+ }
83
+
84
+ process.exit(0);
85
+ }
86
+
87
+ main().catch(() => process.exit(0));
@@ -0,0 +1,65 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ GEN.IA OS — Hook: sql-governance
4
+ Trigger: PreToolUse (Bash)
5
+ Ação: Bloqueia DDL SQL perigoso executado diretamente.
6
+ Permite operações via supabase CLI, pg_dump e psql -f (migrations controladas).
7
+ """
8
+ import json
9
+ import sys
10
+ import re
11
+
12
+
13
+ DANGEROUS_PATTERNS = [
14
+ r"\bDROP\s+TABLE\b",
15
+ r"\bDROP\s+DATABASE\b",
16
+ r"\bDROP\s+SCHEMA\b",
17
+ r"\bTRUNCATE\s+TABLE\b",
18
+ r"\bTRUNCATE\b\s+\w+",
19
+ r"\bALTER\s+TABLE\b.*\bDROP\s+COLUMN\b",
20
+ r"DELETE\s+FROM\s+\w+\s*;?\s*$", # DELETE sem WHERE
21
+ ]
22
+
23
+ SAFE_PATTERNS = [
24
+ r"supabase\s+(migration|db\s+push|db\s+diff)",
25
+ r"pg_dump\b",
26
+ r"psql\s+.*-f\s+",
27
+ r"\.sql\s*$", # executar arquivo .sql explícito
28
+ ]
29
+
30
+
31
+ def main():
32
+ try:
33
+ raw = sys.stdin.read()
34
+ data = json.loads(raw)
35
+ except Exception:
36
+ sys.exit(0)
37
+
38
+ tool = data.get("tool_name", "")
39
+ if tool != "Bash":
40
+ sys.exit(0)
41
+
42
+ command = data.get("tool_input", {}).get("command", "")
43
+
44
+ # Verificar se é operação segura de migration
45
+ for safe in SAFE_PATTERNS:
46
+ if re.search(safe, command, re.IGNORECASE):
47
+ sys.exit(0)
48
+
49
+ # Verificar padrões perigosos
50
+ cmd_upper = command.upper()
51
+ for pattern in DANGEROUS_PATTERNS:
52
+ if re.search(pattern, cmd_upper):
53
+ print(
54
+ "[GEN.IA OS] 🚫 BLOQUEADO — SQL destrutivo detectado.\n"
55
+ "[GEN.IA OS] Use 'supabase migration new <nome>' para alterações de schema.\n"
56
+ "[GEN.IA OS] Migrations controladas garantem rollback seguro.",
57
+ file=sys.stderr,
58
+ )
59
+ sys.exit(2)
60
+
61
+ sys.exit(0)
62
+
63
+
64
+ if __name__ == "__main__":
65
+ main()
@@ -0,0 +1,122 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * GEN.IA OS — Synapse Engine v1.0
4
+ * Trigger: UserPromptSubmit
5
+ *
6
+ * Pipeline de 3 camadas de injeção de contexto em cada prompt:
7
+ * L0: Constituição (sempre ativa, não-negociável)
8
+ * L1: Global + Contexto (sempre ativa)
9
+ * L2: Agente específico (quando @agente detectado no prompt)
10
+ *
11
+ * Timeout: 100ms — NUNCA bloqueia o usuário
12
+ * Inspirado no AIOS Synapse Engine (MIT License, SynkraAI)
13
+ * Adaptado e reescrito para GEN.IA OS — {{TEAM_NAME}} — {{CREATOR_NAME}}
14
+ */
15
+
16
+ 'use strict';
17
+
18
+ const fs = require('fs');
19
+ const path = require('path');
20
+ const readline = require('readline');
21
+
22
+ const TIMEOUT_MS = 100;
23
+ const SYNAPSE_DIR = '.synapse';
24
+
25
+ // Mapeamento de @agente → domínio synapse
26
+ const AGENT_DOMAINS = {
27
+ '@analyst': 'agent-analyst',
28
+ '@pm': 'agent-pm',
29
+ '@architect': 'agent-architect',
30
+ '@dev': 'agent-dev',
31
+ '@devops': 'agent-devops',
32
+ '@qa': 'agent-qa',
33
+ '@reviewer': 'agent-reviewer',
34
+ '@po': 'agent-po',
35
+ '@sm': 'agent-sm',
36
+ };
37
+
38
+ function readDomain(cwd, domainName) {
39
+ try {
40
+ const domainPath = path.join(cwd, SYNAPSE_DIR, domainName);
41
+ if (fs.existsSync(domainPath)) {
42
+ return fs.readFileSync(domainPath, 'utf8').trim();
43
+ }
44
+ } catch (_) {
45
+ // Falha silenciosa — Synapse nunca quebra o fluxo
46
+ }
47
+ return null;
48
+ }
49
+
50
+ function detectActiveAgent(prompt) {
51
+ if (!prompt) return null;
52
+ const lower = prompt.toLowerCase();
53
+ for (const [mention, domain] of Object.entries(AGENT_DOMAINS)) {
54
+ if (lower.includes(mention)) {
55
+ return domain;
56
+ }
57
+ }
58
+ return null;
59
+ }
60
+
61
+ async function run() {
62
+ let inputData = '';
63
+ try {
64
+ const rl = readline.createInterface({ input: process.stdin, terminal: false });
65
+ for await (const line of rl) {
66
+ inputData += line + '\n';
67
+ }
68
+ } catch (_) {
69
+ return '';
70
+ }
71
+
72
+ let data = {};
73
+ try {
74
+ data = JSON.parse(inputData);
75
+ } catch (_) {
76
+ return '';
77
+ }
78
+
79
+ const cwd = data.cwd || process.cwd();
80
+ const prompt = data.prompt || '';
81
+ const layers = [];
82
+
83
+ // L0 — Constituição (sempre)
84
+ const constitution = readDomain(cwd, 'constitution');
85
+ if (constitution) layers.push(constitution);
86
+
87
+ // L1 — Global (sempre)
88
+ const global = readDomain(cwd, 'global');
89
+ if (global) layers.push(global);
90
+
91
+ // L1 — Contexto (sempre)
92
+ const context = readDomain(cwd, 'context');
93
+ if (context) layers.push(context);
94
+
95
+ // L2 — Agente específico (se detectado)
96
+ const agentDomain = detectActiveAgent(prompt);
97
+ if (agentDomain) {
98
+ const agentRules = readDomain(cwd, agentDomain);
99
+ if (agentRules) layers.push(agentRules);
100
+ }
101
+
102
+ if (layers.length === 0) return '';
103
+
104
+ return `<synapse-rules>\n${layers.join('\n\n')}\n</synapse-rules>`;
105
+ }
106
+
107
+ async function main() {
108
+ // Timer de segurança — garante timeout de 100ms
109
+ const timeoutPromise = new Promise((resolve) =>
110
+ setTimeout(() => resolve(''), TIMEOUT_MS)
111
+ );
112
+
113
+ const result = await Promise.race([run(), timeoutPromise]);
114
+
115
+ process.stdout.write(JSON.stringify({ hookSpecificOutput: result || '' }));
116
+ process.exit(0);
117
+ }
118
+
119
+ main().catch(() => {
120
+ process.stdout.write(JSON.stringify({ hookSpecificOutput: '' }));
121
+ process.exit(0);
122
+ });
@@ -0,0 +1,59 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ GEN.IA OS — Hook: write-path-validation
4
+ Trigger: PreToolUse (Write)
5
+ Ação: Avisa quando documentos são criados fora do path padrão.
6
+ """
7
+ import json
8
+ import sys
9
+ import re
10
+ import os
11
+
12
+
13
+ # Padrões de arquivo → path recomendado
14
+ DOC_RULES = {
15
+ r"^PRD\.md$": "docs/[projeto]/PRD.md",
16
+ r"^SPEC-TECNICO\.md$": "docs/[projeto]/SPEC-TECNICO.md",
17
+ r"^COMERCIAL\.md$": "docs/[projeto]/COMERCIAL.md",
18
+ r"^BRIEFING\.md$": "docs/[projeto]/BRIEFING.md",
19
+ r"^STORY-\d+.*\.md$": "docs/stories/STORY-NNN-slug.md",
20
+ r"^ADR-\d+.*\.md$": "docs/[projeto]/adrs/ADR-NNN-titulo.md",
21
+ }
22
+
23
+
24
+ def main():
25
+ try:
26
+ raw = sys.stdin.read()
27
+ data = json.loads(raw)
28
+ except Exception:
29
+ sys.exit(0)
30
+
31
+ tool = data.get("tool_name", "")
32
+ if tool != "Write":
33
+ sys.exit(0)
34
+
35
+ file_path = data.get("tool_input", {}).get("file_path", "")
36
+ if not file_path:
37
+ sys.exit(0)
38
+
39
+ # Normalizar separadores
40
+ normalized = file_path.replace("\\", "/")
41
+ filename = os.path.basename(normalized)
42
+
43
+ for pattern, correct_path in DOC_RULES.items():
44
+ if re.match(pattern, filename, re.IGNORECASE):
45
+ # Verificar se está no path correto
46
+ if "docs/" not in normalized:
47
+ print(
48
+ f"[GEN.IA OS] ⚠️ Documento '{filename}' fora do path padrão.\n"
49
+ f"[GEN.IA OS] Path recomendado: {correct_path}\n"
50
+ f"[GEN.IA OS] Criando assim mesmo — ajuste se necessário.",
51
+ file=sys.stderr,
52
+ )
53
+ break
54
+
55
+ sys.exit(0) # Apenas avisa, não bloqueia
56
+
57
+
58
+ if __name__ == "__main__":
59
+ main()
@@ -0,0 +1,39 @@
1
+ # Autoridade dos Agentes — GEN.IA OS
2
+
3
+ ## Matriz de Delegação
4
+
5
+ | Agente | Nome | Autoridade Exclusiva | Git Permitido | Git Bloqueado |
6
+ |--------|------|---------------------|---------------|---------------|
7
+ | @analyst | Ana | Briefing, requisitos, pesquisa | status, log, diff | push, commit, merge |
8
+ | @pm | Marina | PRD, escopo, priorização, épicos | status, log, diff | push, commit, merge |
9
+ | @architect | Arqui | Arquitetura, stack, VETO técnico | status, log, diff | push, commit, merge |
10
+ | @dev | Dev | Implementação de código | checkout, add, commit | **PUSH (BLOQUEADO)** |
11
+ | @devops | Gate | **git push, PR, release, MCP** | TUDO | nada |
12
+ | @qa | Quinn | Veredictos de qualidade, testes | status, log, diff, stash | push, commit |
13
+ | @reviewer | Rev | Code review, aprovação | status, log, diff | push, commit |
14
+ | @po | Pax | Validação de stories, backlog | status, log, diff | push, commit, merge |
15
+ | @sm | Sami | **Criação de stories**, sprint | status, log, diff | push, commit, merge |
16
+
17
+ ## Regras Invioláveis (Artigo II da Constituição)
18
+
19
+ 1. **@dev NUNCA faz push** — sempre delegar para @devops após commit
20
+ 2. **@sm é o ÚNICO que cria stories** — nenhum outro agente cria STORY-*.md
21
+ 3. **@architect tem veto técnico irrevogável** — qualquer decisão arquitetural
22
+ 4. **@po é o ÚNICO que aprova stories** para ir para desenvolvimento
23
+ 5. **@devops gerencia MCP** — nenhum outro agente adiciona/remove servidores MCP
24
+
25
+ ## Protocolo de Escalação
26
+
27
+ Quando uma tarefa está fora do seu escopo:
28
+ 1. **PARAR** imediatamente
29
+ 2. **Anunciar** o agente correto: "Esta tarefa pertence a @[agente]"
30
+ 3. **Fazer handoff** usando o protocolo de `.claude/rules/agent-handoff.md`
31
+ 4. **NÃO executar** tarefas fora da sua autoridade
32
+
33
+ ## Exemplos de Escalação Obrigatória
34
+
35
+ - @dev termina implementação → delega push para **@devops**
36
+ - @dev tem dúvida arquitetural → consulta **@architect**
37
+ - @pm precisa de requisitos → solicita para **@analyst**
38
+ - @dev precisa de story → solicita para **@sm**
39
+ - @sm criou story → entrega para **@po** validar