invos 2.0.1 → 2.0.2

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.
package/kit/AGENTS.md CHANGED
@@ -125,6 +125,7 @@ Carrossel IG = skill **`/carrossel`**. Não use advisory/hormozi pra “fazer o
125
125
  - Não commit/push sozinho — skill **`salvar`** quando o user pedir.
126
126
  - Não vazar secrets.
127
127
  - Mudança **mínima** que resolve.
128
+ - Projeto open-source sob MIT. Contribuições são bem-vindas via PR.
128
129
 
129
130
  ---
130
131
 
package/kit/INVOS.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
- "version": "2.0.1",
3
- "manifest": "PRODUCT",
2
+ "version": "2.0.2",
3
+ "manifest": "OPEN_SOURCE",
4
4
  "product": {
5
5
  "name": "invos",
6
- "type": "kit",
7
- "distribution": "private",
8
- "checkout": "hotmart+npm",
6
+ "type": "framework",
7
+ "distribution": "public",
8
+ "license": "MIT",
9
9
  "cli": "npx invos",
10
- "github": "felipenalves/invos"
10
+ "github": "felipenalves/InvOS"
11
11
  },
12
12
  "seed": {
13
13
  "skills": [
package/kit/LICENSE CHANGED
@@ -1,54 +1,21 @@
1
- INVOS Proprietary License
2
- Copyright (c) 2026 Felipe Alves / INV
3
-
4
- All rights reserved.
5
-
6
- This software and its contents (the "Product") are the exclusive property
7
- of Felipe Alves ("Licensor").
8
-
9
- ## Grant
10
-
11
- If you acquired the Product through an authorized channel (e.g. Hotmart,
12
- Documente.club, or direct sale by the Licensor), you receive a personal,
13
- non-exclusive, non-transferable license to:
14
-
15
- 1. Install and use the Product on machines you control.
16
- 2. Adapt memory, skills, and project files for your own business.
17
- 3. Apply updates distributed by the Licensor (including via CLI tools
18
- such as `npx invos`).
19
-
20
- ## Restrictions
21
-
22
- You may NOT, without prior written permission from the Licensor:
23
-
24
- 1. Resell, sublicense, or redistribute the Product (or a substantial
25
- portion of it) as a competing kit, course, or template.
26
- 2. Publish the full kit, private skills pack, or source tree as open
27
- source or public mirror.
28
- 3. Remove or alter this license notice or product branding in a way
29
- that presents the Product as someone else's work.
30
- 4. Use the Product to build a commercial "AI operating system" kit that
31
- is sold as a substitute for INVOS.
32
-
33
- ## What stays yours
34
-
35
- - Your `_memoria/`, client data, brand assets, and any skills you create
36
- for your business remain yours.
37
- - Deliverables you produce with the Product for your clients remain yours
38
- (or your clients'), subject to your agreements with them.
39
-
40
- ## Disclaimer
41
-
42
- THE PRODUCT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND. THE
43
- LICENSOR IS NOT LIABLE FOR BUSINESS LOSSES, DATA LOSS, OR DAMAGES ARISING
44
- FROM USE OF THE PRODUCT.
45
-
46
- ## Contact
47
-
48
- Questions about licensing: use the support channel of your purchase
49
- or contact the Licensor via the official INV / Documente.club channels.
50
-
51
- ---
52
-
53
- Licença proprietária. Compra autorizada = uso no seu negócio.
54
- Redistribuição do kit como produto = proibido.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Felipe Alves
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/kit/README.md CHANGED
@@ -1,113 +1,122 @@
1
- # INVOS
2
-
3
- > O sistema operacional do seu negócio — memória + skills, no Claude Code.
4
-
5
- Em poucos minutos o agente deixa de te tratar como estranho: sabe quem você é,
6
- como fala, o que importa essa semana, e tem comandos prontos pra operação e
7
- marketing.
1
+ <pre align="center">
2
+ ╔══════════════════════════════════════════════════════╗
3
+ ║ ║
4
+ ║ ██╗███╗ ██╗██╗ ██╗ ██████╗ ███████╗ ║
5
+ ║ ██║████╗ ██║██║ ██║██╔═══██╗██╔════╝ ║
6
+ ║ ██║██╔██╗ ██║██║ ██║██║ ██║███████╗ ║
7
+ ║ ██║██║╚██╗██║╚██╗ ██╔╝██║ ██║╚════██║ ║
8
+ ║ ██║██║ ╚████║ ╚████╔╝ ╚██████╔╝███████║ ║
9
+ ║ ╚═╝╚═╝ ╚═══╝ ╚═══╝ ╚═════╝ ╚══════╝ ║
10
+ ║ ║
11
+ ║ your AI co-founder ║
12
+ ║ ║
13
+ ╚══════════════════════════════════════════════════════╝
14
+ </pre>
15
+
16
+ <p align="center">
17
+ <b>Seu cofundador artificial — memória do negócio + habilidades que executam, em qualquer agente de IA.</b>
18
+ </p>
19
+
20
+ <p align="center">
21
+ <a href="https://github.com/felipenalves/InvOS/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="MIT License"></a>
22
+ <a href="https://www.npmjs.com/package/invos"><img src="https://img.shields.io/npm/v/invos.svg" alt="npm version"></a>
23
+ <a href="https://github.com/felipenalves/InvOS"><img src="https://img.shields.io/github/stars/felipenalves/InvOS?style=social" alt="GitHub stars"></a>
24
+ </p>
8
25
 
9
26
  ---
10
27
 
11
- ## Ligar o sistema
12
-
13
- ### Pelo Claude (mais rápido)
14
-
15
- Abre o Claude Code em qualquer pasta e cola:
28
+ INVOS transforma qualquer agente de IA no **cofundador que você sempre quis**.
29
+ Ele não só entende seu negócio — ele **executa**. Prioriza o dia, rascunha
30
+ proposta no teu tom, audita posicionamento, cria conteúdo.
16
31
 
17
- ```
18
- Clona o repositório do INVOS na pasta atual, entra nela e roda o /instalar.
19
- ```
20
-
21
- (Quando o `npx invos` estiver no ar, o fluxo vira um comando só — install + update.)
32
+ ---
22
33
 
23
- ### Pelo terminal (recomendado)
34
+ ## Como funciona (o fluxo)
24
35
 
36
+ **1. CLI cria seu projeto**
25
37
  ```bash
26
38
  npx invos@latest init --name meu-negocio
27
- cd meu-negocio
28
- # abre no Claude / Cursor / Grok e roda:
29
- /instalar
30
39
  ```
40
+ Isso gera uma pasta com a estrutura completa: memória, skills, templates.
31
41
 
32
- Atualizar skills sem perder memória:
42
+ **2. Você abre essa pasta no seu agente de IA favorito**
43
+ Claude Code, Cursor, OpenCode, Codex, Grok — qualquer um que leia
44
+ `AGENTS.md`. Dentro do chat do agente, roda:
33
45
 
34
- ```bash
35
- npx invos@latest update
46
+ ```
47
+ /instalar
36
48
  ```
37
49
 
38
- (CLI em `packages/cli` kit bundled no npm, sem token.)
39
-
40
- O `/instalar` roda **uma vez**. Entrevista curta, monta a memória, escolhe o
41
- perfil (solopreneur, freela, agência, empresa). Depois é uso diário.
42
-
43
- Quando terminar, renomeia a pasta pro nome do **teu** negócio — não fica
44
- "invos" pra sempre.
50
+ O agente lê o `AGENTS.md`, faz uma entrevista de 5 minutos e monta a
51
+ memória do seu negócio: quem você é, o que vende, tom de voz,
52
+ prioridades da semana.
45
53
 
46
- ---
54
+ **3. Pronto. Seu cofundador já sabe quem você é.**
47
55
 
48
- ## O que é o núcleo
56
+ Agora é uso diário. Abre o projeto no agente, roda `/abrir` e ele carrega
57
+ o contexto. Pede o que precisar:
49
58
 
50
- | Comando | Função |
51
- |---------|--------|
52
- | `/abrir` | Carrega memória no início da sessão |
59
+ | Comando | O que faz |
60
+ |---------|-----------|
61
+ | `/abrir` | Carrega seu contexto no início da sessão |
62
+ | `/carrossel` | Cria post educativo pro Instagram |
53
63
  | `/salvar` | Commit + push no GitHub |
54
- | `/atualizar` | Alinha arquivos de contexto com o que mudou |
55
- | `/novo-projeto` | Pasta isolada por cliente/iniciativa |
56
- | `/mapear-rotinas` | O que você repete vira skill |
57
-
58
- **Conteúdo / marketing** (quando fizer sentido pro teu perfil):
59
- `/carrossel` · `/publicar-tema` · `/seo` · `/responder-avaliacoes` · `/aprovar-post`
60
-
61
- **Ads e produção:**
62
- `/anuncio-google` · `/relatorio-ads` · `/analisar-dados` · `/email-profissional`
63
-
64
- Estrutura de pastas e ênfase (ex.: pasta de clientes) **depende do perfil**
65
- que você escolhe no `/instalar` — não é um monólito único pra todo mundo.
64
+ | `/atualizar` | Sincroniza contexto com mudanças recentes |
65
+ | `/analisar-dados` | Planilha relatório com insights |
66
+ | `/email-profissional` | Escreve e-mail no seu tom |
67
+ | `/anuncio-google` | Estrutura campanha de Google Ads |
68
+ | `/seo` | Audita e sugere melhorias de SEO |
69
+ | `/mapear-rotinas` | Transforma tarefas repetitivas em skills |
70
+ | `/novo-projeto` | Cria pasta isolada por cliente |
71
+
72
+ Atualizar skills sem perder sua memória:
73
+ ```bash
74
+ npx invos@latest update
75
+ ```
66
76
 
67
77
  ---
68
78
 
69
- ## Como o INVOS pensa
79
+ ## A estrutura que seu agente enxerga
70
80
 
71
- - **`AGENTS.md`** — regras do agente (multi-harness). Fonte da verdade.
72
- - **`CLAUDE.md`** — só `@AGENTS.md` (Claude Code lê e segue pro SOT).
73
- - **`_memoria/`** — cérebro: empresa, voz, foco da semana. Poucos arquivos.
74
- - **`marca/`** rosto: cores, fonte, logo; skills visuais leem daqui.
75
- - **`marketing/` · `saidas/` · `scripts/`** o que o sistema produz.
76
- - **`.agents/skills/`** skills canônicas (qualquer harness).
77
- - **`.claude/skills/`** symlinks `.agents/skills/` (pra Claude Code achar).
78
- - **`.agents/squads/`** times multi-agente (brand, advisory, hormozi). Carrossel = skill.
81
+ ```
82
+ projeto/
83
+ ├── AGENTS.md ← Instruções: diz ao agente que ele é um cofundador
84
+ ├── CLAUDE.md ← redireciona pra AGENTS.md (multi-harness)
85
+ ├── _memoria/ ← Quem você é: empresa, tom de voz, foco da semana
86
+ ├── .agents/skills/ ← Habilidades: carrossel, humanizer, ads, SEO…
87
+ ├── marca/ Cores, fontes, logo (pra posts visuais)
88
+ ├── marketing/ Conteúdo e campanhas que as skills geram
89
+ ├── saidas/ ← Documentos, propostas, relatórios prontos
90
+ ├── templates/ ← Perfis pré-formatados (solopreneur, agência…)
91
+ └── packages/cli/ ← Código do CLI (`npx invos`)
92
+ ```
79
93
 
80
- O sistema não substitui você. Guarda contexto e fecha loops que hoje ficam
81
- abertos (faz → esquece → reexplica).
94
+ Tudo em **Markdown puro** portável, editável no VS Code, versionado no Git.
82
95
 
83
96
  ---
84
97
 
85
- ## Atualizações
98
+ ## Por que INVOS?
86
99
 
87
- INVOS evolui como app: skill nova, correção, melhoria de entrevista.
88
-
89
- Quando o CLI estiver publicado, o fluxo da comunidade é:
90
-
91
- ```
92
- npx invos update
93
- ```
94
-
95
- Isso puxa o que é **kit** (skills, templates, docs de versão) e **não**
96
- sobrescreve a tua memória real (`_memoria/`, clientes, marca).
97
-
98
- Changelog / o que mudou em cada versão: pasta ou página de release
99
- (comunidade + `CHANGELOG` no pack) — anuncia lá, roda o update.
100
+ - **Cofundador, não ferramenta:** ele sabe quem você é, o que importa hoje, e executa — prioridade, proposta, conteúdo, decisão
101
+ - **Funciona em qualquer agente:** Claude, Cursor, Grok, Codex, OpenCode — o cofundador te acompanha
102
+ - **Skills plugáveis:** carrossel de Instagram, análise de dados, humanizer, auditoria de posicionamento — ative só o que precisa
103
+ - **Memória viva:** seus dados ficam em Markdown no seu repo, não num banco externo. Portável, editável, sua
104
+ - **Grátis:** MIT. Sem lock-in, sem surpresa, sem mensalidade
100
105
 
101
106
  ---
102
107
 
103
108
  ## Licença
104
109
 
105
- Uso autorizado pra quem comprou. Ver `LICENSE`.
106
- Teu negócio, teus dados, tuas skills personalizadas: teus.
107
- Revender o kit como produto: não.
110
+ MIT &mdash; use, estude, modifique, compartilhe. Construído por [Felipe Natanael](https://github.com/felipenalves).
108
111
 
109
112
  ---
110
113
 
111
- ## Suporte
112
-
113
- Documente.club / canal da compra · produto da INV (Felipe Alves).
114
+ <p align="center">
115
+ <a href="https://github.com/felipenalves/InvOS">GitHub</a>
116
+ ·
117
+ <a href="https://www.npmjs.com/package/invos">npm</a>
118
+ ·
119
+ <a href="https://github.com/felipenalves/InvOS/issues">Reportar bug</a>
120
+ ·
121
+ <a href="https://github.com/felipenalves/InvOS/discussions">Discussões</a>
122
+ </p>
@@ -1,15 +1,18 @@
1
1
  # Empresa
2
2
 
3
3
  > Memória central do negócio. O Claude lê esse arquivo antes de cada resposta.
4
- > Preenchido pelo `/instalar` — você pode editar a qualquer momento.
5
4
 
6
- **Nome:**
7
- **Negócio:**
8
- **O que faz:**
9
- **Perfil:**
10
- **Atende clientes:**
11
- **Equipe:**
12
- **Ferramentas:**
13
- **Principais entregas:**
5
+ **Nome:** INVOS
6
+ **Negócio:** Framework open-source de memória + skills pra agentes de IA
7
+ **O que faz:** Transforma qualquer agente (Claude, Codex, Grok, OpenCode) num assistente que entende o contexto do usuário
8
+ **Perfil:** Open-source community project
9
+ **Atende clientes:** Não. Comunidade.
10
+ **Equipe:** Felipe Alves (founder)
11
+ **Ferramentas:** GitHub, npm, Claude Code, Cursor, OpenCode
12
+ **Principais entregas:** CLI (`npx invos`), skills pack, templates de perfil, documentação
14
13
 
15
14
  ## Contexto adicional
15
+
16
+ Projeto nasceu como produto pago (v2). Migrou pra open-source (MIT) em julho
17
+ 2026 pra gerar audiência e comunidade. Sem intenção de monetizar diretamente —
18
+ o valor é construir marca e autoridade no ecossistema de agentes de IA.
@@ -1,13 +1,25 @@
1
1
  # Estratégia
2
2
 
3
3
  > O que importa agora. Prioridades, metas, prazos.
4
- > O Claude usa isso pra decidir o que sugerir primeiro e o que adiar.
5
- > Atualize sempre que as prioridades mudarem.
6
4
 
7
5
  ## Fase
8
6
 
7
+ Open-source launch — transição de produto pago pra framework público.
8
+
9
9
  ## Prioridade principal
10
10
 
11
+ Gerar audiência e adoção. INVOS não é mais produto vendido — é open-source
12
+ que constrói marca e comunidade em torno do trabalho do Felipe.
13
+
11
14
  ## O que pode esperar
12
15
 
16
+ - Estratégia de monetização direta (não vai ter)
17
+ - Checkout / paywall / restrição de acesso
18
+ - Suporte pago como produto
19
+
13
20
  ## Contexto com prazo
21
+
22
+ - Trocar licença de proprietária pra MIT ✓
23
+ - Ajustar README, package.json, manifesto ✓
24
+ - Comunicar mudança nas redes
25
+ - Atrair primeiros contribuidores e usuários
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "invos",
3
- "version": "2.0.1",
4
- "description": "INVOS v2 — OS do negócio em arquivos. CLI: init, install, update, doctor.",
3
+ "version": "2.0.2",
4
+ "description": "INVOS — OS do negócio em arquivos. Open-source. CLI: init, install, update, doctor.",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "invos": "bin/invos.js"
@@ -23,10 +23,11 @@
23
23
  "invos",
24
24
  "ai-agents",
25
25
  "memory",
26
- "business-os"
26
+ "business-os",
27
+ "open-source"
27
28
  ],
28
29
  "author": "Felipe Alves",
29
- "license": "UNLICENSED",
30
+ "license": "MIT",
30
31
  "private": false,
31
32
  "repository": {
32
33
  "type": "git",
@@ -4,6 +4,19 @@ import { loadManifest } from '../manifest.js';
4
4
  import { readLock } from '../lock.js';
5
5
  import { checkClaudeSymlinks, syncClaudeSymlinks } from '../symlinks.js';
6
6
 
7
+ async function askFix(hasWarnings) {
8
+ if (!hasWarnings) return true;
9
+ try {
10
+ const rl = await import('node:readline/promises');
11
+ const r = rl.createInterface({ input: process.stdin, output: process.stdout });
12
+ const ans = await r.question('⚠️ Doctor found issues. Apply --fix? (y/N) ');
13
+ r.close();
14
+ return ans.toLowerCase().startsWith('y');
15
+ } catch {
16
+ return false; // non-TTY — fail safe
17
+ }
18
+ }
19
+
7
20
  export async function doctor(kit, kitRoot, targetDir, args) {
8
21
  const fix = args.includes('--fix');
9
22
  let ok = true;
@@ -46,8 +59,13 @@ export async function doctor(kit, kitRoot, targetDir, args) {
46
59
  }
47
60
 
48
61
  if (fix) {
49
- syncClaudeSymlinks(kitRoot, targetDir);
50
- r.push(' --fix: symlinks');
62
+ const confirmed = await askFix(!ok);
63
+ if (!confirmed) {
64
+ r.push(' --fix: skipped (not confirmed)');
65
+ } else {
66
+ syncClaudeSymlinks(kitRoot, targetDir);
67
+ r.push(' --fix: symlinks');
68
+ }
51
69
  }
52
70
 
53
71
  const sym = checkClaudeSymlinks(targetDir);
@@ -3,6 +3,18 @@ import { dirname, resolve } from 'node:path';
3
3
  import { fileURLToPath } from 'node:url';
4
4
 
5
5
  const __dirname = dirname(fileURLToPath(import.meta.url));
6
+ const INVOS_KIT_ALLOWED_DIRS = ['.']; // Only current dir or explicit path from dev
7
+
8
+ function validateKitPath(p) {
9
+ if (!p || typeof p !== 'string') return false;
10
+ const resolved = resolve(p);
11
+ if (!existsSync(resolved)) {
12
+ console.error('INVOS_KIT_PATH directory does not exist:', resolved);
13
+ return false;
14
+ }
15
+ if (!existsSync(resolve(resolved, 'INVOS.json'))) return false;
16
+ return true;
17
+ }
6
18
 
7
19
  /**
8
20
  * 1. INVOS_KIT_PATH
@@ -11,10 +23,12 @@ const __dirname = dirname(fileURLToPath(import.meta.url));
11
23
  */
12
24
  export function resolveKitRoot() {
13
25
  if (process.env.INVOS_KIT_PATH) {
26
+ if (!validateKitPath(process.env.INVOS_KIT_PATH)) {
27
+ console.error('INVOS_KIT_PATH points to invalid kit directory:', process.env.INVOS_KIT_PATH);
28
+ process.exit(1);
29
+ }
14
30
  const p = resolve(process.env.INVOS_KIT_PATH);
15
- if (existsSync(resolve(p, 'INVOS.json'))) return p;
16
- console.error('INVOS_KIT_PATH without INVOS.json:', p);
17
- process.exit(1);
31
+ return p;
18
32
  }
19
33
 
20
34
  const bundled = resolve(__dirname, '../kit');
package/src/symlinks.js CHANGED
@@ -12,7 +12,8 @@ function listSkills(agentsDir) {
12
12
  const p = resolve(agentsDir, e);
13
13
  try {
14
14
  return statSync(p).isDirectory() && existsSync(resolve(p, 'SKILL.md'));
15
- } catch {
15
+ } catch (err) {
16
+ console.error('listSkills: skipping', e, err.message);
16
17
  return false;
17
18
  }
18
19
  });
@@ -30,8 +31,8 @@ export function syncClaudeSymlinks(_kitRoot, targetRoot) {
30
31
  try {
31
32
  if (readlinkSync(linkPath) === `${REL}/${skill}`) continue;
32
33
  unlinkSync(linkPath);
33
- } catch {
34
- try { unlinkSync(linkPath); } catch { /* ignore */ }
34
+ } catch (err) {
35
+ console.error('syncClaudeSymlinks: failed to update', skill, err.message);
35
36
  }
36
37
  }
37
38
  symlinkSync(`${REL}/${skill}`, linkPath);
package/src/utils.js CHANGED
@@ -79,8 +79,12 @@ export function ensureDir(dir) {
79
79
  }
80
80
 
81
81
  export function removeIfExists(path) {
82
- if (!existsSync(path)) return;
83
- const s = statSync(path);
84
- if (s.isDirectory()) rmSync(path, { recursive: true, force: true });
85
- else unlinkSync(path);
82
+ try {
83
+ if (!existsSync(path)) return;
84
+ const s = statSync(path);
85
+ if (s.isDirectory()) rmSync(path, { recursive: true });
86
+ else unlinkSync(path);
87
+ } catch (err) {
88
+ console.error('removeIfExists: could not remove', path, err.message);
89
+ }
86
90
  }