@fprad0/skill-master-mcp 0.0.7 → 0.0.9

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 (58) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +129 -10
  3. package/VERSION.md +3 -3
  4. package/bin/lib/menu-core.mjs +284 -2
  5. package/bin/skill-master-activation.mjs +163 -0
  6. package/bin/skill-master-bootstrap-global.mjs +35 -0
  7. package/bin/skill-master-eval-activation.mjs +32 -0
  8. package/bin/skill-master-install-global-skills.mjs +77 -0
  9. package/bin/skill-master-register-clients.mjs +154 -0
  10. package/bin/skill-master-success-skills.mjs +307 -0
  11. package/dist/activation-evals.d.ts +32 -0
  12. package/dist/activation-evals.d.ts.map +1 -0
  13. package/dist/activation-evals.js +116 -0
  14. package/dist/activation-evals.js.map +1 -0
  15. package/dist/domain-router.d.ts +11 -0
  16. package/dist/domain-router.d.ts.map +1 -0
  17. package/dist/domain-router.js +79 -0
  18. package/dist/domain-router.js.map +1 -0
  19. package/dist/index.js +460 -1
  20. package/dist/index.js.map +1 -1
  21. package/dist/moral-governance.d.ts +24 -0
  22. package/dist/moral-governance.d.ts.map +1 -0
  23. package/dist/moral-governance.js +143 -0
  24. package/dist/moral-governance.js.map +1 -0
  25. package/dist/prompt-router.d.ts +47 -0
  26. package/dist/prompt-router.d.ts.map +1 -0
  27. package/dist/prompt-router.js +324 -0
  28. package/dist/prompt-router.js.map +1 -0
  29. package/dist/success-learning.d.ts +147 -0
  30. package/dist/success-learning.d.ts.map +1 -0
  31. package/dist/success-learning.js +444 -0
  32. package/dist/success-learning.js.map +1 -0
  33. package/docs/architecture/APRENDIZADO_DE_IMPLEMENTACOES_BEM_SUCEDIDAS.md +125 -0
  34. package/docs/architecture/ARQUITETURA_AUTO_UPDATE.md +9 -0
  35. package/docs/architecture/PLANO_MASTER_ACIONAMENTO_AUTOMATICO_E_APRENDIZADO.md +341 -0
  36. package/docs/architecture/REDE_SEGURA_DE_SKILLS.md +148 -0
  37. package/docs/planning/V0_0_9_APROVACAO_CRITICA_MENSAGENS_DE_VENDA.md +85 -0
  38. package/docs/planning/V0_0_9_FONTES_E_CRITERIOS_DE_AUTORIDADE.md +139 -0
  39. package/docs/planning/V0_0_9_MATRIZ_SKILLS_MULTIDISCIPLINARES.md +105 -0
  40. package/docs/planning/V0_0_9_POLITICA_MORAL_CATOLICA_PARA_IA.md +181 -0
  41. package/docs/planning/V0_0_9_PROMPTS_EXECUCAO.md +59 -0
  42. package/docs/planning/V0_0_9_ROADMAP_DISCERNIMENTO_E_CONHECIMENTO_AMPLO.md +181 -0
  43. package/docs/skill-candidates/v0.0.9/ai-ethics-human-dignity/SKILL.md +32 -0
  44. package/docs/skill-candidates/v0.0.9/broad-domain-router/SKILL.md +41 -0
  45. package/docs/skill-candidates/v0.0.9/catholic-moral-discernment/SKILL.md +31 -0
  46. package/docs/skill-candidates/v0.0.9/engineering-systems-master/SKILL.md +31 -0
  47. package/docs/skill-candidates/v0.0.9/language-quality-pt-en-fr/SKILL.md +28 -0
  48. package/docs/skill-candidates/v0.0.9/math-science-reasoning/SKILL.md +29 -0
  49. package/docs/skill-candidates/v0.0.9/philosophy-sociology-discernment/SKILL.md +28 -0
  50. package/docs/skill-candidates/v0.0.9/professional-boundary-triage/SKILL.md +40 -0
  51. package/docs/skill-candidates/v0.0.9/release-ethics-gate/SKILL.md +32 -0
  52. package/docs/skill-candidates/v0.0.9/source-authority-reviewer/SKILL.md +31 -0
  53. package/manifests/channels/beta.json +7 -6
  54. package/manifests/channels/stable.json +8 -7
  55. package/network/approved-skills.json +51 -2
  56. package/network/unapproved-skill-candidates.json +77 -0
  57. package/package.json +13 -3
  58. package/sources.json +4 -1
