@osmosis-ai/cli 0.5.0 → 0.6.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.
package/dist/cli.js CHANGED
@@ -3,10 +3,10 @@ import { AtomStore, searchAtoms, getTopAtoms, seedAtoms } from '@osmosis-ai/core
3
3
  import { createSyncServer, syncWithMesh, contributeTo, learnFrom, startAutoSync, resolveSyncConfig } from '@osmosis-ai/sync';
4
4
  import { homedir } from 'node:os';
5
5
  import { join } from 'node:path';
6
- import { mkdirSync } from 'node:fs';
6
+ import { mkdirSync, writeFileSync, readFileSync, existsSync } from 'node:fs';
7
7
  const DEFAULT_DB_PATH = join(homedir(), '.osmosis', 'atoms.db');
8
8
  const DEFAULT_PORT = 7432;
9
- const DEFAULT_MESH_URL = 'https://mesh.osmosis.dev';
9
+ const DEFAULT_MESH_URL = 'https://osmosis-mesh-dev.fly.dev';
10
10
  const args = process.argv.slice(2);
11
11
  const command = args[0];
12
12
  function getDbPath() {
@@ -37,8 +37,171 @@ function openStore() {
37
37
  ensureDir(dbPath);
38
38
  return new AtomStore(dbPath);
39
39
  }
40
+ function getConfigPath() {
41
+ return join(homedir(), '.osmosis', 'config.json');
42
+ }
43
+ function loadConfig() {
44
+ const configPath = getConfigPath();
45
+ if (existsSync(configPath)) {
46
+ try {
47
+ return JSON.parse(readFileSync(configPath, 'utf-8'));
48
+ }
49
+ catch {
50
+ return {};
51
+ }
52
+ }
53
+ return {};
54
+ }
55
+ function saveConfig(config) {
56
+ const configPath = getConfigPath();
57
+ ensureDir(configPath);
58
+ writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
59
+ }
60
+ function getMeshKey() {
61
+ const idx = args.indexOf('--key');
62
+ if (idx !== -1 && args[idx + 1])
63
+ return args[idx + 1];
64
+ const config = loadConfig();
65
+ return process.env.MESH_WRITE_KEY ?? config.meshApiKey ?? '';
66
+ }
40
67
  async function main() {
41
68
  switch (command) {
69
+ case 'init': {
70
+ const configPath = getConfigPath();
71
+ const osmosisDir = join(homedir(), '.osmosis');
72
+ mkdirSync(osmosisDir, { recursive: true });
73
+ const meshUrl = getMeshUrl();
74
+ console.log('🧠 Initializing Osmosis...\n');
75
+ // Register with mesh and get an API key
76
+ console.log(` Mesh: ${meshUrl}`);
77
+ let apiKey = '';
78
+ try {
79
+ const res = await fetch(`${meshUrl}/mesh/register`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ agent: 'cli-init' }) });
80
+ if (res.ok) {
81
+ const body = await res.json();
82
+ apiKey = body.key ?? '';
83
+ console.log(` API key: provisioned āœ…`);
84
+ }
85
+ else {
86
+ console.log(` API key: mesh doesn't support auto-registration yet`);
87
+ console.log(` → Ask the mesh admin for a key, then: osmosis config --key <YOUR_KEY>`);
88
+ }
89
+ }
90
+ catch {
91
+ console.log(` API key: could not reach mesh (offline mode is fine)`);
92
+ }
93
+ // Save config
94
+ const config = {
95
+ meshUrl,
96
+ meshApiKey: apiKey,
97
+ dbPath: join(osmosisDir, 'atoms.db'),
98
+ openclawDir: join(homedir(), '.openclaw'),
99
+ apiPort: DEFAULT_PORT,
100
+ };
101
+ saveConfig(config);
102
+ console.log(` Config: ${configPath}`);
103
+ console.log(` DB: ${config.dbPath}`);
104
+ // Seed
105
+ const store = new AtomStore(config.dbPath);
106
+ seedAtoms(store);
107
+ const count = store.getAll().length;
108
+ store.close();
109
+ console.log(` Seeded: ${count} starter atoms`);
110
+ console.log(`\nāœ… Osmosis initialized! Next steps:`);
111
+ console.log(` osmosis start — start the daemon (watches OpenClaw sessions)`);
112
+ console.log(` osmosis status — check your knowledge base`);
113
+ console.log(` osmosis search — search for tips`);
114
+ break;
115
+ }
116
+ case 'config': {
117
+ const config = loadConfig();
118
+ const keyIdx = args.indexOf('--key');
119
+ const meshIdx = args.indexOf('--mesh');
120
+ if (keyIdx !== -1 && args[keyIdx + 1]) {
121
+ config.meshApiKey = args[keyIdx + 1];
122
+ saveConfig(config);
123
+ console.log('āœ… Mesh API key saved');
124
+ }
125
+ else if (meshIdx !== -1 && args[meshIdx + 1]) {
126
+ config.meshUrl = args[meshIdx + 1];
127
+ saveConfig(config);
128
+ console.log(`āœ… Mesh URL set to ${config.meshUrl}`);
129
+ }
130
+ else {
131
+ console.log('🧠 Osmosis Config:');
132
+ for (const [k, v] of Object.entries(config)) {
133
+ const display = k === 'meshApiKey' && v ? `${String(v).slice(0, 8)}...` : v;
134
+ console.log(` ${k}: ${display}`);
135
+ }
136
+ }
137
+ break;
138
+ }
139
+ case 'start': {
140
+ const config = loadConfig();
141
+ const dbPath = config.dbPath ?? getDbPath();
142
+ const meshUrl = config.meshUrl ?? getMeshUrl();
143
+ const meshApiKey = config.meshApiKey ?? getMeshKey();
144
+ const openclawDir = config.openclawDir ?? join(homedir(), '.openclaw');
145
+ const port = config.apiPort ?? getPort();
146
+ ensureDir(dbPath);
147
+ const store = new AtomStore(dbPath);
148
+ // Import openclaw modules dynamically
149
+ let watcher, injector;
150
+ try {
151
+ const oc = await import('@osmosis-ai/openclaw');
152
+ watcher = new oc.TranscriptWatcher(store, {
153
+ openclawDir,
154
+ scanIntervalMs: 10_000,
155
+ maxAgeMs: 365 * 24 * 60 * 60 * 1000,
156
+ });
157
+ watcher.start();
158
+ injector = new oc.ContextInjector(store, {
159
+ workspaceDir: join(openclawDir, 'workspace'),
160
+ updateIntervalMs: 15 * 60 * 1000,
161
+ maxTips: 10,
162
+ });
163
+ injector.start();
164
+ }
165
+ catch {
166
+ console.log(' @osmosis-ai/openclaw not found — running without OpenClaw integration');
167
+ }
168
+ // Start local API
169
+ const { createSyncServer, startAutoSync, resolveSyncConfig } = await import('@osmosis-ai/sync');
170
+ const syncConfig = resolveSyncConfig({
171
+ meshUrl,
172
+ meshApiKey,
173
+ autoSync: !!meshUrl,
174
+ syncIntervalMs: 5 * 60 * 1000,
175
+ });
176
+ const server = createSyncServer(store, port, syncConfig);
177
+ const autoSync = startAutoSync(store, syncConfig);
178
+ console.log('🧠 Osmosis daemon running');
179
+ console.log(` API: http://localhost:${port}`);
180
+ console.log(` Mesh: ${meshUrl}`);
181
+ console.log(` Auth: ${meshApiKey ? 'key configured' : 'no key'}`);
182
+ console.log(` OpenClaw: ${openclawDir}`);
183
+ console.log(` DB: ${dbPath}`);
184
+ console.log(` Press Ctrl+C to stop\n`);
185
+ // Periodic status
186
+ const statusTimer = setInterval(() => {
187
+ const all = store.getAll();
188
+ const watcherStats = watcher?.stats ?? { capturedCount: 0, filesWatched: 0 };
189
+ console.log(`šŸ“Š ${all.length} atoms | Captured: ${watcherStats.capturedCount} | Files: ${watcherStats.filesWatched}`);
190
+ }, 60_000);
191
+ const shutdown = () => {
192
+ console.log('\n🧠 Shutting down...');
193
+ clearInterval(statusTimer);
194
+ watcher?.stop();
195
+ injector?.stop();
196
+ autoSync.stop();
197
+ server.close();
198
+ store.close();
199
+ process.exit(0);
200
+ };
201
+ process.on('SIGINT', shutdown);
202
+ process.on('SIGTERM', shutdown);
203
+ break;
204
+ }
42
205
  case 'serve': {
43
206
  const store = openStore();
44
207
  const port = getPort();
@@ -134,8 +297,9 @@ async function main() {
134
297
  case 'sync': {
135
298
  const store = openStore();
136
299
  const meshUrl = getMeshUrl();
300
+ const meshKey = getMeshKey();
137
301
  console.log(`šŸ”„ Syncing with mesh at ${meshUrl}...`);
138
- const result = await syncWithMesh(store, meshUrl);
302
+ const result = await syncWithMesh(store, meshUrl, meshKey);
139
303
  console.log(` Pushed: ${result.pushed}`);
140
304
  console.log(` Pulled: ${result.pulled}`);
141
305
  console.log(` Deduped: ${result.deduped}`);
@@ -150,8 +314,9 @@ async function main() {
150
314
  case 'contribute': {
151
315
  const store = openStore();
152
316
  const meshUrl = getMeshUrl();
317
+ const meshKey = getMeshKey();
153
318
  console.log(`šŸ“¤ Contributing to mesh at ${meshUrl}...`);
154
- const result = await contributeTo(store, meshUrl);
319
+ const result = await contributeTo(store, meshUrl, meshKey);
155
320
  console.log(` Pushed: ${result.pushed}`);
156
321
  console.log(` Deduped: ${result.deduped}`);
157
322
  if (result.errors.length > 0) {
@@ -165,8 +330,9 @@ async function main() {
165
330
  case 'learn': {
166
331
  const store = openStore();
167
332
  const meshUrl = getMeshUrl();
333
+ const meshKey = getMeshKey();
168
334
  console.log(`šŸ“„ Learning from mesh at ${meshUrl}...`);
169
- const result = await learnFrom(store, meshUrl);
335
+ const result = await learnFrom(store, meshUrl, meshKey);
170
336
  console.log(` Pulled: ${result.pulled}`);
171
337
  console.log(` Deduped: ${result.deduped}`);
172
338
  if (result.errors.length > 0) {
@@ -190,28 +356,30 @@ async function main() {
190
356
  break;
191
357
  }
192
358
  default:
193
- console.log(`🧠 Osmosis CLI v0.1.0
359
+ console.log(`🧠 Osmosis CLI v0.5.0 — Collective intelligence for AI agents
360
+
361
+ Quick Start:
362
+ osmosis init Set up Osmosis (first time)
363
+ osmosis start Start daemon (watches agents, syncs to mesh)
364
+ osmosis status Check your knowledge base
194
365
 
195
- Usage:
196
- osmosis serve [--port N] [--db PATH] [--mesh URL] Start local API server
197
- osmosis mesh-serve [--port N] [--db PATH] Start mesh server
198
- osmosis sync [--mesh URL] [--db PATH] Sync with mesh (contribute + learn)
199
- osmosis contribute [--mesh URL] [--db PATH] Push local atoms to mesh
200
- osmosis learn [--mesh URL] [--db PATH] Pull atoms from mesh
366
+ Commands:
367
+ osmosis init [--mesh URL] Initialize config + seed knowledge
368
+ osmosis start [--port N] Start daemon (watcher + sync + API)
369
+ osmosis config [--key KEY] [--mesh URL] View/update config
201
370
  osmosis status [--db PATH] Show atom count and top atoms
202
371
  osmosis search <query> [--db PATH] Search atoms
203
- osmosis seed [--db PATH] Seed with example atoms
372
+ osmosis sync [--mesh URL] [--key KEY] Sync with mesh (push + pull)
373
+ osmosis contribute [--mesh URL] [--key KEY] Push local atoms to mesh
374
+ osmosis learn [--mesh URL] [--key KEY] Pull atoms from mesh
375
+ osmosis seed [--db PATH] Seed with starter knowledge
376
+ osmosis serve [--port N] [--db PATH] [--mesh URL] Start local API only
204
377
  osmosis reset [--db PATH] Wipe all atoms
205
378
 
206
- Options:
207
- --db PATH Database path (default: ~/.osmosis/atoms.db)
208
- --port N API port (default: 7432)
209
- --mesh URL Mesh server URL (default: https://mesh.osmosis.dev)
379
+ Config: ~/.osmosis/config.json
380
+ Database: ~/.osmosis/atoms.db
210
381
 
211
- Environment:
212
- OSMOSIS_DB_PATH Database path override
213
- OSMOSIS_PORT API port override
214
- OSMOSIS_MESH_URL Mesh server URL override`);
382
+ https://github.com/turleydesigns/osmosis`);
215
383
  if (command)
216
384
  process.exit(1);
217
385
  }
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@osmosis-ai/cli",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "description": "CLI runner for Osmosis knowledge store",
5
5
  "type": "module",
6
6
  "main": "dist/cli.js",
package/src/cli.ts CHANGED
@@ -4,11 +4,11 @@ import { AtomStore, createServer, searchAtoms, getTopAtoms, seedAtoms } from '@o
4
4
  import { createSyncServer, syncWithMesh, contributeTo, learnFrom, getAllPeers, startAutoSync, resolveSyncConfig } from '@osmosis-ai/sync';
5
5
  import { homedir } from 'node:os';
6
6
  import { join } from 'node:path';
7
- import { mkdirSync } from 'node:fs';
7
+ import { mkdirSync, writeFileSync, readFileSync, existsSync } from 'node:fs';
8
8
 
9
9
  const DEFAULT_DB_PATH = join(homedir(), '.osmosis', 'atoms.db');
10
10
  const DEFAULT_PORT = 7432;
11
- const DEFAULT_MESH_URL = 'https://mesh.osmosis.dev';
11
+ const DEFAULT_MESH_URL = 'https://osmosis-mesh-dev.fly.dev';
12
12
 
13
13
  const args = process.argv.slice(2);
14
14
  const command = args[0];
@@ -42,8 +42,180 @@ function openStore(): AtomStore {
42
42
  return new AtomStore(dbPath);
43
43
  }
44
44
 
45
+ function getConfigPath(): string {
46
+ return join(homedir(), '.osmosis', 'config.json');
47
+ }
48
+
49
+ function loadConfig(): Record<string, any> {
50
+ const configPath = getConfigPath();
51
+ if (existsSync(configPath)) {
52
+ try { return JSON.parse(readFileSync(configPath, 'utf-8')); } catch { return {}; }
53
+ }
54
+ return {};
55
+ }
56
+
57
+ function saveConfig(config: Record<string, any>): void {
58
+ const configPath = getConfigPath();
59
+ ensureDir(configPath);
60
+ writeFileSync(configPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
61
+ }
62
+
63
+ function getMeshKey(): string {
64
+ const idx = args.indexOf('--key');
65
+ if (idx !== -1 && args[idx + 1]) return args[idx + 1]!;
66
+ const config = loadConfig();
67
+ return process.env.MESH_WRITE_KEY ?? config.meshApiKey ?? '';
68
+ }
69
+
45
70
  async function main(): Promise<void> {
46
71
  switch (command) {
72
+ case 'init': {
73
+ const configPath = getConfigPath();
74
+ const osmosisDir = join(homedir(), '.osmosis');
75
+ mkdirSync(osmosisDir, { recursive: true });
76
+
77
+ const meshUrl = getMeshUrl();
78
+ console.log('🧠 Initializing Osmosis...\n');
79
+
80
+ // Register with mesh and get an API key
81
+ console.log(` Mesh: ${meshUrl}`);
82
+ let apiKey = '';
83
+ try {
84
+ const res = await fetch(`${meshUrl}/mesh/register`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ agent: 'cli-init' }) });
85
+ if (res.ok) {
86
+ const body = await res.json() as any;
87
+ apiKey = body.key ?? '';
88
+ console.log(` API key: provisioned āœ…`);
89
+ } else {
90
+ console.log(` API key: mesh doesn't support auto-registration yet`);
91
+ console.log(` → Ask the mesh admin for a key, then: osmosis config --key <YOUR_KEY>`);
92
+ }
93
+ } catch {
94
+ console.log(` API key: could not reach mesh (offline mode is fine)`);
95
+ }
96
+
97
+ // Save config
98
+ const config = {
99
+ meshUrl,
100
+ meshApiKey: apiKey,
101
+ dbPath: join(osmosisDir, 'atoms.db'),
102
+ openclawDir: join(homedir(), '.openclaw'),
103
+ apiPort: DEFAULT_PORT,
104
+ };
105
+ saveConfig(config);
106
+ console.log(` Config: ${configPath}`);
107
+ console.log(` DB: ${config.dbPath}`);
108
+
109
+ // Seed
110
+ const store = new AtomStore(config.dbPath);
111
+ seedAtoms(store);
112
+ const count = store.getAll().length;
113
+ store.close();
114
+ console.log(` Seeded: ${count} starter atoms`);
115
+
116
+ console.log(`\nāœ… Osmosis initialized! Next steps:`);
117
+ console.log(` osmosis start — start the daemon (watches OpenClaw sessions)`);
118
+ console.log(` osmosis status — check your knowledge base`);
119
+ console.log(` osmosis search — search for tips`);
120
+ break;
121
+ }
122
+
123
+ case 'config': {
124
+ const config = loadConfig();
125
+ const keyIdx = args.indexOf('--key');
126
+ const meshIdx = args.indexOf('--mesh');
127
+
128
+ if (keyIdx !== -1 && args[keyIdx + 1]) {
129
+ config.meshApiKey = args[keyIdx + 1];
130
+ saveConfig(config);
131
+ console.log('āœ… Mesh API key saved');
132
+ } else if (meshIdx !== -1 && args[meshIdx + 1]) {
133
+ config.meshUrl = args[meshIdx + 1];
134
+ saveConfig(config);
135
+ console.log(`āœ… Mesh URL set to ${config.meshUrl}`);
136
+ } else {
137
+ console.log('🧠 Osmosis Config:');
138
+ for (const [k, v] of Object.entries(config)) {
139
+ const display = k === 'meshApiKey' && v ? `${String(v).slice(0, 8)}...` : v;
140
+ console.log(` ${k}: ${display}`);
141
+ }
142
+ }
143
+ break;
144
+ }
145
+
146
+ case 'start': {
147
+ const config = loadConfig();
148
+ const dbPath = config.dbPath ?? getDbPath();
149
+ const meshUrl = config.meshUrl ?? getMeshUrl();
150
+ const meshApiKey = config.meshApiKey ?? getMeshKey();
151
+ const openclawDir = config.openclawDir ?? join(homedir(), '.openclaw');
152
+ const port = config.apiPort ?? getPort();
153
+
154
+ ensureDir(dbPath);
155
+ const store = new AtomStore(dbPath);
156
+
157
+ // Import openclaw modules dynamically
158
+ let watcher: any, injector: any;
159
+ try {
160
+ const oc = await import('@osmosis-ai/openclaw');
161
+ watcher = new oc.TranscriptWatcher(store, {
162
+ openclawDir,
163
+ scanIntervalMs: 10_000,
164
+ maxAgeMs: 365 * 24 * 60 * 60 * 1000,
165
+ });
166
+ watcher.start();
167
+
168
+ injector = new oc.ContextInjector(store, {
169
+ workspaceDir: join(openclawDir, 'workspace'),
170
+ updateIntervalMs: 15 * 60 * 1000,
171
+ maxTips: 10,
172
+ });
173
+ injector.start();
174
+ } catch {
175
+ console.log(' @osmosis-ai/openclaw not found — running without OpenClaw integration');
176
+ }
177
+
178
+ // Start local API
179
+ const { createSyncServer, startAutoSync, resolveSyncConfig } = await import('@osmosis-ai/sync');
180
+ const syncConfig = resolveSyncConfig({
181
+ meshUrl,
182
+ meshApiKey,
183
+ autoSync: !!meshUrl,
184
+ syncIntervalMs: 5 * 60 * 1000,
185
+ });
186
+ const server = createSyncServer(store, port, syncConfig);
187
+ const autoSync = startAutoSync(store, syncConfig);
188
+
189
+ console.log('🧠 Osmosis daemon running');
190
+ console.log(` API: http://localhost:${port}`);
191
+ console.log(` Mesh: ${meshUrl}`);
192
+ console.log(` Auth: ${meshApiKey ? 'key configured' : 'no key'}`);
193
+ console.log(` OpenClaw: ${openclawDir}`);
194
+ console.log(` DB: ${dbPath}`);
195
+ console.log(` Press Ctrl+C to stop\n`);
196
+
197
+ // Periodic status
198
+ const statusTimer = setInterval(() => {
199
+ const all = store.getAll();
200
+ const watcherStats = watcher?.stats ?? { capturedCount: 0, filesWatched: 0 };
201
+ console.log(`šŸ“Š ${all.length} atoms | Captured: ${watcherStats.capturedCount} | Files: ${watcherStats.filesWatched}`);
202
+ }, 60_000);
203
+
204
+ const shutdown = () => {
205
+ console.log('\n🧠 Shutting down...');
206
+ clearInterval(statusTimer);
207
+ watcher?.stop();
208
+ injector?.stop();
209
+ autoSync.stop();
210
+ server.close();
211
+ store.close();
212
+ process.exit(0);
213
+ };
214
+ process.on('SIGINT', shutdown);
215
+ process.on('SIGTERM', shutdown);
216
+ break;
217
+ }
218
+
47
219
  case 'serve': {
48
220
  const store = openStore();
49
221
  const port = getPort();
@@ -147,8 +319,9 @@ async function main(): Promise<void> {
147
319
  case 'sync': {
148
320
  const store = openStore();
149
321
  const meshUrl = getMeshUrl();
322
+ const meshKey = getMeshKey();
150
323
  console.log(`šŸ”„ Syncing with mesh at ${meshUrl}...`);
151
- const result = await syncWithMesh(store, meshUrl);
324
+ const result = await syncWithMesh(store, meshUrl, meshKey);
152
325
  console.log(` Pushed: ${result.pushed}`);
153
326
  console.log(` Pulled: ${result.pulled}`);
154
327
  console.log(` Deduped: ${result.deduped}`);
@@ -163,8 +336,9 @@ async function main(): Promise<void> {
163
336
  case 'contribute': {
164
337
  const store = openStore();
165
338
  const meshUrl = getMeshUrl();
339
+ const meshKey = getMeshKey();
166
340
  console.log(`šŸ“¤ Contributing to mesh at ${meshUrl}...`);
167
- const result = await contributeTo(store, meshUrl);
341
+ const result = await contributeTo(store, meshUrl, meshKey);
168
342
  console.log(` Pushed: ${result.pushed}`);
169
343
  console.log(` Deduped: ${result.deduped}`);
170
344
  if (result.errors.length > 0) {
@@ -178,8 +352,9 @@ async function main(): Promise<void> {
178
352
  case 'learn': {
179
353
  const store = openStore();
180
354
  const meshUrl = getMeshUrl();
355
+ const meshKey = getMeshKey();
181
356
  console.log(`šŸ“„ Learning from mesh at ${meshUrl}...`);
182
- const result = await learnFrom(store, meshUrl);
357
+ const result = await learnFrom(store, meshUrl, meshKey);
183
358
  console.log(` Pulled: ${result.pulled}`);
184
359
  console.log(` Deduped: ${result.deduped}`);
185
360
  if (result.errors.length > 0) {
@@ -203,28 +378,30 @@ async function main(): Promise<void> {
203
378
  }
204
379
 
205
380
  default:
206
- console.log(`🧠 Osmosis CLI v0.1.0
207
-
208
- Usage:
209
- osmosis serve [--port N] [--db PATH] [--mesh URL] Start local API server
210
- osmosis mesh-serve [--port N] [--db PATH] Start mesh server
211
- osmosis sync [--mesh URL] [--db PATH] Sync with mesh (contribute + learn)
212
- osmosis contribute [--mesh URL] [--db PATH] Push local atoms to mesh
213
- osmosis learn [--mesh URL] [--db PATH] Pull atoms from mesh
381
+ console.log(`🧠 Osmosis CLI v0.5.0 — Collective intelligence for AI agents
382
+
383
+ Quick Start:
384
+ osmosis init Set up Osmosis (first time)
385
+ osmosis start Start daemon (watches agents, syncs to mesh)
386
+ osmosis status Check your knowledge base
387
+
388
+ Commands:
389
+ osmosis init [--mesh URL] Initialize config + seed knowledge
390
+ osmosis start [--port N] Start daemon (watcher + sync + API)
391
+ osmosis config [--key KEY] [--mesh URL] View/update config
214
392
  osmosis status [--db PATH] Show atom count and top atoms
215
393
  osmosis search <query> [--db PATH] Search atoms
216
- osmosis seed [--db PATH] Seed with example atoms
394
+ osmosis sync [--mesh URL] [--key KEY] Sync with mesh (push + pull)
395
+ osmosis contribute [--mesh URL] [--key KEY] Push local atoms to mesh
396
+ osmosis learn [--mesh URL] [--key KEY] Pull atoms from mesh
397
+ osmosis seed [--db PATH] Seed with starter knowledge
398
+ osmosis serve [--port N] [--db PATH] [--mesh URL] Start local API only
217
399
  osmosis reset [--db PATH] Wipe all atoms
218
400
 
219
- Options:
220
- --db PATH Database path (default: ~/.osmosis/atoms.db)
221
- --port N API port (default: 7432)
222
- --mesh URL Mesh server URL (default: https://mesh.osmosis.dev)
401
+ Config: ~/.osmosis/config.json
402
+ Database: ~/.osmosis/atoms.db
223
403
 
224
- Environment:
225
- OSMOSIS_DB_PATH Database path override
226
- OSMOSIS_PORT API port override
227
- OSMOSIS_MESH_URL Mesh server URL override`);
404
+ https://github.com/turleydesigns/osmosis`);
228
405
  if (command) process.exit(1);
229
406
  }
230
407
  }