@andespindola/crow-skills 0.1.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 (121) hide show
  1. package/README.md +62 -0
  2. package/bin/npm-crow-skills.cjs +20 -0
  3. package/catalog.json +398 -0
  4. package/crow_skills/__init__.py +3 -0
  5. package/crow_skills/__main__.py +3 -0
  6. package/crow_skills/agents.py +45 -0
  7. package/crow_skills/cli.py +241 -0
  8. package/crow_skills/npm_entry.py +14 -0
  9. package/crow_skills/source.py +256 -0
  10. package/crow_skills/storage.py +396 -0
  11. package/docs/cli-security.md +33 -0
  12. package/docs/cli.md +138 -0
  13. package/package.json +35 -0
  14. package/release.json +607 -0
  15. package/skills/crow-accessibility/SKILL.md +33 -0
  16. package/skills/crow-agent-security/SKILL.md +33 -0
  17. package/skills/crow-api-test/SKILL.md +34 -0
  18. package/skills/crow-architecture/SKILL.md +33 -0
  19. package/skills/crow-backend/SKILL.md +33 -0
  20. package/skills/crow-behaviour/SKILL.md +70 -0
  21. package/skills/crow-behaviour/agents/openai.yaml +4 -0
  22. package/skills/crow-behaviour/references/orchestration.md +64 -0
  23. package/skills/crow-behaviour/references/quality-patterns.md +56 -0
  24. package/skills/crow-browser/SKILL.md +33 -0
  25. package/skills/crow-debug/SKILL.md +33 -0
  26. package/skills/crow-design/SKILL.md +33 -0
  27. package/skills/crow-discovery/SKILL.md +33 -0
  28. package/skills/crow-documents/SKILL.md +33 -0
  29. package/skills/crow-domain/SKILL.md +33 -0
  30. package/skills/crow-frontend/SKILL.md +33 -0
  31. package/skills/crow-growth/SKILL.md +33 -0
  32. package/skills/crow-infra/SKILL.md +38 -0
  33. package/skills/crow-infra/references/kubernetes.md +3 -0
  34. package/skills/crow-interface/NOTICE.md +20 -0
  35. package/skills/crow-interface/SKILL.md +55 -0
  36. package/skills/crow-interface/agents/impeccable_asset_producer.toml +43 -0
  37. package/skills/crow-interface/agents/impeccable_documenter.toml +28 -0
  38. package/skills/crow-interface/agents/impeccable_finish_reviewer.toml +42 -0
  39. package/skills/crow-interface/agents/impeccable_manual_edit_applier.toml +96 -0
  40. package/skills/crow-interface/agents/openai.yaml +3 -0
  41. package/skills/crow-interface/licenses/Apache-2.0.txt +191 -0
  42. package/skills/crow-interface/licenses/Impeccable-NOTICE.md +11 -0
  43. package/skills/crow-interface/licenses/modern-screenshot-MIT.txt +9 -0
  44. package/skills/crow-interface/licenses/platform-design-MIT.txt +21 -0
  45. package/skills/crow-interface/reference/adapt.md +320 -0
  46. package/skills/crow-interface/reference/adapt.native.md +60 -0
  47. package/skills/crow-interface/reference/android.md +48 -0
  48. package/skills/crow-interface/reference/animate.md +91 -0
  49. package/skills/crow-interface/reference/audit.md +139 -0
  50. package/skills/crow-interface/reference/audit.native.md +141 -0
  51. package/skills/crow-interface/reference/bolder.md +35 -0
  52. package/skills/crow-interface/reference/clarify.md +96 -0
  53. package/skills/crow-interface/reference/colorize.md +88 -0
  54. package/skills/crow-interface/reference/craft-floor.md +52 -0
  55. package/skills/crow-interface/reference/craft.md +7 -0
  56. package/skills/crow-interface/reference/critique.md +828 -0
  57. package/skills/crow-interface/reference/degraded/asset-producer.md +5 -0
  58. package/skills/crow-interface/reference/degraded/documenter.md +5 -0
  59. package/skills/crow-interface/reference/degraded/finish-reviewer.md +5 -0
  60. package/skills/crow-interface/reference/degraded/manual-edit-applier.md +5 -0
  61. package/skills/crow-interface/reference/delight.md +72 -0
  62. package/skills/crow-interface/reference/distill.md +113 -0
  63. package/skills/crow-interface/reference/doctor.md +56 -0
  64. package/skills/crow-interface/reference/document.md +418 -0
  65. package/skills/crow-interface/reference/extract.md +70 -0
  66. package/skills/crow-interface/reference/generate.md +103 -0
  67. package/skills/crow-interface/reference/harden.md +347 -0
  68. package/skills/crow-interface/reference/hooks.md +113 -0
  69. package/skills/crow-interface/reference/init.md +133 -0
  70. package/skills/crow-interface/reference/ios.md +53 -0
  71. package/skills/crow-interface/reference/layout.md +90 -0
  72. package/skills/crow-interface/reference/live-setup.md +106 -0
  73. package/skills/crow-interface/reference/live.md +329 -0
  74. package/skills/crow-interface/reference/new-work.md +149 -0
  75. package/skills/crow-interface/reference/onboard.md +236 -0
  76. package/skills/crow-interface/reference/operate.md +63 -0
  77. package/skills/crow-interface/reference/optimize.md +260 -0
  78. package/skills/crow-interface/reference/overdrive.md +129 -0
  79. package/skills/crow-interface/reference/polish.md +107 -0
  80. package/skills/crow-interface/reference/quieter.md +101 -0
  81. package/skills/crow-interface/reference/roles/asset-producer.md +38 -0
  82. package/skills/crow-interface/reference/roles/documenter.md +23 -0
  83. package/skills/crow-interface/reference/roles/finish-reviewer.md +37 -0
  84. package/skills/crow-interface/reference/roles/manual-edit-applier.md +91 -0
  85. package/skills/crow-interface/reference/routing.md +26 -0
  86. package/skills/crow-interface/reference/runtime.md +30 -0
  87. package/skills/crow-interface/reference/shape.md +61 -0
  88. package/skills/crow-interface/reference/typeset.md +86 -0
  89. package/skills/crow-interface/reference/visualize.md +48 -0
  90. package/skills/crow-interface/reference/workflow.md +53 -0
  91. package/skills/crow-interface/scripts/VERSION +1 -0
  92. package/skills/crow-interface/scripts/command-metadata.json +98 -0
  93. package/skills/crow-interface/scripts/data/font-index-failures.json +121 -0
  94. package/skills/crow-interface/scripts/data/font-index.json +1 -0
  95. package/skills/crow-interface/scripts/engine-manifest.json +13 -0
  96. package/skills/crow-interface/scripts/impeccable +106 -0
  97. package/skills/crow-interface/scripts/impeccable.cmd +3 -0
  98. package/skills/crow-interface/scripts/live-browser-dom.js +167 -0
  99. package/skills/crow-interface/scripts/live-browser-ignores.js +242 -0
  100. package/skills/crow-interface/scripts/live-browser-session.js +144 -0
  101. package/skills/crow-interface/scripts/live-browser.js +13510 -0
  102. package/skills/crow-interface/scripts/modern-screenshot.umd.js +14 -0
  103. package/skills/crow-media/SKILL.md +33 -0
  104. package/skills/crow-native-mobile/SKILL.md +33 -0
  105. package/skills/crow-observe/SKILL.md +33 -0
  106. package/skills/crow-performance/SKILL.md +38 -0
  107. package/skills/crow-performance/references/measurement.md +3 -0
  108. package/skills/crow-platform/SKILL.md +33 -0
  109. package/skills/crow-postgres/SKILL.md +33 -0
  110. package/skills/crow-product-leadership/SKILL.md +33 -0
  111. package/skills/crow-qa/SKILL.md +34 -0
  112. package/skills/crow-release/SKILL.md +35 -0
  113. package/skills/crow-reverse/SKILL.md +33 -0
  114. package/skills/crow-secrets/SKILL.md +33 -0
  115. package/skills/crow-security-review/SKILL.md +33 -0
  116. package/skills/crow-security-scan/SKILL.md +33 -0
  117. package/skills/crow-security-test/SKILL.md +33 -0
  118. package/skills/crow-seo/SKILL.md +33 -0
  119. package/skills/crow-skill-author/SKILL.md +34 -0
  120. package/skills/crow-spec/SKILL.md +33 -0
  121. package/skills/crow-threat-model/SKILL.md +33 -0