package/CHANGELOG.md CHANGED
@@ -4,9 +4,25 @@ All notable changes to `skill_master` will be tracked here.
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.0.9] - 2026-06-28
8
+
9
+ - Add Catholic-inspired moral governance with `skill_master_moral_discernment`, moral gates, and prompt-router integration.
10
+ - Add broad domain routing with `skill_master_domain_router` and global multidisciplinary skill recommendations.
11
+ - Add bundled global Skill Master skills for moral discernment, AI ethics, professional boundaries, languages, science, philosophy, sociology, engineering, source review, and release ethics.
12
+ - Add `skill-master-install-global-skills` to install bundled skills into `CODEX_HOME/skills` or `~/.codex/skills`.
13
+ - Add `skill-master-register-clients` to generate/apply MCP registration for Codex, Claude Desktop, and Gemini.
7
14
  - Prepare a public npm publication path with dedicated workflow and operator guide.
8
15
  - Upgrade release automation from Node `20` to Node `22`.
9
16
 
17
+ ## [0.0.8] - 2026-06-27
18
+
19
+ - Add `skill_master_prompt_router` with `manual`, `balanced`, and `always-on-assisted` activation modes.
20
+ - Add Dev Senior Master persona routing, safety gates, Notion/update detection, and learned-skill signals.
21
+ - Add success-learning flows for human approval packages, local/global activation, study decisions, and rejection history.
22
+ - Add `skill-master-activation`, `skill-master-success-skills`, and `skill-master-eval-activation` operator CLIs.
23
+ - Expand the terminal menu with activation status, prompt recommendations, learned-skill notifications, study/reject actions, and Notion summaries.
24
+ - Add activation evals with positive, negative, and risk cases plus `npm run eval:activation`.
25
+
10
26
  ## [0.0.7] - 2026-06-26
11
27
 
12
28
  - Add a visual terminal menu for `skill-master-menu` using `prompts`, with TTY detection and direct action mode.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Skill Master MCP
2
2
 
3
- Versao planejada: `00.02`
3
+ Versao planejada: `00.03`
4
4
 
5
5
  Este repositorio e a base independente do MCP `skill_master`. Ele nao pertence ao LinkBiz e deve evoluir como um projeto pessoal, preferencialmente publicado em um GitHub particular.
6
6
 
@@ -8,9 +8,9 @@ Este repositorio e a base independente do MCP `skill_master`. Ele nao pertence a
8
8
 
9
9
  Criar um MCP capaz de catalogar skills locais e remotas, recomendar as melhores skills para um prompt e manter atualizacoes automaticas para varios computadores e usuarios.
10
10
 
11
- ## Decisao da versao 00.02
11
+ ## Decisao da versao 00.03
12
12
 
13
- A versao `00.02` consolida:
13
+ A versao `00.03` consolida:
14
14
 
15
15
  - distribuicao publica por `npmjs.org`
16
16
  - distribuicao privada por GitHub Packages
@@ -108,18 +108,23 @@ npm install -g @fprad0/skill-master-mcp
108
108
  npx -y @fprad0/skill-master-mcp@latest
109
109
  ```
110
110
 
111
- Estado atual validado em `2026-06-26`:
111
+ Estado atual preparado em `2026-06-28`:
112
112
 
113
- - pacote publico publicado: `@fprad0/skill-master-mcp@0.0.7`
114
- - dist-tag `latest` apontando para `0.0.7`
115
- - workflow `Publish Skill Master to npmjs` concluido com sucesso
116
- - `npm install` e `npx` confirmados
113
+ - release publica: `@fprad0/skill-master-mcp@0.0.9`
114
+ - `latest` no npmjs aponta para `0.0.9`
115
+ - validacao de pacote por tarball local confirmada
116
+ - validacao de instalacao publica via `npm install @fprad0/skill-master-mcp@0.0.9` confirmada
117
117
 
118
118
  Comandos globais principais:
119
119
 
120
120
  ```bash
121
+ skill-master-activation
122
+ skill-master-eval-activation
123
+ skill-master-install-global-skills
121
124
  skill-master-mcp
122
125
  skill-master-menu
126
+ skill-master-register-clients
127
+ skill-master-success-skills
123
128
  skill-master-update
124
129
  skill-master-configure-private-registry
125
130
  ```
@@ -136,10 +141,71 @@ O menu agora possui modo visual interativo para terminal com TTY e tambem aceita
136
141
  skill-master-menu --run status
137
142
  skill-master-menu --run check
138
143
  skill-master-menu --run update --yes
144
+ skill-master-menu --run install-global-skills
145
+ skill-master-menu --run bootstrap-global
146
+ skill-master-menu --run register-clients
147
+ skill-master-menu --run notifications
148
+ skill-master-menu --run study-skills
149
+ skill-master-menu --run approval-package
150
+ skill-master-menu --run activation-status
151
+ skill-master-menu --run recommend-prompt
152
+ skill-master-menu --run notion-summary
139
153
  ```
