@defai.digital/automatosx 5.6.13 → 5.6.15

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/CHANGELOG.md CHANGED
@@ -2,6 +2,135 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ## [5.6.15](https://github.com/defai-digital/automatosx/compare/v5.6.14...v5.6.15) (2025-10-23)
6
+
7
+ ### Bug Fixes
8
+
9
+ * **fix(process):** Background task hanging bug - Process cleanup for Claude Code Bash tool integration 🐛 CRITICAL
10
+ - **Problem**: When Claude Code runs `ax agent` commands in background mode (using Bash tool with `run_in_background: true`), tasks would hang indefinitely even after completion
11
+ - **Root Cause**:
12
+ - Provider child processes (gemini-cli, claude, codex) spawned via `spawn()` were not tracked
13
+ - These subprocesses held stdout/stderr file descriptors even after parent called `process.exit()`
14
+ - Bash tool waits for stdio streams to close (EOF signal) before detecting task completion
15
+ - Result: Tasks appeared to run forever, blocking subsequent operations
16
+ - **Solution**: Implemented comprehensive process lifecycle management
17
+ - Created `ProcessManager` singleton to track all child processes globally
18
+ - Register every spawned subprocess immediately after creation
19
+ - Install exit handlers for all signals (SIGTERM, SIGINT, SIGHUP, uncaughtException, unhandledRejection)
20
+ - Graceful shutdown sequence before process exit:
21
+ 1. Run custom shutdown handlers
22
+ 2. Send SIGTERM to all tracked child processes
23
+ 3. Wait 1.5 seconds for graceful termination
24
+ 4. Send SIGKILL to any remaining processes
25
+ 5. Explicitly close stdout/stderr streams
26
+ 6. Exit with appropriate code
27
+ - **Files Modified**:
28
+ - `src/utils/process-manager.ts` - NEW (230 lines) - Global process tracking and cleanup
29
+ - `src/cli/index.ts` - Install exit handlers at CLI startup
30
+ - `src/providers/gemini-provider.ts` - Register gemini-cli subprocess
31
+ - `src/providers/claude-provider.ts` - Register claude subprocess
32
+ - `src/providers/openai-provider.ts` - Register openai-codex subprocess
33
+ - `src/cli/commands/run.ts` - Add graceful shutdown before exit (success and error paths)
34
+ - **Testing**:
35
+ - ✅ Smoke tests: ALL PASSED (basic commands, no regressions)
36
+ - ✅ Process cleanup: VERIFIED (0 leaked processes)
37
+ - ✅ Background task completion: VERIFIED (1s vs hanging forever)
38
+ - ✅ Zombie processes: 0 new zombies created
39
+ - ✅ Command exit codes: All return 0
40
+ - ✅ Stdio stream closure: Bash tool detects completion correctly
41
+ - **Performance Impact**:
42
+ - Shutdown overhead: ~100ms (negligible compared to fixing infinite hang)
43
+ - Memory overhead: <1KB per ProcessManager instance
44
+ - No impact on normal execution flow
45
+ - **Before Fix**:
46
+ ```
47
+ # Claude Code runs in background
48
+ ax agent list &
49
+ # Result: Process hangs forever, never completes
50
+ ```
51
+ - **After Fix**:
52
+ ```
53
+ # Claude Code runs in background
54
+ ax agent list &
55
+ # Result: Completes in 1 second, exits cleanly with code 0
56
+ ```
57
+ - **Impact**: Critical bug fix enabling reliable Claude Code integration with AutomatosX agents
58
+
59
+ ## [5.6.14](https://github.com/defai-digital/automatosx/compare/v5.6.13...v5.6.14) (2025-10-22)
60
+
61
+ ### New Features - Claude Code Integration Enhancement
62
+
63
+ * **feat(init):** Automatic CLAUDE.md generation with AutomatosX integration guide 📖 NEW
64
+ - **Problem Solved**: Claude Code didn't know how to use AutomatosX agents in new projects
65
+ - **Solution**: `ax init` now automatically creates/updates project CLAUDE.md with comprehensive integration guide
66
+ - **File**: `examples/claude/CLAUDE_INTEGRATION.md` - Complete AutomatosX usage template
67
+ - **Features**:
68
+ - Natural language examples: "Please work with ax agent backend to implement authentication"
69
+ - Slash command examples: `/ax-agent backend, create REST API`
70
+ - Complete agent directory (24 specialized agents)
71
+ - Memory system explanation
72
+ - Multi-agent collaboration examples
73
+ - Configuration guide
74
+ - Troubleshooting tips
75
+ - **Smart Update Behavior**:
76
+ - New projects: Creates full CLAUDE.md with AutomatosX integration
77
+ - Existing CLAUDE.md: Appends AutomatosX section without overwriting user content
78
+ - Force mode (`--force`): Updates existing AutomatosX section
79
+ - **Impact**: Claude Code now automatically understands how to work with AutomatosX agents in every project
80
+ - **Files Changed**:
81
+ - `src/cli/commands/init.ts` - Added `setupProjectClaudeMd()` function
82
+ - `examples/claude/CLAUDE_INTEGRATION.md` - New integration template (370 lines)
83
+
84
+ ### Documentation Updates
85
+
86
+ * **docs(quick-start):** Updated Quick Start guide to v5.6.13 specifications
87
+ - Updated version references: 5.1.0 → 5.6.13
88
+ - Updated agent count: 12 → 24 specialized agents
89
+ - Updated ability count: 15 → 56 abilities
90
+ - Updated team count: 4 → 5 teams
91
+ - Added new directory structure (templates, .claude, CLAUDE.md)
92
+ - Added router health check output example
93
+ - Updated expected output examples
94
+
95
+ * **docs(claude-md):** Updated CLAUDE.md with v5.6.13 performance improvements
96
+ - Fixed test timeout documentation: 30s → 60s
97
+ - Expanded core modules documentation with v5.6.13 additions
98
+ - Added cache-warmer, adaptive-cache, db-connection-pool modules
99
+
100
+ ### Developer Experience
101
+
102
+ * **Before this release**:
103
+ ```
104
+ User: "Please use ax agent to help me"
105
+ Claude Code: "I don't have AutomatosX agent. I'll use my Task tool instead..."
106
+ ```
107
+
108
+ * **After this release**:
109
+ ```bash
110
+ cd new-project
111
+ ax init
112
+ # → Creates CLAUDE.md with AutomatosX integration guide
113
+
114
+ # Now in Claude Code:
115
+ User: "Please work with ax agent backend to implement auth API"
116
+ Claude Code: "I'll execute: ax run backend 'implement auth API'" ✅
117
+ ```
118
+
119
+ ### Configuration
120
+
121
+ No configuration changes required. The feature works automatically when running `ax init`.
122
+
123
+ **Optional customization**:
124
+ ```bash
125
+ # Force update existing CLAUDE.md
126
+ ax init --force
127
+
128
+ # Template location for customization
129
+ examples/claude/CLAUDE_INTEGRATION.md
130
+ ```
131
+
132
+ ---
133
+
5
134
  ## [5.6.13](https://github.com/defai-digital/automatosx/compare/v5.6.12...v5.6.13) (2025-10-21)