package/README.md ADDED
@@ -0,0 +1,62 @@
1
+ # crow-skills
2
+
3
+ Skills com escopo explícito, conhecimento especializado preservado e fluxos comuns reutilizáveis.
4
+
5
+ **Reconstrução em andamento.** A primeira versão com 32 contratos genéricos não atende à preservação de capacidades solicitada. Não use esse número nem o mapeamento por categoria como prova de substituição das originais. A revisão passa a abranger cada definição e seus recursos, modos e dependências, sem número fixo de skills ou limite artificial de linhas. Veja [critérios e progresso](docs/reconstruction.md).
6
+
7
+ ## Uso
8
+
9
+ 1. Escolha pela intenção, estado do projeto, stack e risco. Leia a descrição antes do corpo.
10
+ 2. Para uma tarefa localizada, use a especialista. Para uma iniciativa transversal, comece em `crow-platform`.
11
+ 3. Reutilize artefatos válidos; não repita discovery, perguntas, testes ou documentos concluídos.
12
+ 4. Entregue o artefato com alvo/revisão, evidência e pendências. Desconhecido não significa aprovado.
13
+ 5. Carregue outra skill só quando houver decisão distinta a tomar. Handoffs são opcionais, não dependências ocultas.
14
+
15
+ Para adotar uma atuação mais coordenada em qualquer domínio, use `crow-behaviour`: tarefas substantivas recebem plano, delegação suportada, verificação e síntese; conversa e ajustes triviais continuam diretos. A skill adapta o comportamento às ferramentas reais, inclusive execução sequencial, sem depender do Workflow do Claude. Ela não muda o modelo/effort nem força carregamento automático pelo host. [Escopo e evidência](analysis/crow-behaviour.md).
16
+
17
+ Exemplos:
18
+ - Plataforma nova: `crow-platform` coordena; `crow-discovery` e `crow-spec` definem o que falta; as especialistas implementam/verificam por fatia.
19
+ - Bug conhecido: `crow-debug`; sem workshop de produto.
20
+ - Endpoint: `crow-backend` implementa, `crow-api-test` verifica o contrato, `crow-security-review` revisa se o risco exigir.
21
+ - Dados Postgres: `crow-postgres` + teste do efeito real; não precisa carregar toda a biblioteca.
22
+ - Revisão: `crow-security-review` não modifica ou executa o alvo. Implementação é outra tarefa.
23
+
24
+ [Catálogo e ownership](docs/catalog.md) · [Playbooks](docs/playbooks.md) · [Contrato de composição](docs/composition.md) · [Migração](docs/migration.md)
25
+
26
+ ## Instalação e portabilidade
27
+
28
+ O pacote de cada skill é somente sua pasta em `skills/`. O [CLI crow-skills](docs/cli.md) instala cópias completas e versionadas em agentes/escopos explícitos, com preview, saída JSON, detecção de conflitos e recuperação. Requer Python 3.10+; Git para fontes em clone, Node 18+ para o launcher npm; mutações em macOS/Linux. A distribuição npm privada `@andespindola/crow-skills` inclui um snapshot completo das skills, sem clone ou hooks que as instalem automaticamente.
29
+
30
+ ```sh
31
+ ./bin/crow-skills list
32
+ ./bin/crow-skills install crow-behaviour --agents claude,codex --global --dry-run
33
+ ./bin/crow-skills install crow-behaviour --agents claude,codex --global --yes --json
34
+ ./bin/crow-skills related crow-backend --agents claude --global
35
+ ```
36
+
37
+ Também é possível copiar/referenciar manualmente as pastas escolhidas no diretório suportado pelo host. Para symlink manual, mantenha o checkout no mesmo caminho. O CLI v0.1 só instala cópias; não sobrescreve conflitos ou edições sem opção explícita e backup.
38
+
39
+ Os nomes têm prefixo `crow-` para coexistir com o catálogo anterior. Não há instalação global automática, auto-update ou reconfiguração de agentes. O CLI mostra complementaridade por role/owner/handoffs e overlays, mas só instala as selecionadas; `--with-handoffs` é opt-in para handoffs diretos. Operações especializadas podem depender de ferramentas explicitamente documentadas: `crow-interface`, por exemplo, inclui adaptador de motor versionado e instalação explícita dessa dependência. A descoberta depende do runtime; presença do arquivo não prova carregamento.
40
+
41
+ Cada pacote mantém suas referências locais e declara dependências operacionais. Os nomes de próximos responsáveis são sugestões, não downloads implícitos. Sem ferramenta necessária, entregue somente o que puder comprovar e descreva a capacidade não executada, em vez de alegar equivalência.
42
+
43
+ Criar/disponibilizar o CLI **não instala nem substitui** as skills locais de nenhum agente. Instalação, migração global e remoção de aliases antigos são operações explícitas, não efeitos de executar list/status/doctor ou de atualizar este checkout.
44
+
45
+ ## Verificação
46
+
47
+ Python 3.10+; somente biblioteca padrão:
48
+
49
+ ```sh
50
+ python3 scripts/check.py
51
+ python3 -m unittest discover -s tests -v
52
+ ```
53
+
54
+ O checker verifica frontmatter no subconjunto YAML simples usado aqui, catálogo, owners únicos, referências locais autocontidas, handoffs válidos, placeholders e exposição de caminhos privados/credenciais. Não impõe limites artificiais ao corpo, não interpreta instruções das skills nem chama ferramentas externas.
55
+
56
+ Os testes incluem mutações do pacote e invariantes de composição. Não medem a qualidade das respostas de um modelo. Avaliações comportamentais observadas, quando disponíveis, ficam em [docs/evaluations](docs/evaluations/README.md); não confundir texto esperado de fixture com teste executado por agente.
57
+
58
+ ## Manutenção
59
+
60
+ Fonte canônica: SKILL.md para instruções, catalog.json para papel/ownership/handoffs. O checker exige sincronismo de nome, descrição e saída. Altere o menor escopo que resolve a falha demonstrada. Veja [CONTRIBUTING.md](CONTRIBUTING.md).
61
+
62
+ Sem alegação de ganho percentual ou auditoria integral da biblioteca anterior. [Proveniência e limites](docs/provenance.md).
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env node
2
+ 'use strict';
3
+ const { spawnSync } = require('node:child_process');
4
+ const { resolve } = require('node:path');
5
+
6
+ const args = process.argv.slice(2);
7
+ const python = process.env.CROW_SKILLS_PYTHON || 'python3';
8
+ // A direct Python entry file avoids importing from the caller's CWD/PYTHONPATH.
9
+ const entry = resolve(__dirname, '..', 'crow_skills', 'npm_entry.py');
10
+ const result = spawnSync(python, ['-I', entry, ...args], { stdio: 'inherit', shell: false });
11
+ if (result.error) {
12
+ const error = { code: 'python_unavailable', message: 'Python 3.10+ é necessário. Instale-o ou defina CROW_SKILLS_PYTHON para o executável.' };
13
+ if (args.includes('--json')) process.stdout.write(JSON.stringify({ schema_version: 1, ok: false, command: null, error }) + '\n');
14
+ else process.stderr.write(error.message + '\n');
15
+ process.exitCode = 1;
16
+ } else if (result.signal) {
17
+ process.exitCode = result.signal === 'SIGINT' ? 130 : 1;
18
+ } else {
19
+ process.exitCode = result.status === null ? 1 : result.status;
20
+ }
package/catalog.json ADDED
@@ -0,0 +1,398 @@
1
+ {
2
+ "version": 1,
3
+ "composition": {
4
+ "overlays": [
5
+ {
6
+ "skill": "crow-behaviour",
7
+ "roles": ["coordinator", "specialist", "reviewer"]
8
+ }
9
+ ]
10
+ },
11
+ "skills": [
12
+ {
13
+ "name": "crow-behaviour",
14
+ "title": "Atuação coordenada",
15
+ "description": "Aplique um modo de atuação orientado a orquestração, profundidade e verificação em tarefas substantivas. Decomponha, delegue com as capacidades reais do agente e sintetize evidências. Em conversa ou ajustes triviais, responda diretamente; não simule agentes nem altere permissões.",
16
+ "role": "coordinator",
17
+ "owns": "execution-ledger",
18
+ "next": []
19
+ },
20
+ {
21
+ "name": "crow-platform",
22
+ "title": "Entrega de plataforma",
23
+ "description": "Coordene uma plataforma ou iniciativa que atravessa produto, design, engenharia e operação. Não use para um bug ou ajuste isolado.",
24
+ "role": "coordinator",
25
+ "owns": "delivery-map",
26
+ "next": [
27
+ "crow-discovery",
28
+ "crow-spec",
29
+ "crow-architecture",
30
+ "crow-release"
31
+ ]
32
+ },
33
+ {
34
+ "name": "crow-discovery",
35
+ "title": "Problema e decisão de produto",
36
+ "description": "Investigue um problema de produto, segmento e hipótese antes de comprometer uma solução. Não reabra discovery para um bug conhecido.",
37
+ "role": "specialist",
38
+ "owns": "problem-brief",
39
+ "next": [
40
+ "crow-spec",
41
+ "crow-growth"
42
+ ]
43
+ },
44
+ {
45
+ "name": "crow-spec",
46
+ "title": "Escopo e critérios de aceite",
47
+ "description": "Transforme uma decisão de produto em uma especificação enxuta, fatias de release e critérios testáveis. Não conduz pesquisa de mercado.",
48
+ "role": "specialist",
49
+ "owns": "feature-spec",
50
+ "next": [
51
+ "crow-domain",
52
+ "crow-design",
53
+ "crow-qa"
54
+ ]
55
+ },
56
+ {
57
+ "name": "crow-domain",
58
+ "title": "Vocabulário e invariantes",
59
+ "description": "Resolva conceitos, identidades, estados e invariantes do domínio durante o desenho. Não use como gerador de arquitetura técnica.",
60
+ "role": "specialist",
61
+ "owns": "domain-glossary",
62
+ "next": [
63
+ "crow-architecture",
64
+ "crow-backend",
65
+ "crow-postgres"
66
+ ]
67
+ },
68
+ {
69
+ "name": "crow-architecture",
70
+ "title": "Interfaces e decisões de engenharia",
71
+ "description": "Desenhe ou revise módulos e interfaces para uma mudança real. Use também para documentar arquitetura existente, separando observado de proposto.",
72
+ "role": "specialist",
73
+ "owns": "architecture-note",
74
+ "next": [
75
+ "crow-threat-model",
76
+ "crow-backend",
77
+ "crow-frontend",
78
+ "crow-qa"
79
+ ]
80
+ },
81
+ {
82
+ "name": "crow-design",
83
+ "title": "Direção visual e contrato de UI",
84
+ "description": "Defina o contrato de experiência visual, fluxos, tokens e estados para implementação. Entrega brief/decisões, sem editar a interface nem repetir discovery resolvido.",
85
+ "role": "specialist",
86
+ "owns": "design-contract",
87
+ "next": [
88
+ "crow-frontend",
89
+ "crow-accessibility"
90
+ ]
91
+ },
92
+ {
93
+ "name": "crow-frontend",
94
+ "title": "Interface implementada",
95
+ "description": "Implemente componentes e jornadas web com contrato de dados e estados completos. Não redefine a direção visual nem escolhe framework por padrão.",
96
+ "role": "specialist",
97
+ "owns": "ui-change",
98
+ "next": [
99
+ "crow-api-test",
100
+ "crow-accessibility",
101
+ "crow-performance"
102
+ ]
103
+ },
104
+ {
105
+ "name": "crow-backend",
106
+ "title": "Serviço e regras de negócio",
107
+ "description": "Implemente APIs, jobs e regras no backend da stack existente, com validação, autorização e efeitos controlados. Não projeta a plataforma inteira.",
108
+ "role": "specialist",
109
+ "owns": "service-change",
110
+ "next": [
111
+ "crow-postgres",
112
+ "crow-api-test",
113
+ "crow-security-review"
114
+ ]
115
+ },
116
+ {
117
+ "name": "crow-postgres",
118
+ "title": "Dados Postgres",
119
+ "description": "Desenhe migrations, consultas e controles Postgres quando essa for a base do projeto. Não substitui autorização da aplicação.",
120
+ "role": "specialist",
121
+ "owns": "db-change",
122
+ "next": [
123
+ "crow-api-test",
124
+ "crow-performance",
125
+ "crow-release"
126
+ ]
127
+ },
128
+ {
129
+ "name": "crow-threat-model",
130
+ "title": "Ameaças do desenho",
131
+ "description": "Modele ativos, fluxos, fronteiras de confiança e abuso para um desenho ou mudança de risco. Não executa ataques nem certifica segurança.",
132
+ "role": "reviewer",
133
+ "owns": "threat-register",
134
+ "next": [
135
+ "crow-security-review",
136
+ "crow-agent-security",
137
+ "crow-qa"
138
+ ]
139
+ },
140
+ {
141
+ "name": "crow-security-review",
142
+ "title": "Revisão de segurança",
143
+ "description": "Revise plano, código ou diff em busca de violações concretas de confiança e valide alegações. Não é revisão estética nem pentest ativo.",
144
+ "role": "reviewer",
145
+ "owns": "security-findings",
146
+ "next": [
147
+ "crow-security-scan",
148
+ "crow-security-test",
149
+ "crow-qa"
150
+ ]
151
+ },
152
+ {
153
+ "name": "crow-security-scan",
154
+ "title": "Scans e evidência estática",
155
+ "description": "Execute ou analise SAST, dependências, imagens e IaC conforme o alvo; normalize e compare resultados. Não confirma explorabilidade nem faz autofix.",
156
+ "role": "specialist",
157
+ "owns": "scan-evidence",
158
+ "next": [
159
+ "crow-security-review"
160
+ ]
161
+ },
162
+ {
163
+ "name": "crow-agent-security",
164
+ "title": "Limites de agentes e LLMs",
165
+ "description": "Revise apps com LLM, ferramentas, fontes externas e memória para injeção, autoridade excessiva e efeitos inseguros. Não tenta contornar controles de terceiros.",
166
+ "role": "reviewer",
167
+ "owns": "agent-controls",
168
+ "next": [
169
+ "crow-threat-model",
170
+ "crow-security-review",
171
+ "crow-secrets"
172
+ ]
173
+ },
174
+ {
175
+ "name": "crow-secrets",
176
+ "title": "Ciclo de vida de credenciais",
177
+ "description": "Revise ou ajuste armazenamento, escopo, entrega e rotação de credenciais no escopo pedido. Nunca exibe valores nem cria cópias em documentação.",
178
+ "role": "specialist",
179
+ "owns": "secret-plan",
180
+ "next": [
181
+ "crow-release",
182
+ "crow-observe"
183
+ ]
184
+ },
185
+ {
186
+ "name": "crow-qa",
187
+ "title": "Verificação de comportamento",
188
+ "description": "Planeje e execute verificações por risco e critérios de aceite, escolhendo camadas sem duplicar toda a suíte. Não é automação pontual de navegação.",
189
+ "role": "specialist",
190
+ "owns": "test-evidence",
191
+ "next": [
192
+ "crow-api-test",
193
+ "crow-accessibility",
194
+ "crow-release"
195
+ ]
196
+ },
197
+ {
198
+ "name": "crow-api-test",
199
+ "title": "Contrato e autorização de API",
200
+ "description": "Crie ou execute testes de API de sucesso, schema, erro e autorização. Não substitui Pact entre equipes nem navegação de UI.",
201
+ "role": "specialist",
202
+ "owns": "api-evidence",
203
+ "next": [
204
+ "crow-qa",
205
+ "crow-security-review"
206
+ ]
207
+ },
208
+ {
209
+ "name": "crow-accessibility",
210
+ "title": "Uso acessível da jornada",
211
+ "description": "Valide e corrija semântica, teclado, foco, leitura assistiva e autenticação de uma interface real. Não certifica conformidade completa por scanner.",
212
+ "role": "specialist",
213
+ "owns": "a11y-evidence",
214
+ "next": [
215
+ "crow-frontend",
216
+ "crow-qa"
217
+ ]
218
+ },
219
+ {
220
+ "name": "crow-performance",
221
+ "title": "Otimização com evidência",
222
+ "description": "Investigue lentidão e valide otimizações web, API, banco ou nativas com workload controlado. Não reporta ganho com um único antes/depois.",
223
+ "role": "specialist",
224
+ "owns": "perf-evidence",
225
+ "next": [
226
+ "crow-debug",
227
+ "crow-frontend",
228
+ "crow-postgres",
229
+ "crow-observe"
230
+ ]
231
+ },
232
+ {
233
+ "name": "crow-debug",
234
+ "title": "Reprodução e causa do bug",
235
+ "description": "Diagnostique um defeito a partir de reprodução e hipóteses falsificáveis, corrigindo a causa com regressão. Não reabre estratégia de produto.",
236
+ "role": "specialist",
237
+ "owns": "bug-fix",
238
+ "next": [
239
+ "crow-qa",
240
+ "crow-performance",
241
+ "crow-architecture"
242
+ ]
243
+ },
244
+ {
245
+ "name": "crow-infra",
246
+ "title": "Workload e infraestrutura",
247
+ "description": "Planeje ou altere infra/IaC da plataforma existente com validação, custo e recuperação proporcionais. Não impõe Kubernetes ou multi-cloud.",
248
+ "role": "specialist",
249
+ "owns": "infra-plan",
250
+ "next": [
251
+ "crow-release",
252
+ "crow-secrets",
253
+ "crow-security-review"
254
+ ]
255
+ },
256
+ {
257
+ "name": "crow-release",
258
+ "title": "Promoção e recuperação",
259
+ "description": "Prepare ou execute release/deploy no fluxo real do repo, com artefato identificado, gates e recuperação. Não considera plano ou CI verde prova de deploy.",
260
+ "role": "specialist",
261
+ "owns": "release-evidence",
262
+ "next": [
263
+ "crow-qa",
264
+ "crow-observe"
265
+ ]
266
+ },
267
+ {
268
+ "name": "crow-observe",
269
+ "title": "Sinais e operação",
270
+ "description": "Configure ou avalie logs, métricas, traces, alertas e runbooks para detectar falhas e orientar resposta. Não cria um stack de observabilidade sem demanda.",
271
+ "role": "specialist",
272
+ "owns": "observability-change",
273
+ "next": [
274
+ "crow-debug",
275
+ "crow-performance",
276
+ "crow-release"
277
+ ]
278
+ },
279
+ {
280
+ "name": "crow-seo",
281
+ "title": "Saída pública e descoberta",
282
+ "description": "Revise conteúdo e saída técnica de páginas públicas para busca, coerência e indexação. Não otimiza área logada nem promete ranking.",
283
+ "role": "specialist",
284
+ "owns": "seo-change",
285
+ "next": [
286
+ "crow-frontend",
287
+ "crow-growth"
288
+ ]
289
+ },
290
+ {
291
+ "name": "crow-media",
292
+ "title": "Artefatos de imagem, áudio e vídeo",
293
+ "description": "Crie ou edite mídia a partir de brief e assets autorizados, preservando fontes e validando o arquivo final. Não exige um fornecedor específico.",
294
+ "role": "specialist",
295
+ "owns": "media-artifact",
296
+ "next": [
297
+ "crow-documents",
298
+ "crow-design"
299
+ ]
300
+ },
301
+ {
302
+ "name": "crow-documents",
303
+ "title": "Documentos e entregáveis",
304
+ "description": "Crie ou edite documentos, planilhas, apresentações ou HTML a partir de conteúdo real, validando conteúdo e formato final. Não usa exportadores irrelevantes.",
305
+ "role": "specialist",
306
+ "owns": "document-artifact",
307
+ "next": [
308
+ "crow-design",
309
+ "crow-media"
310
+ ]
311
+ },
312
+ {
313
+ "name": "crow-skill-author",
314
+ "title": "Manutenção de skills",
315
+ "description": "Crie ou revise uma skill com escopo único, descoberta precisa e validação de uso isolado e em composição. Não instala automaticamente pacotes de terceiros.",
316
+ "role": "specialist",
317
+ "owns": "skill-package",
318
+ "next": [
319
+ "crow-security-review"
320
+ ]
321
+ },
322
+ {
323
+ "name": "crow-reverse",
324
+ "title": "Compreensão de artefatos",
325
+ "description": "Analise código, binário ou protocolo em escopo para compreender comportamento e interoperabilidade, preservando a evidência. Não modifica controles de terceiros por padrão.",
326
+ "role": "specialist",
327
+ "owns": "reverse-report",
328
+ "next": [
329
+ "crow-security-review",
330
+ "crow-native-mobile"
331
+ ]
332
+ },
333
+ {
334
+ "name": "crow-security-test",
335
+ "title": "Verificação dinâmica autorizada",
336
+ "description": "Valide dinamicamente uma hipótese de segurança em ativos autorizados com escopo, limites e evidência mínimos. Não faz varredura ou DoS por padrão.",
337
+ "role": "specialist",
338
+ "owns": "security-test-evidence",
339
+ "next": [
340
+ "crow-security-review",
341
+ "crow-qa"
342
+ ]
343
+ },
344
+ {
345
+ "name": "crow-growth",
346
+ "title": "Decisões de crescimento",
347
+ "description": "Avalie posicionamento, preço, aquisição, retenção e economia de produto com dados disponíveis e experimentos. Não escreve implementação nem inventa métricas.",
348
+ "role": "specialist",
349
+ "owns": "growth-decision",
350
+ "next": [
351
+ "crow-discovery",
352
+ "crow-spec",
353
+ "crow-seo"
354
+ ]
355
+ },
356
+ {
357
+ "name": "crow-product-leadership",
358
+ "title": "Decisão e coordenação de produto",
359
+ "description": "Estruture alinhamento de stakeholders, responsabilidades e desenvolvimento profissional em produto quando solicitado. Não assume autoridade sobre pessoas.",
360
+ "role": "specialist",
361
+ "owns": "leadership-plan",
362
+ "next": [
363
+ "crow-spec",
364
+ "crow-growth"
365
+ ]
366
+ },
367
+ {
368
+ "name": "crow-native-mobile",
369
+ "title": "Aplicação nativa e mobile",
370
+ "description": "Implemente ou diagnostique fluxos nativos/mobile na stack existente, respeitando lifecycle, permissões e plataforma. Não aplica regras web indiscriminadamente.",
371
+ "role": "specialist",
372
+ "owns": "native-change",
373
+ "next": [
374
+ "crow-api-test",
375
+ "crow-performance",
376
+ "crow-release"
377
+ ]
378
+ },
379
+ {
380
+ "name": "crow-browser",
381
+ "title": "Automação pontual de browser",
382
+ "description": "Inspecione e opere uma página com ferramentas de browser disponíveis, usando estado observado e respeitando efeitos. Não gera suíte E2E por padrão.",
383
+ "role": "specialist",
384
+ "owns": "browser-evidence",
385
+ "next": [
386
+ "crow-qa"
387
+ ]
388
+ },
389
+ {
390
+ "name": "crow-interface",
391
+ "title": "Experiência de interface",
392
+ "description": "Crie, revise ou refine a experiência visual de interfaces web e nativas, com modos distintos de planejamento, crítica, auditoria, implementação e variantes live. Não implementa backend nem integração de dados por efeito colateral.",
393
+ "role": "specialist",
394
+ "owns": "interface-result",
395
+ "next": ["crow-design", "crow-frontend", "crow-accessibility", "crow-performance"]
396
+ }
397
+ ]
398
+ }
@@ -0,0 +1,3 @@
1
+ """Portable, local-first installer for the crow-skills catalogue."""
2
+
3
+ __version__ = "0.1.0"
@@ -0,0 +1,3 @@
1
+ from .cli import main
2
+
3
+ raise SystemExit(main())
@@ -0,0 +1,45 @@
1
+ """Explicit destination adapters; detection never launches an agent."""
2
+ from pathlib import Path
3
+ import os
4
+ import shutil
5
+ from .source import CrowError
6
+
7
+ AGENTS = {
8
+ "codex": (".agents/skills", ".agents/skills", "codex"),
9
+ "claude": (".claude/skills", ".claude/skills", "claude"),
10
+ "gemini": (".gemini/skills", ".gemini/skills", "gemini"),
11
+ "devin": (".config/devin/skills", ".devin/skills", "devin"),
12
+ "shared": (".agents/skills", ".agents/skills", None),
13
+ }
14
+
15
+
16
+ def destinations(names, home, project=None, custom=None):
17
+ if custom:
18
+ if names:
19
+ raise CrowError("usage", "--dest e --agents não podem ser combinados.")
20
+ return [{"path": str(Path(custom).expanduser().absolute()), "agents": ["custom"]}]
21
+ if not names:
22
+ raise CrowError("usage", "Selecione --agents; não há instalação implícita em todos os agentes.")
23
+ selected = names.split(",") if isinstance(names, str) else names
24
+ result = {}
25
+ for name in selected:
26
+ name = name.strip()
27
+ if name not in AGENTS:
28
+ raise CrowError("unknown_agent", "Agente desconhecido: " + name)
29
+ user_path, project_path, _ = AGENTS[name]
30
+ path = (Path(project) / project_path) if project else (home / user_path)
31
+ # Respect explicit XDG config, but isolate it when --home selects another profile.
32
+ if name == "devin" and not project and home == Path.home().resolve() and os.getenv("XDG_CONFIG_HOME"):
33
+ path = Path(os.environ["XDG_CONFIG_HOME"]).expanduser() / "devin/skills"
34
+ key = str(path.absolute())
35
+ result.setdefault(key, {"path": key, "agents": []})
36
+ if name not in result[key]["agents"]:
37
+ result[key]["agents"].append(name)
38
+ return list(result.values())
39
+
40
+
41
+ def inventory(home):
42
+ return [{"name": name, "executable_found": bool(binary and shutil.which(binary)),
43
+ "global_path": str(home / user), "project_path": project,
44
+ "activation_verified": False}
45
+ for name, (user, project, binary) in AGENTS.items()]