140
154
 
141
155
  O menu visual usa `prompts` para ficar mais legivel no terminal e manter compatibilidade com `Node 18+`.
142
156
 
157
+ Quando o menu detectar que o MCP ainda nao esta globalmente pronto neste computador, ele mostra um alerta forte e um aviso sutil explicando que a instalacao global e o registro dos clientes sao necessarios para o `skill_master` parecer parte do sistema em Codex, Claude e Gemini.
158
+
159
+ Para instalar as skills globais embutidas de discernimento, conhecimento amplo, engenharia e governanca moral:
160
+
161
+ ```bash
162
+ skill-master-install-global-skills
163
+ ```
164
+
165
+ Para fazer o bootstrap global completo em um passo:
166
+
167
+ ```bash
168
+ skill-master-bootstrap-global
169
+ ```
170
+
171
+ Para registrar o MCP nos clientes principais usando o binario global `skill-master-mcp`:
172
+
173
+ ```bash
174
+ skill-master-register-clients --apply-codex
175
+ skill-master-register-clients --apply-claude
176
+ skill-master-register-clients --apply-gemini
177
+ ```
178
+
179
+ Atalho para gerar snippets e aplicar nos tres:
180
+
181
+ ```bash
182
+ skill-master-register-clients --apply-all
183
+ ```
184
+
185
+ Isso configura o servidor MCP `skill_master` em Codex, Claude Desktop e Gemini quando os arquivos de configuracao locais estiverem disponiveis. Reinicie o cliente depois do registro.
186
+
187
+ O menu tambem mostra notificacoes de skills aprendidas pendentes e links externos para estudo. As acoes de ativacao sao:
188
+
189
+ - `skill-master-menu --run activate-learned-local`: instala uma skill aprovada em `.codex/skills` do workspace atual.
190
+ - `skill-master-menu --run activate-learned-global`: instala uma skill aprovada em `${CODEX_HOME:-~/.codex}/skills`.
191
+ - `skill-master-menu --run mark-study`: registra uma skill candidata como material para estudo.
192
+ - `skill-master-menu --run reject-skill`: rejeita uma skill candidata preservando historico.
193
+
194
+ Para modo de ativacao e recomendacao local:
195
+
196
+ ```bash
197
+ skill-master-activation --status
198
+ skill-master-activation --set-mode balanced
199
+ skill-master-activation --route-prompt "skill-master, recomende skills para este prompt"
200
+ skill-master-activation --notion-summary
201
+ ```
202
+
203
+ Para rodar as avaliacoes de ativacao antes de release:
204
+
205
+ ```bash
206
+ npm run eval:activation
207
+ ```
208
+
143
209
  Para atualizar a instalacao global via npm sem iniciar o servidor MCP:
144
210
 
