auroq-os 2.7.0 → 2.8.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.
@@ -53,6 +53,7 @@ pasta-do-negocio/
53
53
  ├── agents/companion/data/ # memória: onde paramos, decisões, padrões, pendências
54
54
  ├── business/ # o negócio: cockpit, campanhas, processos, vault (fora do git)
55
55
  └── docs/knowledge/ # conhecimento do aluno
56
+ ├── mapa-do-negocio.md # resumo de uma página que todo squad lê primeiro (o Companion mantém: *contexto)
56
57
  ├── expert-mind/ # quem o aluno é: propósito, identidade, valores, tom de voz, história
57
58
  └── expert-business/ # o que ele faz: posicionamento, público, método, produtos
58
59
  ```
@@ -1,7 +1,7 @@
1
1
  project:
2
2
  name: "Auroq OS"
3
3
  type: greenfield
4
- version: 2.7.0
4
+ version: 2.8.1
5
5
  installedAt: '2026-03-16'
6
6
 
7
7
  ide:
@@ -4,7 +4,8 @@
4
4
  * Auroq OS — Sync Hook
5
5
  *
6
6
  * --session-start (SessionStart) checa o GitHub ao abrir; PUXA se for seguro; relata o que chegou
7
- * --remind (UserPromptSubmit) lembra, com moderacao, de trabalho nao entregue
7
+ * --remind (UserPromptSubmit) lembra, com moderacao, de trabalho nao entregue, e traz da
8
+ * memoria do negocio (app Auroq OS) o que tem a ver com o pedido
8
9
  *
9
10
  * Regras de ouro:
10
11
  * - Nunca bloqueia a sessao (sempre exit 0) e fica em silencio quando nao ha o que dizer.
@@ -97,8 +98,23 @@ function versionNotice() {
97
98
  return `[Auroq update] Saiu versao nova do sistema: v${local} instalada → v${latest} disponivel. Na sua primeira resposta, avise o expert em 1 frase simples e pergunte: "Quer que eu atualize agora? Leva uns 5 minutos e voce nao precisa fazer nada." Se ele disser sim: a atualizacao e feita pelo Ops, sem o expert abrir terminal — chame a tool forja_bundle (MCP arcane) com forge_id "ops" e fase "manutencao" e siga aqueles passos a risca (e o mesmo que ele pedir ao Ops "atualiza o sistema"). Se ele disser nao, nao pergunte de novo nesta conversa.`;
98
99
  }
99
100
 
101
+ // ─── Bilhete da memória (app Auroq OS, Fase 1 da memória do aluno) ───────────
102
+ // O app refaz `agents/companion/data/nucleo.md` sozinho depois das conversas (teto de 3.000
103
+ // caracteres). Toda conversa nova comeca com ele, no lugar de ler os arquivos inteiros da memoria.
104
+ const NUCLEO = path.join('agents', 'companion', 'data', 'nucleo.md');
105
+ const NUCLEO_MAX = 3000;
106
+
107
+ function nucleoNotice() {
108
+ let texto;
109
+ try { texto = fs.readFileSync(path.join(CWD, NUCLEO), 'utf8'); } catch { return null; }
110
+ texto = texto.replace(/^\uFEFF/, '').replace(/\r\n/g, '\n').trim();
111
+ if (!texto) return null;
112
+ if (texto.length > NUCLEO_MAX) texto = `${texto.slice(0, NUCLEO_MAX - 1)}…`;
113
+ return `[Memoria do sistema] Bilhete da memoria deste negocio (${NUCLEO}, refeito sozinho pelo app Auroq OS a partir das conversas anteriores; vale para todo agente, squad e skill desta pasta, nao so o Companion). Use para saber quem e o aluno, onde voces pararam, o que ja foi decidido e o que esta pendente; nao leia para o aluno sem ele pedir. Detalhes em agents/companion/data/.\n${texto}`;
114
+ }
115
+
100
116
  function sessionStart() {
101
- const vNotice = versionNotice();
117
+ const vNotice = [nucleoNotice(), versionNotice()].filter(Boolean).join('\n') || null;
102
118
  if (!isRepo() || !hasRemote()) { emit('SessionStart', vNotice); return; }
103
119
  const up = upstream();
104
120
  if (!up) { emit('SessionStart', vNotice); return; }
@@ -139,8 +155,54 @@ function sessionStart() {
139
155
  emit('SessionStart', lines.join('\n'));
140
156
  }
141
157
 
142
- function remind() {
143
- if (!isRepo()) return;
158
+ // ─── Busca na memória a cada pedido (app Auroq OS, Fase 2 da memória do aluno) ─────
159
+ // O app mantém um índice da memória do negócio; `auroq memoria busca --gancho` devolve até 3 trechos
160
+ // (1.500 caracteres) que passam no filtro de relevância, ou nada. Pedido trivial não busca. Sem o app
161
+ // (comando ausente, app fechado, demorou), segue em silêncio: a conversa nunca espera por isso.
162
+ const MEMORIA = path.join('agents', 'companion', 'data');
163
+ const TEMPO_DA_BUSCA_MS = 3500;
164
+ const TRIVIAL = /^(?:oi|ola|olá|ok|blz|beleza|obrigad[oa]|valeu|sim|n[aã]o|pode|segue|continua|bom dia|boa tarde|boa noite|top|show|perfeito|certo|isso|entendi|bora|go)\b/i;
165
+
166
+ function acharAuroq() {
167
+ const nomes = process.platform === 'win32' ? ['auroq.exe'] : ['auroq'];
168
+ const pastas = String(process.env.PATH || '').split(path.delimiter).filter(Boolean);
169
+ if (process.platform === 'darwin') pastas.push('/Applications/Auroq OS.app/Contents/Resources/bin');
170
+ for (const pasta of pastas) {
171
+ for (const nome of nomes) {
172
+ const alvo = path.join(pasta, nome);
173
+ try { if (fs.statSync(alvo).isFile()) return alvo; } catch { /* segue */ }
174
+ }
175
+ }
176
+ return null;
177
+ }
178
+
179
+ function pedidoDoAluno(entrada) {
180
+ try {
181
+ const dado = JSON.parse(entrada || '{}');
182
+ return typeof dado.prompt === 'string' ? dado.prompt : '';
183
+ } catch {
184
+ return '';
185
+ }
186
+ }
187
+
188
+ function buscaNaMemoria(pedido) {
189
+ const texto = String(pedido || '').replace(/\s+/g, ' ').trim();
190
+ if (texto.length < 8 || (texto.length < 30 && TRIVIAL.test(texto))) return null;
191
+ if (!fs.existsSync(path.join(CWD, MEMORIA))) return null;
192
+ const programa = acharAuroq();
193
+ if (!programa) return null;
194
+ try {
195
+ const saida = execFileSync(programa, ['memoria', 'busca', texto.slice(0, 600), '--gancho'], {
196
+ cwd: CWD, encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'], timeout: TEMPO_DA_BUSCA_MS, windowsHide: true,
197
+ }).trim();
198
+ return /^\[Memoria do (sistema|Companion)\]/.test(saida) ? saida.slice(0, 2500) : null;
199
+ } catch {
200
+ return null;
201
+ }
202
+ }
203
+
204
+ function lembrete() {
205
+ if (!isRepo()) return null;
144
206
  const dirty = dirtyFiles();
145
207
  const up = upstream();
146
208
  const ahead = up ? countRange(`${up}..HEAD`) : 0;
@@ -148,30 +210,37 @@ function remind() {
148
210
  const now = Date.now();
149
211
  if (dirty.length === 0 && ahead === 0) {
150
212
  if (st.dirtySince) { st.dirtySince = 0; writeState(st); }
151
- return;
213
+ return null;
152
214
  }
153
- if (!st.dirtySince) { st.dirtySince = now; writeState(st); return; }
154
- if (now - st.dirtySince < REMIND_AFTER_MS) return;
155
- if (st.lastRemind && now - st.lastRemind < REMIND_EVERY_MS) return;
215
+ if (!st.dirtySince) { st.dirtySince = now; writeState(st); return null; }
216
+ if (now - st.dirtySince < REMIND_AFTER_MS) return null;
217
+ if (st.lastRemind && now - st.lastRemind < REMIND_EVERY_MS) return null;
156
218
  st.lastRemind = now;
157
219
  writeState(st);
158
220
  const mins = Math.round((now - st.dirtySince) / 60000);
159
- emit('UserPromptSubmit', `[Auroq lembrete] Ha trabalho nao entregue ha ~${mins} min (${dirty.length} arquivo(s) alterado(s)${ahead ? `, ${ahead} commit(s) sem push` : ''}). NAO interrompa o raciocinio atual. Ao fechar o bloco em andamento, ofereca em UMA linha: "quer que eu salve e entregue pro GitHub?". Nunca entregue sem o expert pedir.`);
221
+ return (`[Auroq lembrete] Ha trabalho nao entregue ha ~${mins} min (${dirty.length} arquivo(s) alterado(s)${ahead ? `, ${ahead} commit(s) sem push` : ''}). NAO interrompa o raciocinio atual. Ao fechar o bloco em andamento, ofereca em UMA linha: "quer que eu salve e entregue pro GitHub?". Nunca entregue sem o expert pedir.`);
222
+ }
223
+
224
+ function remind(entrada) {
225
+ const partes = [buscaNaMemoria(pedidoDoAluno(entrada)), lembrete()].filter(Boolean);
226
+ emit('UserPromptSubmit', partes.join('\n\n') || null);
160
227
  }
161
228
 
162
229
  let ran = false;
230
+ let entrada = '';
163
231
  function main() {
164
232
  if (ran) return;
165
233
  ran = true;
166
- try { if (MODE === '--remind') remind(); else sessionStart(); }
234
+ try { if (MODE === '--remind') remind(entrada); else sessionStart(); }
167
235
  catch (e) { console.error(`[auroq-sync] ${e.message}`); }
168
236
  process.exit(0);
169
237
  }
170
238
 
171
239
  // Consome o JSON que o Claude Code envia no stdin (nao depende dele) e roda no fim;
172
240
  // fallback por timer garante execucao mesmo se o stdin nao fechar.
241
+ // O pedido do aluno (UserPromptSubmit) vem nesse JSON e é o que a busca da memória usa.
173
242
  process.stdin.resume();
174
- process.stdin.on('data', () => {});
243
+ process.stdin.on('data', (pedaco) => { if (entrada.length < 200000) entrada += pedaco; });
175
244
  process.stdin.on('end', main);
176
245
  process.stdin.on('error', main);
177
246
  setTimeout(main, 400).unref();
@@ -4,8 +4,10 @@
4
4
 
5
5
  ## Regra principal: fim de tarefa, memoria salva
6
6
 
7
- No fim de CADA tarefa concluida, o agente ativo (Companion ou qualquer outro) salva sem esperar
8
- pedido, antes da resposta final:
7
+ No fim de CADA tarefa concluida, o agente ativo (Companion, Ops, qualquer squad, skill ou a equipe que
8
+ o Companion abre, no Claude ou no Codex) salva sem esperar pedido, antes da resposta final. Com o app
9
+ Auroq OS aberto, a memoria tambem e consolidada sozinha a cada ~30 min e logo que um trabalho termina;
10
+ sem o app (so no terminal), esta regra e o que garante a memoria:
9
11
  → `agents/companion/data/contexto-dinamico.md`: onde paramos (o que ficou pronto, o que segue, o que espera o aluno)
10
12
  → `agents/companion/data/log-decisoes.md`: as decisoes tomadas na tarefa (formato abaixo)
11
13
  → tracker do projeto, se a tarefa e de um projeto do cockpit
@@ -59,6 +61,42 @@ SE o aluno corrigiu um jeito seu de trabalhar ("nao faz assim", "ja falei", "err
59
61
  > Salvar estado antes de compactacao de contexto e responsabilidade do
60
62
  > `dna-operacional.md` (Session Management) — nao repetir aqui.
61
63
 
64
+ ## Memória automática do app (Auroq OS)
65
+
66
+ Com o app Auroq OS aberto, depois das conversas na pasta do negócio, o app lê o que mudou e, usando a
67
+ própria IA do aluno, atualiza sozinho o "Onde Parou" do `contexto-dinamico.md`, acrescenta decisões em
68
+ `log-decisoes.md`, pendências em `demandas-backlog.md`, regras em `custom-do-aluno.md` e escreve:
69
+ → `agents/companion/data/diario/AAAA-MM.md`: um resumo por conversa (só acrescenta)
70
+ → `agents/companion/data/nucleo.md`: o bilhete curto (até 3.000 caracteres) que entra no começo de toda
71
+ conversa
72
+ Isso não tira a regra principal: a IA da conversa continua salvando no fim de cada tarefa (o app é a rede
73
+ de segurança). Não edite `nucleo.md` nem o `diario/` à mão: o app refaz a partir dos outros arquivos.
74
+
75
+ ### Buscar na memória (app Auroq OS)
76
+
77
+ O app mantém uma busca de toda a memória do negócio (estes arquivos, o diário, o arquivo da faxina,
78
+ `docs/knowledge/`, `business/processos/`, as conversas antigas desta pasta e o que o Claude e o Codex
79
+ anotaram sozinhos). No Claude Code, a cada pedido do aluno, até 3 trechos que têm a ver chegam sozinhos
80
+ ("[Memoria do sistema] Trechos da memoria…"), em toda conversa da pasta, de qualquer agente; use só o
81
+ que ajudar.
82
+
83
+ SE a resposta depende do passado do negócio (preço, decisão, cliente, fornecedor, campanha, "o que a
84
+ gente combinou", "lembra de…") e nem o bilhete nem os trechos que chegaram respondem:
85
+ → Rode `auroq memoria busca "<palavras do assunto>"` (Windows igual) e responda com o que achar
86
+ → Trecho do "arquivo da memória" saiu da memória ativa (velho, repetido ou trocado): confira antes de usar
87
+ → O comando não existe ou falhou (app fechado): procure nos arquivos de `agents/companion/data/` e siga
88
+ → Pedido novo, que não depende do passado, não precisa de busca
89
+
90
+ ### Arrumação diária (app Auroq OS)
91
+
92
+ Uma vez por dia, com o app aberto e sem conversa no meio, a memória se arruma sozinha usando a IA do
93
+ aluno: faz uma prova de lembrança (`agents/companion/data/dreaming/prova.json`, nota em
94
+ `dreaming/historico.md`), tira da memória ativa o que é repetido, trocado, vencido ou pendência feita há
95
+ mais de 30 dias (no máximo 10% por dia; vai para `agents/companion/data/arquivo/AAAA-MM-DD.md` com o
96
+ motivo, nunca é apagado, e volta tudo se a prova piorar) e transforma as correções do dia em regras
97
+ curtas em `custom-do-aluno.md`. Não edite `dreaming/` à mão. Para trazer algo de volta do arquivo,
98
+ copie o trecho para o lugar dele.
99
+
62
100
  ## Onde Cada Coisa Vai
63
101
 
64
102
  | Tipo de informacao | Destino |
@@ -68,10 +106,15 @@ SE o aluno corrigiu um jeito seu de trabalhar ("nao faz assim", "ja falei", "err
68
106
  | Onde estamos agora | `agents/companion/data/contexto-dinamico.md` |
69
107
  | Ideia ou pendencia | `agents/companion/data/demandas-backlog.md` |
70
108
  | Padrao recorrente | `agents/companion/data/padroes-observados.md` |
109
+ | Fato do negócio (produto, preço, público, canal, meta) | Bloco do Mapa + `docs/knowledge/mapa-do-negocio.md` (Companion, `*contexto`; com fonte, dedução só confirmada) |
71
110
  | Conhecimento permanente | `docs/knowledge/{subpasta}/` |
72
111
  | Processo documentado | `business/processos/` |
73
112
  | Estado de trabalho (pre-autocompact) | Documento de trabalho do projeto |
74
113
  | Correcao do aluno (vira regra) | `.claude/rules/custom-do-aluno.md` |
114
+ | Resumo de cada conversa (feito pelo app) | `agents/companion/data/diario/AAAA-MM.md` |
115
+ | Bilhete curto do começo da conversa (feito pelo app) | `agents/companion/data/nucleo.md` |
116
+ | O que a faxina diária tirou da memória ativa (feito pelo app) | `agents/companion/data/arquivo/AAAA-MM-DD.md` |
117
+ | Prova e histórico da arrumação diária (feito pelo app) | `agents/companion/data/dreaming/` |
75
118
 
76
119
  ## Regra de Ouro
77
120
 
package/AGENTS.md CHANGED
@@ -28,6 +28,15 @@ Se alguma instrução antiga desta pasta contradisser estas regras, valem estas.
28
28
  8. Como o sistema funciona por dentro (tipos de agente, ciclos, conhecimento, projetos):
29
29
  `.auroq-core/como-funciona.md`. Leia só quando o aluno perguntar ou a tarefa precisar.
30
30
 
31
+ ## Mapa do Negócio: leia primeiro
32
+
33
+ - Antes de trabalhar em qualquer coisa do negócio (texto, anúncio, site, oferta, conteúdo, plano), todo
34
+ agente, squad e skill lê `docs/knowledge/mapa-do-negocio.md`: quem é o aluno, o que vende e por quanto, para
35
+ quem, por onde vende, a meta dos 90 dias e o tom. O detalhe está nos arquivos que ele aponta.
36
+ - O que está em "Ainda não sei" não é fato: não invente; pergunte só se a tarefa depender disso.
37
+ - Fato novo de negócio na conversa (produto, preço, público, canal, meta) atualiza o Mapa pelo Companion
38
+ (`*contexto`), com a fonte. Dedução nunca vira fato sem o aluno confirmar.
39
+
31
40
  Se a ferramenta do MCP `arcane` falhar, mostre a mensagem como veio e pare. Exceções: pedido de
32
41
  atualizar o sistema ou consertar a conexão (o Ops roda a manutenção local) e servidor que recusou o
33
42
  acesso quando a pasta do agente existe em `agents/` (aí vale a versão local, avisando em uma linha).
@@ -106,6 +115,17 @@ mesma resposta que essa parte não foi feita e por quê; nunca pule em silêncio
106
115
 
107
116
  ## Memória
108
117
 
118
+ - No começo da conversa, se o bilhete da memória não veio no contexto, leia
119
+ `agents/companion/data/nucleo.md` quando ele existir: quem é o aluno, onde vocês pararam, as últimas
120
+ decisões e as pendências. O app Auroq OS refaz esse bilhete e o diário (`agents/companion/data/diario/`)
121
+ sozinho depois das conversas; não edite os dois à mão.
122
+ - Antes de responder algo que depende do passado do negócio (preço, decisão, cliente, fornecedor,
123
+ campanha, "o que a gente combinou", "lembra de…") e que o bilhete não responde, procure na memória:
124
+ `auroq memoria busca "<palavras do assunto>"` (com o app Auroq OS aberto; no Claude Code os trechos
125
+ que têm a ver já chegam sozinhos a cada pedido). Use o que achar, com a data quando ajudar; trecho do
126
+ "arquivo da memória" saiu da memória ativa por ser velho, repetido ou trocado: confira antes de usar.
127
+ Sem o comando (app fechado), procure em `agents/companion/data/`. Pedido novo que não depende do
128
+ passado não precisa de busca.
109
129
  - No fim de cada tarefa concluída, salve sem esperar pedido: onde paramos em
110
130
  `agents/companion/data/contexto-dinamico.md` e as decisões tomadas em
111
131
  `agents/companion/data/log-decisoes.md`. Avise em uma linha o que anotou. Projeto do cockpit:
package/CHANGELOG.md CHANGED
@@ -1,3 +1,47 @@
1
+ ## 2.8.1 — 2026-10-22
2
+
3
+ ### Mapa do Negócio: o sistema conhece o seu negócio e toda a equipe lê isso primeiro
4
+
5
+ - **Um resumo de uma página do seu negócio.** Nova semente `docs/knowledge/mapa-do-negocio.md`: quem você é, o que vende e por quanto, para quem, por onde vende, a meta dos próximos 90 dias e o tom, com links para o detalhe de cada parte e, no fim, "Ainda não sei" (o que falta) e "Atualizado em". Até uns 3.000 caracteres.
6
+ - **Toda a equipe lê o mapa primeiro.** O `AGENTS.md` da sua pasta manda todo agente, squad e skill ler esse resumo antes de trabalhar em qualquer coisa do negócio, não tratar "Ainda não sei" como fato e atualizar o mapa pelo Companion quando aparece fato novo. A regra da memória e o guia do sistema (`como-funciona.md`) ganharam a mesma linha.
7
+ - **Sementes novas dos blocos** (chegam também em quem já tem a pasta, sem sobrescrever nada): `expert-business/canais-e-numeros.md`, `metas.md`, `provas.md`, `referencias.md`, `equipe-e-ferramentas.md` e `expert-mind/vida-pessoal.md` (opcional).
8
+ - Conteúdo ao vivo (catálogo `auroq-core` 2.3.30): **skill `auroq-contexto` no Companion.** 11 blocos (quem é você, o que vende, para quem, como vende, meta e o que trava, posicionamento, provas, tom e valores, referências, vida pessoal opcional, equipe e ferramentas). Primeiro lê o seu material (bio, site, Instagram, apresentação, PDF, prints, áudio, página de vendas) e só pergunta o que faltou, uma pergunta por vez, em português simples. Cada fato fica com a fonte (`o aluno disse, 22/10`, `do site, 22/10`); o que o Companion só deduziu fica "a confirmar" e nunca vira fato sem você dizer que está certo. Nunca pede senha, token ou dado bancário; vida pessoal é opcional e qualquer pergunta pode ser pulada.
9
+ - **Primeiro uso mais rápido** (decisão do Euriler, 22/10: ver resultado logo). O `*primeiro-uso` agora pede o material primeiro, faz só o bloco essencial (blocos 1 a 5) e termina como antes: organiza os projetos no app e no GitHub e grava `.auroq/primeiro-uso.json`. O resto do mapa vem aos poucos.
10
+ - **Pergunta do dia.** Na conversa normal, se o mapa tem lacunas, o Companion faz UMA pergunta no começo (pode pular), no máximo uma por dia, nunca no meio de uma tarefa. Comando novo `*contexto [bloco]` para ver, completar, revisar ou refazer uma parte do mapa. "Lancei um produto" ou "mudei o preço" atualizam o mapa na hora; a cada 90 dias o Companion propõe revisar a meta.
11
+ - Mantém `arcane-mcp@0.7.0`. Instaladores do repositório preparados para 2.8.1.
12
+
13
+ ### Também nesta versão
14
+
15
+ - Conteúdo ao vivo (catálogo `auroq-core` 2.3.29, 22/10): **organizar os projetos no fim da primeira conversa.** No P5 do `*primeiro-uso`, o Companion passa a organização inteira para a skill `auroq-configurar` do app: ela lê a memória gravada no P4, as pastas e o GitHub, conversa com o aluno até a organização ficar do jeito dele e, com o "sim", arruma a barra, cria as cópias privadas que faltam no GitHub e anota na memória. O Companion só faz o GitHub sozinho quando a skill não existe ou é a versão antiga, que só arruma a barra.
16
+ - Conteúdo ao vivo (catálogo `auroq-core` 2.3.28, 22/10): **"Conexões" no app.** A seção das contas no app Auroq OS virou Configurações → **Conexões**: "Essenciais — nível 1" (GitHub, Vercel e Supabase) no topo, depois "Essenciais — nível 2" (Cloudflare, cofre de senhas e Google) e "Outras conexões úteis" (Higgsfield, HeyGen, Canva, Meta Ads, Notion e a conexão personalizada). O Companion manda para "Configurações → Conexões" quando falta conta; o `*bootstrap-2` do Ops diz que, no app, as extras se conectam ali; e o `*conectar-1password` ganhou o caminho do Bitwarden (Secrets Manager, conta de máquina, token sem passar pelo chat), que o app abre numa conversa com o Ops.
17
+
18
+ ## 2.8.0 — 2026-10-22
19
+
20
+ ### A memória do sistema procura sozinha, salva no fim do trabalho e se arruma todo dia (com o app Auroq OS)
21
+
22
+ - **Memória do sistema inteiro, não só do Companion.** Vale para todo agente, squad e skill que roda na sua pasta: o Companion, o Ops, os squads do Pack, a equipe que o Companion abre, no Claude e no Codex. O bilhete do começo da conversa e os trechos de cada pedido chegam em toda conversa do Claude Code na pasta (rótulo "[Memoria do sistema]"; o antigo "[Memoria do Companion]" continua aceito).
23
+ - **Salva no fim do trabalho.** Com o app aberto, além da rotina de ~30 min, a memória é consolidada logo que um trabalho termina. Sem o app (só no terminal), a regra `memoria-inteligente.md` manda a IA salvar ao concluir cada tarefa, como antes.
24
+
25
+ - **A cada pedido, a memória traz o que tem a ver.** O app Auroq OS mantém uma busca de toda a memória do seu negócio: o que o Companion anotou, o diário das conversas, o seu conhecimento (`docs/knowledge/`, `business/processos/`), as conversas antigas desta pasta e o que o Claude e o Codex anotaram sozinhos. No Claude Code, o gancho que já roda a cada mensagem (`.claude/hooks/auroq-sync.cjs`) traz até 3 trechos que têm a ver com o seu pedido, só quando passam no filtro de relevância; "oi" e "ok" não buscam. Sem o app aberto, nada muda e a conversa nunca espera.
26
+ - **Busca sob demanda.** A IA pode procurar sozinha com `auroq memoria busca "<assunto>"` (Claude, Codex e Grok). A regra `memoria-inteligente.md` e o `AGENTS.md` dizem quando buscar: quando a resposta depende do passado do negócio e o bilhete não responde.
27
+ - **Arrumação diária.** Uma vez por dia, com o app aberto e sem conversa no meio, a memória faz uma prova de lembrança, guarda no arquivo (`agents/companion/data/arquivo/`) o que ficou repetido, trocado ou vencido (no máximo 10% por dia, nunca apaga e desfaz se a prova piorar) e transforma as suas correções do dia em regras curtas no `custom-do-aluno.md`. A regra da memória explica o arquivo e a pasta `dreaming/`.
28
+ - **Diagnóstico leve.** `doctor --leve` é o diagnóstico que o app roda sozinho na arrumação: o mesmo de sempre sem chamar o Codex de verdade (não gasta o seu plano) e sem mexer na configuração global do Codex. Todo `doctor` agora termina com uma linha `AUROQ_RESULTADO doctor=<ok|pendencias> etiquetas=…` para o app ler.
29
+ - Tudo fica no seu computador e no seu GitHub; nada vai para a Arka. Mantém `arcane-mcp@0.7.0`. Instaladores do repositório preparados para 2.8.0.
30
+
31
+ ### Também nesta versão
32
+
33
+ - Conteúdo ao vivo (catálogo `auroq-core` 2.3.26 e 2.3.27, no ar em 21/10): **Companion é Companion.** O aluno não dá mais nome ao Companion (decisão do Euriler: nome dado pelo aluno confunde depois). Saiu o passo do nome do `*primeiro-uso` e a FASE 10 do Bootstrap do Ops, e o guia do sistema não sugere mais pôr um nome no `custom-do-aluno.md` (2.3.27). Quem já tinha dado um nome continua com o atalho que tem (ex.: `/atlas-companion`), e `/auroq-companion` sempre vale.
34
+ - O fim da primeira conversa no app passa a ficar em `.auroq/primeiro-uso.json` (antes o sinal era o atalho com o nome).
35
+
36
+ ## 2.7.1 — 2026-10-21
37
+
38
+ ### A memória do Companion se atualiza sozinha (com o app Auroq OS)
39
+
40
+ - **Bilhete da memória no começo de toda conversa.** O app Auroq OS passa a refazer sozinho, depois das suas conversas, um bilhete curto (`agents/companion/data/nucleo.md`, até 3.000 caracteres) com quem você é, o seu negócio, onde vocês pararam, as últimas decisões, as pendências abertas e as suas regras. No Claude Code, o gancho que já roda ao abrir a conversa (`.claude/hooks/auroq-sync.cjs`) entrega esse bilhete à IA antes da primeira mensagem; no Codex e no Grok, o `AGENTS.md` manda ler o arquivo. Sem o arquivo (pasta sem o app ou antes da primeira conversa), nada muda.
41
+ - **Diário por conversa.** O app escreve em `agents/companion/data/diario/AAAA-MM.md` um resumo de 3 a 8 tópicos de cada conversa (só acrescenta). A regra `memoria-inteligente.md` e o `AGENTS.md` explicam os dois arquivos novos e pedem para não editá-los à mão.
42
+ - A IA da conversa continua salvando no fim de cada tarefa, como na 2.7.0: o app é a rede de segurança, não a troca. Tudo fica na pasta do negócio e no GitHub do aluno; nada vai para a Arka.
43
+ - Mantém `arcane-mcp@0.7.0`. Instaladores do repositório preparados para 2.7.1.
44
+
1
45
  ## 2.7.0 — 2026-10-21
2
46
 
3
47
  ### Regras de trabalho novas para a IA da sua pasta
package/README.md CHANGED
@@ -236,7 +236,8 @@ agents/ → Seu exercito (companion, workers, minds, squads)
236
236
  1. Ative o Ops (`/AuroqOS:agents:ops` no Claude/Grok ou `$ops` no Codex) e peca o Bootstrap 1.
237
237
  2. O Ops prepara browser oficial, Computer Use quando elegivel e Playwright como fallback, sempre com smoke test real.
238
238
  3. Ative o Companion (`/auroq-companion` no Claude/Grok ou `$companion` no Codex).
239
- 4. Preencha os templates em `docs/knowledge/expert-mind/` e `docs/knowledge/expert-business/`.
239
+ 4. O Companion monta o seu Mapa do Negocio (`docs/knowledge/mapa-do-negocio.md`): le o material que voce tiver,
240
+ pergunta so o que faltou e completa o resto aos poucos (`*contexto`). Todo squad le esse resumo primeiro.
240
241
  5. Pronto — o sistema ja te conhece.
241
242
 
242
243
  ## Filosofia
@@ -254,13 +255,13 @@ agents/ → Seu exercito (companion, workers, minds, squads)
254
255
 
255
256
  ## Observabilidade e integridade do motor
256
257
 
257
- Apos publicacao, `npx -y auroq-os@2.7.0 doctor` mostra a fila local segura e os comandos pinados de
258
- manutencao/diagnostico. `npx -y auroq-os@2.7.0 manutencao` preserva o caminho existente
258
+ Apos publicacao, `npx -y auroq-os@2.8.1 doctor` mostra a fila local segura e os comandos pinados de
259
+ manutencao/diagnostico. `npx -y auroq-os@2.8.1 manutencao` preserva o caminho existente
259
260
  de consentimento legado, studentFiles, customizacoes e dados do negocio. Nao ha
260
261
  migracao forcada. O registro MCP aponta para `arcane-mcp@0.7.0` — o pin mora no campo
261
262
  `arcaneMcpPin` do package.json (fonte unica; o servidor le o mesmo campo no npm).
262
263
  `npm run release:verify` recusa publicar com um pin que o npm nao resolva.
263
- Os instaladores do repositorio ficam preparados para 2.7.0; as copias publicas so recebem
264
+ Os instaladores do repositorio ficam preparados para 2.8.1; as copias publicas so recebem
264
265
  a versao apos os gates nativos e a verificacao do tarball publicado.
265
266
  O pacote inclui `lib/runtime-integrity.json`: inventario SHA-256 gerado depois da montagem da casca, verificavel com `npm run integrity:verify` dentro do pacote extraido. Ele comprova consistencia do conteudo; nao e uma assinatura de autoria.
266
267
 
package/bin/auroq-os.js CHANGED
@@ -427,7 +427,8 @@ const HEALTH_CHECKS = [
427
427
  ];
428
428
 
429
429
  /**
430
- * O aluno da um nome ao Companion no bootstrap (FASE 10 do Ops): `/atlas-companion`. Um
430
+ * Ate 21/10/2026 o aluno dava um nome ao Companion no bootstrap (FASE 10 do Ops, que saiu:
431
+ * "Companion e Companion"), e quem deu continua com ele: `/atlas-companion`. Um
431
432
  * comando com esse nome que ainda aponta pro Companion (recurso `companion` do MCP ou a
432
433
  * pasta agents/companion/) vale como a casca dele — um clone do negocio que so tem o
433
434
  * comando com o nome do aluno nao pode ser acusado de "arquivo faltando". So o Companion
@@ -575,9 +576,13 @@ async function runHealthChecks(targetDir) {
575
576
  * a falha do MCP e silenciosa (conteudo simplesmente nao aparece), entao alguem
576
577
  * precisa perguntar em voz alta se o caminho inteiro esta de pe.
577
578
  */
578
- async function runDoctor(targetDir) {
579
+ async function runDoctor(targetDir, { leve = false } = {}) {
580
+ // `--leve` (2.8.0, arrumacao diaria do app Auroq OS): o diagnostico que roda sozinho uma vez por
581
+ // dia. Pula o arranque medido do conteudo ao vivo e todo o relatorio do Codex (que chama o Codex DE
582
+ // VERDADE, gastando o plano do aluno, e limpa o config global em ~/.codex, fora da pasta do
583
+ // negocio) e nao escreve o recibo em ~/.auroq/install.log. O resto e o mesmo doctor.
579
584
  showBanner();
580
- log(`${BOLD}Diagnostico do Auroq${RESET}`);
585
+ log(`${BOLD}Diagnostico do Auroq${leve ? ' (leve)' : ''}${RESET}`);
581
586
  log('');
582
587
 
583
588
  const problemas = [];
@@ -723,7 +728,7 @@ async function runDoctor(targetDir) {
723
728
  // 6. o conteudo ao vivo SOBE a tempo? (EMB-027: registro certo, servidor no ar, e mesmo
724
729
  // assim o Codex/Claude Code desistiam antes do pacote terminar de baixar)
725
730
  const semArranque = process.env.NODE_ENV === 'test' && process.env.AUROQ_SKIP_AUTH === '1';
726
- if (pin && !semArranque) {
731
+ if (pin && !semArranque && !leve) {
727
732
  log(` ${DIM}Abrindo o conteudo ao vivo pra medir (na primeira vez pode levar 1-2 min)...${RESET}`);
728
733
  aquecerArcaneMcp();
729
734
  const ms = await medirArranqueArcaneMcp(pin);
@@ -739,7 +744,7 @@ async function runDoctor(targetDir) {
739
744
  }
740
745
 
741
746
  // 7. Codex — relatorio completo numa tela so (EMB-028). Nada de pedir comando por comando.
742
- if (pin && !semArranque && temToml) {
747
+ if (pin && !semArranque && temToml && !leve) {
743
748
  log('');
744
749
  log(` ${CYAN}Codex — relatorio pro suporte${RESET}`);
745
750
  const vCodex = versaoDoCodex();
@@ -818,7 +823,10 @@ async function runDoctor(targetDir) {
818
823
  // Recibo duravel pro suporte, inclusive quando fechou limpo: sem o historico completo o plantao
819
824
  // nao sabe se a pendencia de ontem foi resolvida. Conveniencia — nunca pode derrubar o doctor,
820
825
  // por isso montar o texto tambem fica DENTRO do try.
826
+ // A ultima linha e para o app ler (vocabulario fechado das etiquetas, nunca o texto da pendencia).
827
+ const resultado = pendencias => console.log(`AUROQ_RESULTADO doctor=${pendencias.length ? 'pendencias' : 'ok'} etiquetas=${[...new Set(pendencias.map(p => rotulo(p)))].join(',')}`);
821
828
  const recibo = pendencias => {
829
+ if (leve) return;
822
830
  try {
823
831
  registrarInstallLog('doctor', pendencias.length ? `pendencias=${pendencias.length} ${pendencias.map(p => rotulo(p)).join(',')}` : 'ok');
824
832
  } catch { /* recibo e conveniencia pro suporte */ }
@@ -826,6 +834,7 @@ async function runDoctor(targetDir) {
826
834
  if (problemas.length === 0) {
827
835
  success('Tudo certo. Pode chamar o Companion.');
828
836
  recibo(problemas);
837
+ resultado(problemas);
829
838
  return 0;
830
839
  }
831
840
  error(`${problemas.length} coisa(s) pra resolver:`);
@@ -833,6 +842,7 @@ async function runDoctor(targetDir) {
833
842
  recibo(problemas);
834
843
  log('');
835
844
  log(`${DIM}Se travar, chame o suporte: 11 93621-4486${RESET}`);
845
+ resultado(problemas);
836
846
  return 1;
837
847
  }
838
848
 
@@ -2476,7 +2486,7 @@ if (['init', 'install', 'update'].includes(command)) {
2476
2486
  });
2477
2487
  } else if (command === 'doctor' || command === 'diagnostico') {
2478
2488
  // `auth.sair`: o doctor termina logo depois de falar com o servidor (Node 24 no Windows).
2479
- runDoctor(process.cwd()).then(code => auth.sair(code)).catch(e => {
2489
+ runDoctor(process.cwd(), { leve: process.argv.includes('--leve') }).then(code => auth.sair(code)).catch(e => {
2480
2490
  error(`Falha no diagnostico: ${e.message}`);
2481
2491
  auth.sair(1);
2482
2492
  });
@@ -589,7 +589,7 @@ function Invoke-AuroqLogin {
589
589
  # sucesso. Usado como pergunta de sim/nao, ele dizia "voce ja estava logado"
590
590
  # pra quem nunca logou, pulava o portao e deixava a conta sem acesso chegar ate
591
591
  # a criacao da pasta.
592
- & (Get-AuroqNpx) -y auroq-os@2.7.0 check-access
592
+ & (Get-AuroqNpx) -y auroq-os@2.8.1 check-access
593
593
  if ($LASTEXITCODE -ne 0) {
594
594
  Write-AuroqLog 'login' 'recusado'
595
595
  Write-Host ''
@@ -677,7 +677,7 @@ function Invoke-AuroqInit {
677
677
  if ($env:AUROQ_INSTALL_DRY_RUN) { Write-AuroqOk 'Sistema - seria montado aqui'; return }
678
678
 
679
679
  Set-Location $script:AuroqPastaAlvo
680
- & (Get-AuroqNpx) -y auroq-os@2.7.0 instalar
680
+ & (Get-AuroqNpx) -y auroq-os@2.8.1 instalar
681
681
  if ($LASTEXITCODE -ne 0) {
682
682
  Write-AuroqLog 'init' 'falhou'
683
683
  Write-AuroqErro 'A montagem do sistema parou no meio.' 'Rode o mesmo comando de novo. Se repetir, mande pro suporte o arquivo install.log da pasta .auroq.'
@@ -219,9 +219,9 @@ auroq_tem_terminal() {
219
219
  # recebem pedaco do script no lugar da resposta dele.
220
220
  auroq_npx_aluno() {
221
221
  if [ -t 0 ]; then
222
- npx -y auroq-os@2.7.0 "$@"
222
+ npx -y auroq-os@2.8.1 "$@"
223
223
  else
224
- npx -y auroq-os@2.7.0 "$@" < /dev/tty
224
+ npx -y auroq-os@2.8.1 "$@" < /dev/tty
225
225
  fi
226
226
  }
227
227
 
@@ -2,7 +2,7 @@
2
2
  "schema": 1,
3
3
  "algorithm": "sha256",
4
4
  "scope": "packaged-runtime-and-cascas",
5
- "version": "2.7.0",
5
+ "version": "2.8.1",
6
6
  "files": [
7
7
  {
8
8
  "path": ".auroq-core/constitution.md",
@@ -10,7 +10,7 @@
10
10
  },
11
11
  {
12
12
  "path": ".auroq-core/core-config.yaml",
13
- "sha256": "0609978c04eff486fe92bb804a8d4f7bc4c7acd351e38451389f79308808de42"
13
+ "sha256": "9d78b21861c537ff8649a09983f1e723fb7150d6db5cbdecd3588c823fc63260"
14
14
  },
15
15
  {
16
16
  "path": ".auroq-core/core/synapse/context/context-builder.js",
@@ -190,7 +190,7 @@
190
190
  },
191
191
  {
192
192
  "path": ".claude/hooks/auroq-sync.cjs",
193
- "sha256": "d9b2a514cf516ba146304a22a40910c848eb6957c8ac5fc92bd82bce1f0cb109"
193
+ "sha256": "f916fbac4b1236dded1f5253807a5147674081e416ebe215bebd6d6f97b1469b"
194
194
  },
195
195
  {
196
196
  "path": ".claude/hooks/precompact-session-digest.cjs",
@@ -210,7 +210,7 @@
210
210
  },
211
211
  {
212
212
  "path": "bin/auroq-os.js",
213
- "sha256": "003cfb49e4c3546c89650113fde96b67b9717ae92e46657cda7042b5e4fad77e"
213
+ "sha256": "2f3da035fe9113a0018a1088c9477428ee725da3b4577740a22bb935a550ce5b"
214
214
  },
215
215
  {
216
216
  "path": "lib/ahi/client.mjs",
@@ -278,7 +278,7 @@
278
278
  },
279
279
  {
280
280
  "path": "package.json",
281
- "sha256": "48015758b761cd7cf54e716183eebf228403114087b532908386af6e919f8a32"
281
+ "sha256": "1251a91b1b67e50442061fab1de9b6a1b6d491a236b589744644577f0771595a"
282
282
  },
283
283
  {
284
284
  "path": "scripts/build-pack.mjs",
@@ -302,7 +302,7 @@
302
302
  },
303
303
  {
304
304
  "path": "scripts/sync-codex-skills.mjs",
305
- "sha256": "889394bcbf80aefeba49adf2f19202b47382324f3b1357063ca04b87ce46ddb2"
305
+ "sha256": "830d88b2711e5c0b4ff64d5d03ed677a64ffb1662e290e6196fac721244640bc"
306
306
  },
307
307
  {
308
308
  "path": "scripts/validate-hybrid.mjs",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "auroq-os",
3
- "version": "2.7.0",
3
+ "version": "2.8.1",
4
4
  "arcaneMcpPin": "0.7.0",
5
5
  "description": "Auroq OS — Sistema Operacional de IA para o negócio do aluno da Arcane",
6
6
  "bin": {
@@ -84,7 +84,8 @@ function registerSkill(name, commandFile) {
84
84
  skills.set(name, commandFile);
85
85
  }
86
86
 
87
- // O aluno da um nome ao Companion no bootstrap (FASE 10 do Ops: /atlas-companion).
87
+ // Ate 21/10/2026 o aluno dava um nome ao Companion no bootstrap (FASE 10 do Ops: /atlas-companion),
88
+ // e quem deu continua com ele.
88
89
  // Se o comando base sumiu, $companion continua existindo, apontando pro comando dele.
89
90
  function comandoDoCompanion(file) {
90
91
  try {
@@ -0,0 +1,21 @@
1
+ # Como vende: canais e números
2
+
3
+ > Por onde os clientes chegam e os números aproximados do negócio. Cada fato com a fonte (quem disse e quando).
4
+
5
+ ## Canais
6
+
7
+ <!-- Por onde chegam os clientes hoje? Ex.: Instagram, indicação, anúncio, WhatsApp, site, loja, eventos.
8
+ Qual traz mais cliente? -->
9
+
10
+ ## Números (aproximados)
11
+
12
+ <!-- Só o que você disse ou o material mostra; "mais ou menos" vale.
13
+ - Seguidores por rede:
14
+ - Faturamento por mês:
15
+ - Vendas por mês:
16
+ - Conversão (se souber):
17
+ -->
18
+
19
+ ---
20
+
21
+ *Nunca vai senha nem login de ferramenta aqui.*
@@ -0,0 +1,11 @@
1
+ # Equipe e ferramentas
2
+
3
+ > Quem trabalha com você e as ferramentas que você já usa. Nunca vai senha nem login aqui.
4
+
5
+ ## Equipe
6
+
7
+ <!-- Quem ajuda no negócio e em quê (a função basta, não precisa de nome). -->
8
+
9
+ ## Ferramentas que já uso
10
+
11
+ <!-- Ex.: Instagram, WhatsApp Business, Canva, plataforma de curso, agenda, meio de pagamento. -->
@@ -0,0 +1,20 @@
1
+ # Meta de 90 dias e o que trava
2
+
3
+ > Onde você quer chegar nos próximos 90 dias e o que mais atrapalha hoje. O Companion propõe revisar quando o prazo vence.
4
+
5
+ ## Meta
6
+
7
+ <!-- O que quer conseguir e até quando (data de hoje + 90 dias). Em número quando der.
8
+ Ex.: "Chegar a 20 consultas por mês até 20/01/2027" -->
9
+
10
+ ## O que mais trava
11
+
12
+ <!-- O que mais atrapalha hoje para chegar lá? -->
13
+
14
+ ## Projetos andando agora
15
+
16
+ <!-- Site, lançamento, conteúdo, produto... (o cockpit em business/cockpit.md tem o detalhe) -->
17
+
18
+ ## Antes
19
+
20
+ <!-- Metas anteriores e como foram. -->
@@ -0,0 +1,15 @@
1
+ # Provas
2
+
3
+ > Resultados, depoimentos e casos de verdade. Só o que existe, com a fonte; nada de número inventado.
4
+
5
+ ## Resultados seus
6
+
7
+ <!-- O que você já conseguiu no seu trabalho. -->
8
+
9
+ ## Resultados de clientes
10
+
11
+ <!-- Casos e números de clientes (sem dado sensível). De onde veio cada um: print, depoimento, conversa. -->
12
+
13
+ ## Depoimentos
14
+
15
+ <!-- Cole o texto ou diga onde está o print/vídeo. -->
@@ -0,0 +1,11 @@
1
+ # Concorrentes e referências
2
+
3
+ > Quem faz algo parecido com você e quem você admira.
4
+
5
+ ## Fazem algo parecido
6
+
7
+ <!-- Nome, @ ou site, e o que você acha deles. -->
8
+
9
+ ## Quem eu admiro (inspiração)
10
+
11
+ <!-- Nome, @ ou site, e o que você gostaria de pegar de cada um. -->
@@ -0,0 +1,20 @@
1
+ # Vida pessoal (opcional)
2
+
3
+ > Só se você quiser contar: ajuda a planejar o trabalho do jeito que cabe na sua vida. Fica na sua pasta e no
4
+ > seu GitHub privado. Pode pular qualquer parte.
5
+
6
+ ## Rotina e tempo para o negócio
7
+
8
+ <!-- Quantas horas por semana você consegue dar para o negócio? Em que horários? -->
9
+
10
+ ## Família
11
+
12
+ <!-- O que da família o planejamento precisa respeitar. -->
13
+
14
+ ## Fé e valores pessoais
15
+
16
+ <!-- Se fizer sentido para você. -->
17
+
18
+ ## O que eu não abro mão
19
+
20
+ <!-- Ex.: não trabalhar no domingo, buscar os filhos na escola. -->
@@ -0,0 +1,40 @@
1
+ # Mapa do Negócio
2
+
3
+ > Resumo do negócio que toda a equipe lê antes de trabalhar. Quem mantém é o Companion (`*contexto`), com
4
+ > você conferindo. O detalhe de cada parte está nos arquivos indicados.
5
+
6
+ ## Quem é
7
+ Ainda não sei.
8
+
9
+ ## O que vende
10
+ Ainda não sei.
11
+
12
+ ## Para quem
13
+ Ainda não sei.
14
+
15
+ ## Por onde vende
16
+ Ainda não sei.
17
+
18
+ ## Meta dos próximos 90 dias
19
+ Ainda não sei.
20
+
21
+ ## Tom
22
+ Ainda não sei.
23
+
24
+ ## Onde está o detalhe
25
+ - Quem é: `expert-mind/identidade.md`, `expert-mind/historia.md`
26
+ - O que vende: `expert-business/produto/`
27
+ - Para quem: `expert-business/publico-alvo.md`
28
+ - Como vende: `expert-business/canais-e-numeros.md`
29
+ - Meta e o que trava: `expert-business/metas.md`
30
+ - Posicionamento: `expert-business/posicionamento.md` · Provas: `expert-business/provas.md`
31
+ - Tom e valores: `expert-mind/tom-de-voz.md`, `expert-mind/valores.md`
32
+ - Referências: `expert-business/referencias.md` · Equipe e ferramentas: `expert-business/equipe-e-ferramentas.md`
33
+ - Vida pessoal (opcional): `expert-mind/vida-pessoal.md`
34
+
35
+ ## Ainda não sei
36
+ - Tudo: o Companion monta este mapa com você na primeira conversa (material + umas perguntas rápidas).
37
+
38
+ ---
39
+ Atualizado em: ainda não montado
40
+ Pergunta do dia: nenhuma ainda