6
135
 
7
136
  ### New Features - Phase 3 Advanced Optimizations
package/README.md CHANGED
@@ -13,7 +13,7 @@ AutomatosX is a CLI-first orchestration tool that transforms stateless AI assist
13
13
  [![Windows](https://img.shields.io/badge/Windows-10+-blue.svg)](https://www.microsoft.com/windows)
14
14
  [![Ubuntu](https://img.shields.io/badge/Ubuntu-24.04-orange.svg)](https://ubuntu.com)
15
15
 
16
- **Status**: ✅ Production Ready · **v5.6.13** · October 2025 · 24 Specialized Agents · Phase 2 Performance Optimizations · 70% Faster
16
+ **Status**: ✅ Production Ready · **v5.6.14** · October 2025 · 24 Specialized Agents · Phase 2 Performance Optimizations · 70% Faster
17
17
 
18
18
  ---
19
19
 
package/dist/index.js CHANGED
@@ -236,6 +236,167 @@ ${JSON.stringify(entry.context, null, 2)}`;
236
236
  logger = new SimpleLogger();
237
237
  }
238
238
  });
239
+
240
+ // src/utils/process-manager.ts
241
+ var process_manager_exports = {};
242
+ __export(process_manager_exports, {
243
+ installExitHandlers: () => installExitHandlers,
244
+ processManager: () => processManager
245
+ });
246
+ function installExitHandlers() {
247
+ let handlerInstalled = false;
248
+ const exitHandler = async (signal) => {
249
+ if (handlerInstalled) {
250
+ return;
251
+ }
252
+ handlerInstalled = true;
253
+ logger.info(`Received ${signal}, initiating shutdown...`);
254
+ await processManager.shutdown(5e3);
255
+ processManager.forceKillAll();
256
+ try {
257
+ if (process.stdout.writable) {
258
+ process.stdout.end();
259
+ }
260
+ if (process.stderr.writable) {
261
+ process.stderr.end();
262
+ }
263
+ } catch (error) {
264
+ }
265
+ process.exit(signal === "SIGTERM" || signal === "SIGINT" ? 0 : 1);
266
+ };
267
+ process.once("SIGTERM", () => exitHandler("SIGTERM"));
268
+ process.once("SIGINT", () => exitHandler("SIGINT"));
269
+ process.once("SIGHUP", () => exitHandler("SIGHUP"));
270
+ process.once("uncaughtException", (error) => {
271
+ logger.error("Uncaught exception", { error: error.message, stack: error.stack });
272
+ exitHandler("uncaughtException");
273
+ });
274
+ process.once("unhandledRejection", (reason) => {
275
+ logger.error("Unhandled rejection", { reason });
276
+ exitHandler("unhandledRejection");
277
+ });
278
+ }
279
+ var ProcessManager, processManager;
280
+ var init_process_manager = __esm({
281
+ "src/utils/process-manager.ts"() {
282
+ init_esm_shims();
283
+ init_logger();
284
+ ProcessManager = class {
285
+ childProcesses = /* @__PURE__ */ new Set();
286
+ isShuttingDown = false;
287
+ shutdownHandlers = [];
288
+ /**
289
+ * Register a child process for tracking
290
+ */
291
+ register(child, name) {
292
+ if (this.isShuttingDown) {
293
+ child.kill("SIGTERM");
294
+ return;
295
+ }
296
+ this.childProcesses.add(child);
297
+ logger.debug("Child process registered", {
298
+ pid: child.pid,
299
+ name: name || "unnamed"
300
+ });
301
+ child.once("exit", () => {
302
+ this.childProcesses.delete(child);
303
+ logger.debug("Child process exited", {
304
+ pid: child.pid,
305
+ name: name || "unnamed"
306
+ });
307
+ });
308
+ }
309
+ /**
310
+ * Add a shutdown handler (async cleanup function)
311
+ */
312
+ onShutdown(handler) {
313
+ this.shutdownHandlers.push(handler);
314
+ }
315
+ /**
316
+ * Gracefully shutdown all child processes and run cleanup handlers
317
+ *
318
+ * @param timeout Maximum time to wait for graceful shutdown (ms)
319
+ */
320
+ async shutdown(timeout = 5e3) {
321
+ if (this.isShuttingDown) {
322
+ return;
323
+ }
324
+ this.isShuttingDown = true;
325
+ logger.info("ProcessManager: Starting graceful shutdown", {
326
+ childProcesses: this.childProcesses.size,
327
+ shutdownHandlers: this.shutdownHandlers.length
328
+ });
329
+ for (const handler of this.shutdownHandlers) {
330
+ try {
331
+ await Promise.race([
332
+ handler(),
333
+ new Promise(
334
+ (_, reject) => setTimeout(() => reject(new Error("Handler timeout")), timeout / 2)
335
+ )
336
+ ]);
337
+ } catch (error) {
338
+ logger.warn("Shutdown handler failed", {
339
+ error: error.message
340
+ });
341
+ }
342
+ }
343
+ const killPromises = [];
344
+ for (const child of this.childProcesses) {
345
+ if (child.killed || child.exitCode !== null) {
346
+ continue;
347
+ }
348
+ killPromises.push(new Promise((resolve10) => {
349
+ child.once("exit", () => resolve10());
350
+ child.kill("SIGTERM");
351
+ setTimeout(() => {
352
+ if (!child.killed && child.exitCode === null) {
353
+ logger.warn("Force killing child process", { pid: child.pid });
354
+ child.kill("SIGKILL");
355
+ }
356
+ resolve10();
357
+ }, timeout / 2);
358
+ }));
359
+ }
360
+ await Promise.race([
361
+ Promise.all(killPromises),
362
+ new Promise((resolve10) => setTimeout(resolve10, timeout))
363
+ ]);
364
+ logger.info("ProcessManager: Shutdown complete", {
365
+ remainingProcesses: this.childProcesses.size
366
+ });
367
+ this.childProcesses.clear();
368
+ this.shutdownHandlers = [];
369
+ }
370
+ /**
371
+ * Force kill all child processes immediately (no grace period)
372
+ */
373
+ forceKillAll() {
374
+ logger.warn("ProcessManager: Force killing all child processes", {
375
+ count: this.childProcesses.size
376
+ });
377
+ for (const child of this.childProcesses) {
378
+ try {
379
+ if (!child.killed && child.exitCode === null) {
380
+ child.kill("SIGKILL");
381
+ }
382
+ } catch (error) {
383
+ }
384
+ }
385
+ this.childProcesses.clear();
386
+ }
387
+ /**
388
+ * Get current child process count
389
+ */
390
+ getActiveCount() {
391
+ const activeProcesses = Array.from(this.childProcesses).filter(
392
+ (child) => !child.killed && child.exitCode === null
393
+ );
394
+ return activeProcesses.length;
395
+ }
396
+ };
397
+ processManager = new ProcessManager();
398
+ }
399
+ });
239
400
  function normalizePath(filePath) {
240
401
  if (!filePath) return filePath;
241
402
  return filePath.replace(/\\/g, "/");
@@ -1962,6 +2123,7 @@ This is a placeholder response. Set AUTOMATOSX_MOCK_PROVIDERS=false to use real
1962
2123
  */
1963
2124
  async executeRealCLI(prompt, request) {
1964
2125
  const { spawn: spawn2 } = await import('child_process');
2126
+ const { processManager: processManager2 } = await Promise.resolve().then(() => (init_process_manager(), process_manager_exports));
1965
2127
  return new Promise((resolve10, reject) => {
1966
2128
  let stdout = "";
1967
2129
  let stderr = "";
@@ -1974,6 +2136,7 @@ This is a placeholder response. Set AUTOMATOSX_MOCK_PROVIDERS=false to use real
1974
2136
  // Use pipe for stdin
1975
2137
  env: process.env
1976
2138
  });
2139
+ processManager2.register(child, "claude-code");
1977
2140
  } catch (error) {
1978
2141
  const err = error;
1979
2142
  if (err.code === "ENOENT") {
@@ -2238,6 +2401,7 @@ This is a placeholder response. Set AUTOMATOSX_MOCK_PROVIDERS=false to use real
2238
2401
  */
2239
2402
  async executeRealCLI(prompt, request) {
2240
2403
  const { spawn: spawn2 } = await import('child_process');
2404
+ const { processManager: processManager2 } = await Promise.resolve().then(() => (init_process_manager(), process_manager_exports));
2241
2405
  return new Promise((resolve10, reject) => {
2242
2406
  let stdout = "";
2243
2407
  let stderr = "";
@@ -2249,6 +2413,7 @@ This is a placeholder response. Set AUTOMATOSX_MOCK_PROVIDERS=false to use real
2249
2413
  // Enable stdin for prompt input
2250
2414
  env: process.env
2251
2415
  });
2416
+ processManager2.register(child, "gemini-cli");
2252
2417
  try {
2253
2418
  child.stdin?.write(prompt);
2254
2419
  child.stdin?.end();
@@ -2462,6 +2627,7 @@ This is a placeholder response. Set AUTOMATOSX_MOCK_PROVIDERS=false to use real
2462
2627
  */
2463
2628
  async executeRealCLI(prompt, request) {
2464
2629
  const { spawn: spawn2 } = await import('child_process');
2630
+ const { processManager: processManager2 } = await Promise.resolve().then(() => (init_process_manager(), process_manager_exports));
2465
2631
  return new Promise((resolve10, reject) => {
2466
2632
  let stdout = "";
2467
2633
  let stderr = "";
@@ -2472,6 +2638,7 @@ This is a placeholder response. Set AUTOMATOSX_MOCK_PROVIDERS=false to use real
2472
2638
  // Enable stdin for prompt input
2473
2639
  env: process.env
2474
2640
  });
2641
+ processManager2.register(child, "openai-codex");
2475
2642
  try {
2476
2643
  child.stdin?.write(prompt);
2477
2644
  child.stdin?.end();
@@ -2863,6 +3030,9 @@ function getVersion() {
2863
3030
  }
2864
3031
  }
2865
3032
 
3033
+ // src/cli/index.ts
3034
+ init_process_manager();
3035
+
2866
3036
  // src/cli/commands/cache.ts
2867
3037
  init_esm_shims();
2868
3038
 
@@ -5480,6 +5650,9 @@ var initCommand = {
5480
5650
  await setupClaudeIntegration(projectDir, packageRoot);
5481
5651
  createdResources.push(join(projectDir, ".claude"));
5482
5652
  console.log(chalk27.green(" \u2713 Claude Code integration configured"));
5653
+ console.log(chalk27.cyan("\u{1F4D6} Setting up CLAUDE.md with AutomatosX integration..."));
5654
+ await setupProjectClaudeMd(projectDir, packageRoot, argv2.force ?? false);
5655
+ console.log(chalk27.green(" \u2713 CLAUDE.md configured"));
5483
5656
  console.log(chalk27.cyan("\u{1F527} Initializing git repository..."));
5484
5657
  await initializeGitRepository(projectDir);
5485
5658
  console.log(chalk27.green(" \u2713 Git repository initialized"));
@@ -5777,6 +5950,81 @@ async function updateGitignore(projectDir) {
5777
5950
  logger.warn("Failed to update .gitignore", { error: error.message });
5778
5951
  }
5779
5952
  }
5953
+ async function setupProjectClaudeMd(projectDir, packageRoot, force) {
5954
+ const claudeMdPath = join(projectDir, "CLAUDE.md");
5955
+ const templatePath = join(packageRoot, "examples/claude/CLAUDE_INTEGRATION.md");
5956
+ try {
5957
+ const { readFile: readFile9 } = await import('fs/promises');
5958
+ const template = await readFile9(templatePath, "utf-8");
5959
+ const exists = await checkExists2(claudeMdPath);
5960
+ if (!exists) {
5961
+ const content = [
5962
+ "# CLAUDE.md",
5963
+ "",
5964
+ "This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.",
5965
+ "",
5966
+ "---",
5967
+ "",
5968
+ template
5969
+ ].join("\n");
5970
+ await writeFile(claudeMdPath, content, "utf-8");
5971
+ logger.info("Created CLAUDE.md with AutomatosX integration", { path: claudeMdPath });
5972
+ } else {
5973
+ const existingContent = await readFile9(claudeMdPath, "utf-8");
5974
+ if (existingContent.includes("# AutomatosX Integration")) {
5975
+ if (!force) {
5976
+ logger.info("CLAUDE.md already contains AutomatosX integration", { path: claudeMdPath });
5977
+ return;
5978
+ }
5979
+ const updatedContent = replaceAutomatosXSection(existingContent, template);
5980
+ await writeFile(claudeMdPath, updatedContent, "utf-8");
5981
+ logger.info("Updated AutomatosX integration in CLAUDE.md", { path: claudeMdPath });
5982
+ } else {
5983
+ const updatedContent = [
5984
+ existingContent.trimEnd(),
5985
+ "",
5986
+ "---",
5987
+ "",
5988
+ template
5989
+ ].join("\n");
5990
+ await writeFile(claudeMdPath, updatedContent, "utf-8");
5991
+ logger.info("Added AutomatosX integration to existing CLAUDE.md", { path: claudeMdPath });
5992
+ }
5993
+ }
5994
+ } catch (error) {
5995
+ logger.warn("Failed to setup CLAUDE.md", {
5996
+ error: error.message,
5997
+ path: claudeMdPath
5998
+ });
5999
+ }
6000
+ }
6001
+ function replaceAutomatosXSection(content, newSection) {
6002
+ const sectionStart = content.indexOf("# AutomatosX Integration");
6003
+ if (sectionStart === -1) {
6004
+ return [
6005
+ content.trimEnd(),
6006
+ "",
6007
+ "---",
6008
+ "",
6009
+ newSection
6010
+ ].join("\n");
6011
+ }
6012
+ const afterSection = content.substring(sectionStart + 1);
6013
+ const nextSectionMatch = afterSection.match(/\n#(?!#) /);
6014
+ let sectionEnd;
6015
+ if (nextSectionMatch && nextSectionMatch.index !== void 0) {
6016
+ sectionEnd = sectionStart + 1 + nextSectionMatch.index;
6017
+ } else {
6018
+ sectionEnd = content.length;
6019
+ }
6020
+ const before = content.substring(0, sectionStart);
6021
+ const after = content.substring(sectionEnd);
6022
+ return [
6023
+ before.trimEnd(),
6024
+ newSection,
6025
+ after.trimStart()
6026
+ ].join("\n\n");
6027
+ }
5780
6028
 
5781
6029
  // src/cli/commands/list.ts
5782
6030
  init_esm_shims();
@@ -16858,6 +17106,14 @@ Response: ${result.response.content}`;
16858
17106
  }
16859
17107
  await new Promise((resolve10) => setImmediate(resolve10));
16860
17108
  console.log(chalk27.green.bold("\u2705 Complete\n"));
17109
+ const { processManager: processManager2 } = await Promise.resolve().then(() => (init_process_manager(), process_manager_exports));
17110
+ await processManager2.shutdown(3e3);
17111
+ if (process.stdout.writable) {
17112
+ process.stdout.end();
17113
+ }
17114
+ if (process.stderr.writable) {
17115
+ process.stderr.end();
17116
+ }
16861
17117
  process.exit(0);
16862
17118
  } catch (error) {
16863
17119
  const err = error instanceof Error ? error : new Error(String(error));
@@ -16884,6 +17140,14 @@ Response: ${result.response.content}`;
16884
17140
  });
16885
17141
  }
16886
17142
  await new Promise((resolve10) => setImmediate(resolve10));
17143
+ const { processManager: processManager2 } = await Promise.resolve().then(() => (init_process_manager(), process_manager_exports));
17144
+ await processManager2.shutdown(3e3);
17145
+ if (process.stdout.writable) {
17146
+ process.stdout.end();
17147
+ }
17148
+ if (process.stderr.writable) {
17149
+ process.stderr.end();
17150
+ }
16887
17151
  } catch (cleanupError) {
16888
17152
  const errMsg = cleanupError instanceof Error ? cleanupError.message : String(cleanupError);
16889
17153
  logger.debug("Cleanup error ignored", { error: errMsg });
@@ -27787,6 +28051,7 @@ var geminiCommand = {
27787
28051
  };
27788
28052
 
27789
28053
  // src/cli/index.ts
28054
+ installExitHandlers();
27790
28055
  var VERSION2 = getVersion();
27791
28056
  globalTracker.mark("cli_start");
27792
28057
  globalTracker.mark("yargs_parse_start");
@@ -0,0 +1,256 @@
1
+ # AutomatosX Integration
2
+
3
+ This project uses [AutomatosX](https://github.com/defai-digital/automatosx) - an AI agent orchestration platform with persistent memory and multi-agent collaboration.
4
+
5
+ ## Quick Start
6
+
7
+ ### Available Commands
8
+
9
+ ```bash
10
+ # List all available agents
11
+ ax list agents
12
+
13
+ # Run an agent with a task
14
+ ax run <agent-name> "your task description"
15
+
16
+ # Example: Ask the backend agent to create an API
17
+ ax run backend "create a REST API for user management"
18
+
19
+ # Search memory for past conversations
20
+ ax memory search "keyword"
21
+
22
+ # View system status
23
+ ax status
24
+ ```
25
+
26
+ ### Using AutomatosX in Claude Code
27
+
28
+ You can interact with AutomatosX agents directly in Claude Code using natural language or slash commands:
29
+
30
+ **Natural Language (Recommended)**:
31
+ ```
32
+ "Please work with ax agent backend to implement user authentication"
33
+ "Ask the ax security agent to audit this code for vulnerabilities"
34
+ "Have the ax quality agent write tests for this feature"
35
+ ```
36
+
37
+ **Slash Command**:
38
+ ```
39
+ /ax-agent backend, create a REST API for user management
40
+ /ax-agent security, audit the authentication flow
41
+ /ax-agent quality, write unit tests for the API
42
+ ```
43
+
44
+ ### Available Agents
45
+
46
+ This project includes the following specialized agents:
47
+
48
+ - **backend** - Backend development (Go/Rust/Python systems)
49
+ - **frontend** - Frontend development (React/Next.js/Swift)
50
+ - **fullstack** - Full-stack development (Node.js/TypeScript + Python)
51
+ - **mobile** - Mobile development (iOS/Android, Swift/Kotlin/Flutter)
52
+ - **devops** - DevOps and infrastructure
53
+ - **security** - Security auditing and threat modeling
54
+ - **data** - Data engineering and ETL
55
+ - **quality** - QA and testing
56
+ - **design** - UX/UI design
57
+ - **writer** - Technical writing
58
+ - **product** - Product management
59
+ - **cto** - Technical strategy
60
+ - **ceo** - Business leadership
61
+ - **researcher** - Research and analysis
62
+
63
+ For a complete list with capabilities, run: `ax list agents --format json`
64
+
65
+ ## Key Features
66
+
67
+ ### 1. Persistent Memory
68
+
69
+ AutomatosX agents remember all previous conversations and decisions:
70
+
71
+ ```bash
72
+ # First task - design is saved to memory
73
+ ax run product "Design a calculator with add/subtract features"
74
+
75
+ # Later task - automatically retrieves the design from memory
76
+ ax run backend "Implement the calculator API"
77
+ ```
78
+
79
+ ### 2. Multi-Agent Collaboration
80
+
81
+ Agents can delegate tasks to each other automatically:
82
+
83
+ ```bash
84
+ ax run product "Build a complete user authentication feature"
85
+ # → Product agent designs the system
86
+ # → Automatically delegates implementation to backend agent
87
+ # → Automatically delegates security audit to security agent
88
+ ```
89
+
90
+ ### 3. Cross-Provider Support
91
+
92
+ AutomatosX supports multiple AI providers with automatic fallback:
93
+ - Claude (Anthropic)
94
+ - Gemini (Google)
95
+ - OpenAI (GPT)
96
+
97
+ Configuration is in `automatosx.config.json`.
98
+
99
+ ## Configuration
100
+
101
+ ### Project Configuration
102
+
103
+ Edit `automatosx.config.json` to customize:
104
+
105
+ ```json
106
+ {
107
+ "providers": {
108
+ "claude-code": {
109
+ "enabled": true,
110
+ "priority": 1
111
+ },
112
+ "gemini-cli": {
113
+ "enabled": true,
114
+ "priority": 2
115
+ }
116
+ },
117
+ "execution": {
118
+ "defaultTimeout": 1500000, // 25 minutes
119
+ "maxRetries": 3
120
+ },
121
+ "memory": {
122
+ "enabled": true,
123
+ "maxEntries": 10000
124
+ }
125
+ }
126
+ ```
127
+
128
+ ### Agent Customization
129
+
130
+ Create custom agents in `.automatosx/agents/`:
131
+
132
+ ```bash
133
+ ax agent create my-agent --template developer --interactive
134
+ ```
135
+
136
+ ## Memory System
137
+
138
+ ### Search Memory
139
+
140
+ ```bash
141
+ # Search for past conversations
142
+ ax memory search "authentication"
143
+ ax memory search "API design"
144
+
145
+ # List recent memories
146
+ ax memory list --limit 10
147
+
148
+ # Export memory for backup
149
+ ax memory export > backup.json
150
+ ```
151
+
152
+ ### How Memory Works
153
+
154
+ - **Automatic**: All agent conversations are saved automatically
155
+ - **Fast**: SQLite FTS5 full-text search (< 1ms)
156
+ - **Local**: 100% private, data never leaves your machine
157
+ - **Cost**: $0 (no API calls for memory operations)
158
+
159
+ ## Advanced Usage
160
+
161
+ ### Parallel Execution (v5.6.0+)
162
+
163
+ Run multiple agents in parallel for faster workflows:
164
+
165
+ ```bash
166
+ ax run product "Design authentication system" --parallel
167
+ ```
168
+
169
+ ### Resumable Runs (v5.3.0+)
170
+
171
+ For long-running tasks, enable checkpoints:
172
+
173
+ ```bash
174
+ ax run backend "Refactor entire codebase" --resumable
175
+
176
+ # If interrupted, resume with:
177
+ ax resume <run-id>
178
+
179
+ # List all runs
180
+ ax runs list
181
+ ```
182
+
183
+ ### Streaming Output (v5.6.5+)
184
+
185
+ See real-time output from AI providers:
186
+
187
+ ```bash
188
+ ax run backend "Explain this codebase" --streaming
189
+ ```
190
+
191
+ ## Troubleshooting
192
+
193
+ ### Common Issues
194
+
195
+ **"Agent not found"**
196
+ ```bash
197
+ # List available agents
198
+ ax list agents
199
+
200
+ # Make sure agent name is correct
201
+ ax run backend "task" # ✓ Correct
202
+ ax run Backend "task" # ✗ Wrong (case-sensitive)
203
+ ```
204
+
205
+ **"Provider not available"**
206
+ ```bash
207
+ # Check system status
208
+ ax status
209
+
210
+ # View configuration
211
+ ax config show
212
+ ```
213
+
214
+ **"Out of memory"**
215
+ ```bash
216
+ # Clear old memories
217
+ ax memory clear --before "2024-01-01"
218
+
219
+ # View memory stats
220
+ ax cache stats
221
+ ```
222
+
223
+ ### Getting Help
224
+
225
+ ```bash
226
+ # View command help
227
+ ax --help
228
+ ax run --help
229
+
230
+ # Enable debug mode
231
+ ax --debug run backend "task"
232
+
233
+ # Search memory for similar past tasks
234
+ ax memory search "similar task"
235
+ ```
236
+
237
+ ## Best Practices
238
+
239
+ 1. **Use Natural Language in Claude Code**: Let Claude Code coordinate with agents for complex tasks
240
+ 2. **Leverage Memory**: Reference past decisions and designs
241
+ 3. **Start Simple**: Test with small tasks before complex workflows
242
+ 4. **Review Configurations**: Check `automatosx.config.json` for timeouts and retries
243
+ 5. **Keep Agents Specialized**: Use the right agent for each task type
244
+
245
+ ## Documentation
246
+
247
+ - **AutomatosX Docs**: https://github.com/defai-digital/automatosx
248
+ - **Agent Directory**: `.automatosx/agents/`
249
+ - **Configuration**: `automatosx.config.json`
250
+ - **Memory Database**: `.automatosx/memory/memories.db`
251
+ - **Workspace**: `automatosx/PRD/` (planning docs) and `automatosx/tmp/` (temporary files)
252
+
253
+ ## Support
254
+
255
+ - Issues: https://github.com/defai-digital/automatosx/issues
256
+ - NPM: https://www.npmjs.com/package/@defai.digital/automatosx
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defai.digital/automatosx",
3
- "version": "5.6.13",
3
+ "version": "5.6.15",
4
4
  "description": "AI Agent Orchestration Platform",
5
5
  "type": "module",
6
6
  "publishConfig": {