145
211
  ```bash
@@ -173,7 +239,7 @@ Os dois caminhos configuram:
173
239
 
174
240
  ## Compatibilidade com Claude e Gemini
175
241
 
176
- A versao `00.02` documenta compatibilidade operacional ja preparada para:
242
+ A versao `00.03` documenta compatibilidade operacional ja preparada para:
177
243
 
178
244
  - Claude Desktop
179
245
  - Claude Code
@@ -200,18 +266,66 @@ O `skill_master` pode aprender com as skills ja existentes em cada maquina insta
200
266
  Ferramentas MCP principais:
201
267
 
202
268
  - `skill_master_refresh_catalog`
269
+ - `skill_master_prompt_router`
270
+ - `skill_master_activation_check`
271
+ - `skill_master_recommend`
272
+ - `skill_master_moral_discernment`
273
+ - `skill_master_domain_router`
274
+ - `skill_master_bootstrap_global`
275
+ - `skill_master_install_global_skills`
203
276
  - `skill_master_prepare_skill_contribution`
204
277
  - `skill_master_review_skill_contribution`
278
+ - `skill_master_prepare_success_skill`
279
+ - `skill_master_review_success_skill`
280
+ - `skill_master_list_unapproved_success_skills`
281
+ - `skill_master_prepare_success_skill_approval_package`
282
+ - `skill_master_activate_success_skill`
205
283
 
206
284
  O pacote de contribuicao nao envia arquivos automaticamente, nao executa skills desconhecidas e nao inclui caminhos completos ou corpo bruto por padrao.
207
285
 
286
+ O fluxo de aprendizado por implementacoes bem-sucedidas cria rascunhos locais em staging, gera pacote de aprovacao humana e permite ativacao explicita em escopo local ou global. Ele exige evidencias, revisa risco/duplicidade e mantem candidatos externos como nao aprovados ate revisao humana. Nenhuma skill aprendida e publicada automaticamente.
287
+
208
288
  Leia:
209
289
 
210
290
  - [Rede segura de skills](docs/architecture/REDE_SEGURA_DE_SKILLS.md)
291
+ - [Aprendizado de implementacoes bem-sucedidas](docs/architecture/APRENDIZADO_DE_IMPLEMENTACOES_BEM_SUCEDIDAS.md)
211
292
 
212
293
  ## Modos de ativacao em prompts
213
294
 
214
- A partir da versao `0.0.4`, clientes e agentes podem usar `skill_master_activation_check` antes de decidir se devem acionar recomendacoes de skills.
295
+ Clientes e agentes podem usar `skill_master_prompt_router` como camada principal antes de decidir se devem acionar recomendacoes de skills, aplicar persona ou bloquear uma acao sensivel.
296
+
297
+ Modos suportados:
298
+
299
+ - `manual`: ativa apenas com mencao direta ao Skill Master ou gate bloqueante.
300
+ - `balanced`: modo recomendado; ativa por mencao direta, tarefa tecnica com skill relevante, Notion, aprendizado, validacao, MCP ou publicacao.
301
+ - `always-on-assisted`: avalia quase todo prompt, mas retorna `executionMode: no-op` quando nao houver ganho claro.
302
+
303
+ Exemplo de chamada conceitual:
304
+
305
+ ```json
306
+ {
307
+ "prompt": "skill-master, veja se existe uma skill para validar este deploy",
308
+ "activationMode": "balanced",
309
+ "riskTolerance": "normal"
310
+ }
311
+ ```
312
+
313
+ Saida esperada:
314
+
315
+ ```json
316
+ {
317
+ "shouldActivate": true,
318
+ "personaOverlay": "Dev Senior Master",
319
+ "executionMode": "assist",
320
+ "safetyGates": [],
321
+ "learningOpportunity": false,
322
+ "notionUpdateNeeded": false
323
+ }
324
+ ```
325
+
326
+ Use `skill_master_activation_check` quando precisar apenas de uma decisao menor e retrocompativel de ativacao/recomendacao.
327
+
328
+ Restricoes explicitas como `sem publicar`, `nao publicar` ou `nao publique` sao tratadas como execucao local. O router deve registrar `publication_explicitly_disabled` e nao pode transformar essa frase em autorizacao ou intencao de release.
215
329
 
216
330
  Ativacao explicita:
217
331
 
@@ -241,6 +355,11 @@ Cliente: chama skill_master_activation_check.
241
355
  Cliente: se ativar, chama skill_master_recommend ou segue as recomendacoes retornadas.
242
356
  ```
243
357
 
358
+ Diagnostico importante:
359
+
360
+ - `skill_master_list_sources` mostra `configPath`, `workspace` e se `workspaceRoots` esta configurado.
361
+ - Se `workspaceRoots` estiver vazio, skills em `.codex/skills` do projeto nao serao catalogadas ate atualizar `sources.json` e reiniciar o processo MCP.
362
+
244
363
  ## Atualizacao automatica via npm
245
364
 
246
365
  Para instalacoes feitas por `npm install -g`, o caminho seguro de auto-update e executar `skill-master-update` fora do processo MCP.
package/VERSION.md CHANGED
@@ -1,9 +1,9 @@
1
1
  # Versão
2
2
 
3
- Versão funcional planejada: `00.02`
3
+ Versão funcional planejada: `00.03`
4
4
 
5
- Versão técnica para empacotamento semântico: `0.0.7`
5
+ Versão técnica para empacotamento semântico: `0.0.9`
6
6
 
7
7
  ## Observação
8
8
 
9
- O nome `00.02` será usado na comunicação e nos documentos. Para ferramentas que exigem SemVer, como npm e alguns fluxos de release, usar `0.0.7`.
9
+ O nome `00.03` será usado na comunicação e nos documentos. Para ferramentas que exigem SemVer, como npm e alguns fluxos de release, usar `0.0.9`.
@@ -1,5 +1,6 @@
1
1
  import { spawn } from 'node:child_process';
2
- import { existsSync, readFileSync } from 'node:fs';
2
+ import { existsSync, readFileSync, readdirSync } from 'node:fs';
3
+ import os from 'node:os';
3
4
  import { join } from 'node:path';
4
5
  import process from 'node:process';
5
6
 
@@ -13,10 +14,91 @@ const ANSI = {
13
14
  red: '\x1b[31m',
14
15
  };
15
16
 
17
+ const REQUIRED_GLOBAL_SKILLS = [
18
+ 'catholic-moral-discernment',
19
+ 'ai-ethics-human-dignity',
20
+ 'professional-boundary-triage',
21
+ 'broad-domain-router',
22
+ 'language-quality-pt-en-fr',
23
+ 'math-science-reasoning',
24
+ 'philosophy-sociology-discernment',
25
+ 'engineering-systems-master',
26
+ 'source-authority-reviewer',
27
+ 'release-ethics-gate',
28
+ ];
29
+
16
30
  function colorize(text, color, enabled) {
17
31
  return enabled ? `${color}${text}${ANSI.reset}` : text;
18
32
  }
19
33
 
34
+ function globalSkillsRoot() {
35
+ return join(process.env.CODEX_HOME ?? join(os.homedir(), '.codex'), 'skills');
36
+ }
37
+
38
+ function readClientConfigState(filePath) {
39
+ if (!existsSync(filePath)) {
40
+ return { present: false, kind: 'missing', globalCommand: false };
41
+ }
42
+
43
+ const content = readFileSync(filePath, 'utf8');
44
+ const hasSkillMaster = content.includes('skill_master');
45
+ const hasGlobalCommand = content.includes('command = "skill-master-mcp"') || content.includes("command = 'skill-master-mcp'");
46
+ const hasLauncher = content.includes('skill-master-launcher');
47
+
48
+ return {
49
+ present: true,
50
+ kind: hasGlobalCommand ? 'global' : hasLauncher ? 'launcher' : hasSkillMaster ? 'custom' : 'unknown',
51
+ globalCommand: hasGlobalCommand,
52
+ };
53
+ }
54
+
55
+ function readJsonState(filePath) {
56
+ if (!existsSync(filePath)) {
57
+ return { present: false, globalCommand: false };
58
+ }
59
+
60
+ try {
61
+ const parsed = JSON.parse(readFileSync(filePath, 'utf8'));
62
+ const server = parsed?.mcpServers?.skill_master;
63
+ return {
64
+ present: true,
65
+ globalCommand: server?.command === 'skill-master-mcp',
66
+ };
67
+ } catch {
68
+ return { present: true, globalCommand: false };
69
+ }
70
+ }
71
+
72
+ function inspectGlobalReadiness() {
73
+ const root = globalSkillsRoot();
74
+ const installed = REQUIRED_GLOBAL_SKILLS.filter((name) => existsSync(join(root, name, 'SKILL.md')));
75
+ const missing = REQUIRED_GLOBAL_SKILLS.filter((name) => !installed.includes(name));
76
+ const codexConfigPath = join(process.env.CODEX_HOME ?? join(os.homedir(), '.codex'), 'config.toml');
77
+ const claudeConfigPath = join(os.homedir(), '.config', 'Claude', 'claude_desktop_config.json');
78
+ const geminiConfigPath = join(os.homedir(), '.gemini', 'settings.json');
79
+ const codex = readClientConfigState(codexConfigPath);
80
+ const claude = readJsonState(claudeConfigPath);
81
+ const gemini = readJsonState(geminiConfigPath);
82
+ const ready = missing.length === 0 && codex.globalCommand && claude.globalCommand && gemini.globalCommand;
83
+ const mode = ready
84
+ ? 'ready'
85
+ : codex.kind === 'launcher' || claude.present || gemini.present
86
+ ? 'partial'
87
+ : 'missing';
88
+
89
+ return {
90
+ root,
91
+ required: REQUIRED_GLOBAL_SKILLS.length,
92
+ installed,
93
+ missing,
94
+ ready,
95
+ mode,
96
+ codex,
97
+ claude,
98
+ gemini,
99
+ };
100
+ }
101
+
20
102
  export function readJson(rootDir, relativePath) {
21
103
  const target = join(rootDir, relativePath);
22
104
  if (!existsSync(target)) {
@@ -39,6 +121,10 @@ export function getMenuStatus(rootDir) {
39
121
  const packageJson = readJson(rootDir, 'package.json');
40
122
  const stableManifest = readJson(rootDir, 'manifests/channels/stable.json');
41
123
  const versionText = readText(rootDir, 'VERSION.md');
124
+ const successLearningDir = process.env.SKILL_MASTER_SUCCESS_LEARNING_DIR
125
+ ?? join(process.env.SKILL_MASTER_HOME ?? join(process.env.HOME ?? process.env.USERPROFILE ?? '', '.skill-master'), 'data', 'success-learning');
126
+ const studyCandidates = readJson(rootDir, 'network/unapproved-skill-candidates.json');
127
+ const globalReadiness = inspectGlobalReadiness();
42
128
 
43
129
  return {
44
130
  packageName: packageJson?.name ?? 'nao encontrado',
@@ -47,9 +133,30 @@ export function getMenuStatus(rootDir) {
47
133
  manifestSemver: stableManifest?.semver ?? 'nao encontrado',
48
134
  versionText,
49
135
  rootDir,
136
+ pendingSuccessDrafts: countManifestFiles(successLearningDir),
137
+ studyCandidates: Array.isArray(studyCandidates?.candidates) ? studyCandidates.candidates.length : 0,
138
+ globalReadiness,
50
139
  };
51
140
  }
52
141
 
142
+ function countManifestFiles(directory) {
143
+ if (!directory || !existsSync(directory)) {
144
+ return 0;
145
+ }
146
+
147
+ let count = 0;
148
+ const visit = (current) => {
149
+ for (const entry of readdirSync(current, { withFileTypes: true })) {
150
+ const fullPath = join(current, entry.name);
151
+ if (entry.isDirectory()) visit(fullPath);
152
+ else if (entry.isFile() && entry.name === 'manifest.json') count += 1;
153
+ }
154
+ };
155
+
156
+ visit(directory);
157
+ return count;
158
+ }
159
+
53
160
  export function buildMenuCommands({ rootDir, currentFile, nodeExecPath = process.execPath }) {
54
161
  return [
55
162
  {
@@ -107,6 +214,133 @@ export function buildMenuCommands({ rootDir, currentFile, nodeExecPath = process
107
214
  args: ['scripts/configure-private-registry.mjs', '--validate'],
108
215
  confirmMessage: 'Rodar a configuracao de registry privado agora?',
109
216
  },
217
+ {
218
+ key: 'activationStatus',
219
+ aliases: ['activation-status', 'modo', 'modo-ativacao'],
220
+ label: 'Modo de ativacao atual',
221
+ description: 'Mostra o modo manual, balanced ou always-on-assisted configurado localmente.',
222
+ command: nodeExecPath,
223
+ args: [join(rootDir, 'bin', 'skill-master-activation.mjs'), '--status'],
224
+ },
225
+ {
226
+ key: 'activationBalanced',
227
+ aliases: ['set-balanced', 'balanced'],
228
+ label: 'Usar modo balanced',
229
+ description: 'Define balanced como modo padrao de ativacao do Skill Master.',
230
+ command: nodeExecPath,
231
+ args: [join(rootDir, 'bin', 'skill-master-activation.mjs'), '--set-mode', 'balanced'],
232
+ },
233
+ {
234
+ key: 'activationAlwaysOn',
235
+ aliases: ['set-always-on', 'always-on-assisted'],
236
+ label: 'Usar modo always-on-assisted',
237
+ description: 'Define avaliacao assistida quase sempre ativa, mantendo no-op quando nao houver ganho.',
238
+ command: nodeExecPath,
239
+ args: [join(rootDir, 'bin', 'skill-master-activation.mjs'), '--set-mode', 'always-on-assisted'],
240
+ confirmMessage: 'Alterar o modo local para always-on-assisted?',
241
+ },
242
+ {
243
+ key: 'installGlobalSkills',
244
+ aliases: ['install-global-skills', 'skills-globais', 'global-skills'],
245
+ label: 'Instalar skills globais do Skill Master',
246
+ description: 'Copia as skills amplas e morais embutidas para CODEX_HOME/skills ou ~/.codex/skills.',
247
+ command: nodeExecPath,
248
+ args: [join(rootDir, 'bin', 'skill-master-install-global-skills.mjs')],
249
+ confirmMessage: 'Instalar as skills globais embutidas neste usuario?',
250
+ },
251
+ {
252
+ key: 'bootstrapGlobal',
253
+ aliases: ['bootstrap-global', 'global-bootstrap', 'ativar-global-completo'],
254
+ label: 'Ativar MCP global neste computador',
255
+ description: 'Instala as skills globais e registra Codex, Claude e Gemini no mesmo passo.',
256
+ command: nodeExecPath,
257
+ args: [join(rootDir, 'bin', 'skill-master-bootstrap-global.mjs')],
258
+ confirmMessage: 'Executar o bootstrap global do Skill Master neste computador?',
259
+ },
260
+ {
261
+ key: 'registerClients',
262
+ aliases: ['register-clients', 'registrar-clientes', 'codex-claude-gemini'],
263
+ label: 'Registrar Codex, Claude e Gemini',
264
+ description: 'Gera/aplica configuracoes MCP para reconhecer skill_master nos clientes principais.',
265
+ command: nodeExecPath,
266
+ args: [join(rootDir, 'bin', 'skill-master-register-clients.mjs'), '--apply-all'],
267
+ confirmMessage: 'Aplicar registro do skill_master em Codex, Claude e Gemini?',
268
+ },
269
+ {
270
+ key: 'promptRecommendation',
271
+ aliases: ['recommend-prompt', 'recomendar-prompt', 'prompt-router'],
272
+ label: 'Ver recomendacao para um prompt',
273
+ description: 'Abre um fluxo interativo para avaliar um prompt pelo router local.',
274
+ command: nodeExecPath,
275
+ args: [join(rootDir, 'bin', 'skill-master-activation.mjs'), '--route-prompt-interactive'],
276
+ },
277
+ {
278
+ key: 'successNotifications',
279
+ aliases: ['notifications', 'notificacoes', 'success-notifications'],
280
+ label: 'Notificacoes de skills aprendidas',
281
+ description: 'Mostra drafts pendentes, aprovacoes e skills externas para estudar.',
282
+ command: nodeExecPath,
283
+ args: [join(rootDir, 'bin', 'skill-master-success-skills.mjs'), '--notify'],
284
+ },
285
+ {
286
+ key: 'studySkills',
287
+ aliases: ['study-skills', 'skills-estudo', 'estudar'],
288
+ label: 'Skills para estudar',
289
+ description: 'Lista skills externas e links de criadores ainda nao aprovados.',
290
+ command: nodeExecPath,
291
+ args: [join(rootDir, 'bin', 'skill-master-success-skills.mjs'), '--study'],
292
+ },
293
+ {
294
+ key: 'approvalPackage',
295
+ aliases: ['approval-package', 'aprovar', 'pacote-aprovacao'],
296
+ label: 'Gerar pacote de aprovacao humana',
297
+ description: 'Cria um relatorio local para revisar e aprovar skills aprendidas.',
298
+ command: nodeExecPath,
299
+ args: [join(rootDir, 'bin', 'skill-master-success-skills.mjs'), '--approval-package'],
300
+ },
301
+ {
302
+ key: 'markLearnedStudy',
303
+ aliases: ['mark-study', 'manter-estudo'],
304
+ label: 'Manter skill candidata para estudo',
305
+ description: 'Seleciona uma candidata e registra decisao de manter para estudo.',
306
+ command: nodeExecPath,
307
+ args: [join(rootDir, 'bin', 'skill-master-success-skills.mjs'), '--mark-study-interactive'],
308
+ },
309
+ {
310
+ key: 'rejectLearnedSkill',
311
+ aliases: ['reject-skill', 'rejeitar-skill'],
312
+ label: 'Rejeitar skill candidata',
313
+ description: 'Seleciona uma candidata, registra rejeicao e preserva historico.',
314
+ command: nodeExecPath,
315
+ args: [join(rootDir, 'bin', 'skill-master-success-skills.mjs'), '--reject-interactive'],
316
+ confirmMessage: 'Abrir fluxo para rejeitar uma skill candidata?',
317
+ },
318
+ {
319
+ key: 'activateLearnedLocal',
320
+ aliases: ['activate-learned-local', 'ativar-local', 'skill-local'],
321
+ label: 'Ativar skill aprendida no workspace',
322
+ description: 'Instala uma skill aprendida em .codex/skills do projeto atual.',
323
+ command: nodeExecPath,
324
+ args: [join(rootDir, 'bin', 'skill-master-success-skills.mjs'), '--activate-interactive', '--target', 'local'],
325
+ confirmMessage: 'Selecionar e ativar uma skill aprendida no workspace atual?',
326
+ },
327
+ {
328
+ key: 'activateLearnedGlobal',
329
+ aliases: ['activate-learned-global', 'ativar-global', 'skill-global'],
330
+ label: 'Ativar skill aprendida global',
331
+ description: 'Instala uma skill aprendida em CODEX_HOME/skills ou ~/.codex/skills.',
332
+ command: nodeExecPath,
333
+ args: [join(rootDir, 'bin', 'skill-master-success-skills.mjs'), '--activate-interactive', '--target', 'global'],
334
+ confirmMessage: 'Selecionar e ativar uma skill aprendida como skill global deste usuario?',
335
+ },
336
+ {
337
+ key: 'notionSummary',
338
+ aliases: ['notion-summary', 'resumo-notion'],
339
+ label: 'Abrir resumo para Notion',
340
+ description: 'Mostra um resumo copiavel do estado de ativacao para registrar no ledger Notion.',
341
+ command: nodeExecPath,
342
+ args: [join(rootDir, 'bin', 'skill-master-activation.mjs'), '--notion-summary'],
343
+ },
110
344
  ];
111
345
  }
112
346
 
@@ -138,6 +372,7 @@ export function isInteractiveTerminal() {
138
372
  }
139
373
 
140
374
  export function formatStatusReport(status) {
375
+ const readiness = status.globalReadiness;
141
376
  const lines = [
142
377
  'Skill Master MCP - status local',
143
378
  `Diretorio: ${status.rootDir}`,
@@ -145,6 +380,13 @@ export function formatStatusReport(status) {
145
380
  `Semver local: ${status.semver}`,
146
381
  `Manifesto stable: ${status.manifestVersion}`,
147
382
  `Manifesto semver: ${status.manifestSemver}`,
383
+ `Drafts de skills aprendidas: ${status.pendingSuccessDrafts}`,
384
+ `Skills externas para estudar: ${status.studyCandidates}`,
385
+ `Global readiness: ${readiness.ready ? 'pronto' : readiness.mode}`,
386
+ `Global skills instaladas: ${readiness.installed.length}/${readiness.required}`,
387
+ `Codex global: ${readiness.codex.globalCommand ? 'sim' : readiness.codex.kind}`,
388
+ `Claude global: ${readiness.claude.globalCommand ? 'sim' : readiness.claude.present ? 'nao-global' : 'ausente'}`,
389
+ `Gemini global: ${readiness.gemini.globalCommand ? 'sim' : readiness.gemini.present ? 'nao-global' : 'ausente'}`,
148
390
  ];
149
391
 
150
392
  if (status.versionText) {
@@ -155,6 +397,41 @@ export function formatStatusReport(status) {
155
397
  return lines.join('\n');
156
398
  }
157
399
 
400
+ function formatGlobalAlert(status, { useColor = false } = {}) {
401
+ const readiness = status.globalReadiness;
402
+ if (readiness.ready) {
403
+ return renderPanelLines(
404
+ [
405
+ colorize('GLOBAL READY', ANSI.bold, useColor),
406
+ 'O MCP esta reconhecido como comando global neste computador.',
407
+ 'Codex, Claude e Gemini podem ser apontados para skill-master-mcp.',
408
+ 'A instalacao global e as skills embutidas ja estao prontas para uso.',
409
+ ],
410
+ { color: ANSI.green, useColor },
411
+ );
412
+ }
413
+
414
+ return [
415
+ renderPanelLines(
416
+ [
417
+ colorize('ALERTA GLOBAL', ANSI.bold, useColor),
418
+ 'Este computador ainda nao esta pronto para uso global do Skill Master.',
419
+ 'Execute agora: skill-master-menu --run bootstrap-global --yes',
420
+ 'Isso instala as skills globais e registra Codex, Claude e Gemini.',
421
+ ],
422
+ { color: ANSI.red, useColor },
423
+ ),
424
+ renderPanelLines(
425
+ [
426
+ colorize('AVISO SUTIL', ANSI.dim, useColor),
427
+ 'Sem instalacao global, o MCP continua util localmente, mas nao fica integrado como parte do sistema em todos os clientes.',
428
+ `Skills globais detectadas: ${readiness.installed.length}/${readiness.required}`,
429
+ ],
430
+ { color: ANSI.yellow, useColor },
431
+ ),
432
+ ].join('\n\n');
433
+ }
434
+
158
435
  function renderPanelLines(lines, { color = ANSI.cyan, useColor = false } = {}) {
159
436
  const width = Math.max(...lines.map((line) => line.length), 24);
160
437
  const border = `+${'-'.repeat(width + 2)}+`;
@@ -168,9 +445,14 @@ export function formatMenuBanner(status, { useColor = false } = {}) {
168
445
  colorize('Skill Master MCP', ANSI.bold, useColor),
169
446
  'Menu operacional para manutencao local',
170
447
  `Versao local ${status.semver} | canal ${status.manifestVersion}`,
448
+ `Pendencias: ${status.pendingSuccessDrafts} drafts | estudo: ${status.studyCandidates} links`,
449
+ `Global: ${status.globalReadiness.ready ? 'pronto' : 'requer instalacao global'}`,
171
450
  colorize('Setas + Enter para navegar', ANSI.dim, useColor),
172
451
  ];
173
- return renderPanelLines(lines, { color: ANSI.cyan, useColor });
452
+ return [
453
+ renderPanelLines(lines, { color: ANSI.cyan, useColor }),
454
+ formatGlobalAlert(status, { useColor }),
455
+ ].join('\n\n');
174
456
  }
175
457
 
176
458
  export function formatActionHeader(action, { useColor = false } = {}) {