crewx 0.1.0 → 0.1.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.
Files changed (195) hide show
  1. package/LICENSE +197 -9
  2. package/README.md +120 -28
  3. package/crewx.yaml +1273 -0
  4. package/dist/agent.types.d.ts +92 -0
  5. package/dist/agent.types.js +16 -0
  6. package/dist/agent.types.js.map +1 -0
  7. package/dist/ai-provider.service.d.ts +25 -0
  8. package/dist/ai-provider.service.js +138 -0
  9. package/dist/ai-provider.service.js.map +1 -0
  10. package/dist/ai.service.d.ts +50 -0
  11. package/dist/ai.service.js +625 -0
  12. package/dist/ai.service.js.map +1 -0
  13. package/dist/app.module.d.ts +5 -0
  14. package/dist/app.module.js +88 -0
  15. package/dist/app.module.js.map +1 -0
  16. package/dist/cli/chat.handler.d.ts +19 -0
  17. package/dist/cli/chat.handler.js +429 -0
  18. package/dist/cli/chat.handler.js.map +1 -0
  19. package/dist/cli/cli.handler.d.ts +4 -0
  20. package/dist/cli/cli.handler.js +93 -0
  21. package/dist/cli/cli.handler.js.map +1 -0
  22. package/dist/cli/doctor.handler.d.ts +36 -0
  23. package/dist/cli/doctor.handler.js +382 -0
  24. package/dist/cli/doctor.handler.js.map +1 -0
  25. package/dist/cli/execute.handler.d.ts +2 -0
  26. package/dist/cli/execute.handler.js +269 -0
  27. package/dist/cli/execute.handler.js.map +1 -0
  28. package/dist/cli/help.handler.d.ts +2 -0
  29. package/dist/cli/help.handler.js +10 -0
  30. package/dist/cli/help.handler.js.map +1 -0
  31. package/dist/cli/init.handler.d.ts +25 -0
  32. package/dist/cli/init.handler.js +355 -0
  33. package/dist/cli/init.handler.js.map +1 -0
  34. package/dist/cli/query.handler.d.ts +2 -0
  35. package/dist/cli/query.handler.js +351 -0
  36. package/dist/cli/query.handler.js.map +1 -0
  37. package/dist/cli/templates.handler.d.ts +2 -0
  38. package/dist/cli/templates.handler.js +100 -0
  39. package/dist/cli/templates.handler.js.map +1 -0
  40. package/dist/cli-options.d.ts +22 -0
  41. package/dist/cli-options.js +195 -0
  42. package/dist/cli-options.js.map +1 -0
  43. package/dist/config/timeout.config.d.ts +14 -0
  44. package/dist/config/timeout.config.js +34 -0
  45. package/dist/config/timeout.config.js.map +1 -0
  46. package/dist/constants.d.ts +4 -0
  47. package/dist/constants.js +8 -0
  48. package/dist/constants.js.map +1 -0
  49. package/dist/conversation/base-conversation-history.provider.d.ts +12 -0
  50. package/dist/conversation/base-conversation-history.provider.js +45 -0
  51. package/dist/conversation/base-conversation-history.provider.js.map +1 -0
  52. package/dist/conversation/cli-conversation-history.provider.d.ts +16 -0
  53. package/dist/conversation/cli-conversation-history.provider.js +104 -0
  54. package/dist/conversation/cli-conversation-history.provider.js.map +1 -0
  55. package/dist/conversation/conversation-config.d.ts +9 -0
  56. package/dist/conversation/conversation-config.js +25 -0
  57. package/dist/conversation/conversation-config.js.map +1 -0
  58. package/dist/conversation/conversation-history.interface.d.ts +25 -0
  59. package/dist/conversation/conversation-history.interface.js +3 -0
  60. package/dist/conversation/conversation-history.interface.js.map +1 -0
  61. package/dist/conversation/conversation-provider.factory.d.ts +10 -0
  62. package/dist/conversation/conversation-provider.factory.js +50 -0
  63. package/dist/conversation/conversation-provider.factory.js.map +1 -0
  64. package/dist/conversation/conversation-storage.service.d.ts +15 -0
  65. package/dist/conversation/conversation-storage.service.js +182 -0
  66. package/dist/conversation/conversation-storage.service.js.map +1 -0
  67. package/dist/conversation/index.d.ts +7 -0
  68. package/dist/conversation/index.js +24 -0
  69. package/dist/conversation/index.js.map +1 -0
  70. package/dist/conversation/slack-conversation-history.provider.d.ts +22 -0
  71. package/dist/conversation/slack-conversation-history.provider.js +239 -0
  72. package/dist/conversation/slack-conversation-history.provider.js.map +1 -0
  73. package/dist/crewx.tool.d.ts +421 -0
  74. package/dist/crewx.tool.js +1240 -0
  75. package/dist/crewx.tool.js.map +1 -0
  76. package/dist/knowledge/DocumentManager.d.ts +4 -0
  77. package/dist/knowledge/DocumentManager.js +119 -0
  78. package/dist/knowledge/DocumentManager.js.map +1 -0
  79. package/dist/main.d.ts +1 -0
  80. package/dist/main.js +230 -0
  81. package/dist/main.js.map +1 -0
  82. package/dist/mcp.controller.d.ts +8 -0
  83. package/dist/mcp.controller.js +60 -0
  84. package/dist/mcp.controller.js.map +1 -0
  85. package/dist/project.service.d.ts +44 -0
  86. package/dist/project.service.js +299 -0
  87. package/dist/project.service.js.map +1 -0
  88. package/dist/providers/ai-provider.interface.d.ts +30 -0
  89. package/dist/providers/ai-provider.interface.js +11 -0
  90. package/dist/providers/ai-provider.interface.js.map +1 -0
  91. package/dist/providers/base-ai.provider.d.ts +42 -0
  92. package/dist/providers/base-ai.provider.js +515 -0
  93. package/dist/providers/base-ai.provider.js.map +1 -0
  94. package/dist/providers/claude.provider.d.ts +25 -0
  95. package/dist/providers/claude.provider.js +376 -0
  96. package/dist/providers/claude.provider.js.map +1 -0
  97. package/dist/providers/copilot.provider.d.ts +25 -0
  98. package/dist/providers/copilot.provider.js +280 -0
  99. package/dist/providers/copilot.provider.js.map +1 -0
  100. package/dist/providers/gemini.provider.d.ts +22 -0
  101. package/dist/providers/gemini.provider.js +163 -0
  102. package/dist/providers/gemini.provider.js.map +1 -0
  103. package/dist/services/agent-loader.service.d.ts +23 -0
  104. package/dist/services/agent-loader.service.js +313 -0
  105. package/dist/services/agent-loader.service.js.map +1 -0
  106. package/dist/services/config-validator.service.d.ts +28 -0
  107. package/dist/services/config-validator.service.js +427 -0
  108. package/dist/services/config-validator.service.js.map +1 -0
  109. package/dist/services/config.service.d.ts +25 -0
  110. package/dist/services/config.service.js +102 -0
  111. package/dist/services/config.service.js.map +1 -0
  112. package/dist/services/context-enhancement.service.d.ts +13 -0
  113. package/dist/services/context-enhancement.service.js +169 -0
  114. package/dist/services/context-enhancement.service.js.map +1 -0
  115. package/dist/services/document-loader.service.d.ts +16 -0
  116. package/dist/services/document-loader.service.js +137 -0
  117. package/dist/services/document-loader.service.js.map +1 -0
  118. package/dist/services/help.service.d.ts +5 -0
  119. package/dist/services/help.service.js +112 -0
  120. package/dist/services/help.service.js.map +1 -0
  121. package/dist/services/intelligent-compression.service.d.ts +20 -0
  122. package/dist/services/intelligent-compression.service.js +179 -0
  123. package/dist/services/intelligent-compression.service.js.map +1 -0
  124. package/dist/services/parallel-processing.service.d.ts +108 -0
  125. package/dist/services/parallel-processing.service.js +266 -0
  126. package/dist/services/parallel-processing.service.js.map +1 -0
  127. package/dist/services/result-formatter.service.d.ts +27 -0
  128. package/dist/services/result-formatter.service.js +126 -0
  129. package/dist/services/result-formatter.service.js.map +1 -0
  130. package/dist/services/task-management.service.d.ts +63 -0
  131. package/dist/services/task-management.service.js +270 -0
  132. package/dist/services/task-management.service.js.map +1 -0
  133. package/dist/services/template.service.d.ts +36 -0
  134. package/dist/services/template.service.js +195 -0
  135. package/dist/services/template.service.js.map +1 -0
  136. package/dist/services/tool-call.service.d.ts +53 -0
  137. package/dist/services/tool-call.service.js +819 -0
  138. package/dist/services/tool-call.service.js.map +1 -0
  139. package/dist/slack/formatters/message.formatter.d.ts +25 -0
  140. package/dist/slack/formatters/message.formatter.js +246 -0
  141. package/dist/slack/formatters/message.formatter.js.map +1 -0
  142. package/dist/slack/slack-bot.d.ts +23 -0
  143. package/dist/slack/slack-bot.js +435 -0
  144. package/dist/slack/slack-bot.js.map +1 -0
  145. package/dist/stderr.logger.d.ts +8 -0
  146. package/dist/stderr.logger.js +26 -0
  147. package/dist/stderr.logger.js.map +1 -0
  148. package/dist/tsconfig.tsbuildinfo +1 -0
  149. package/dist/utils/config-utils.d.ts +15 -0
  150. package/dist/utils/config-utils.js +69 -0
  151. package/dist/utils/config-utils.js.map +1 -0
  152. package/dist/utils/error-utils.d.ts +3 -0
  153. package/dist/utils/error-utils.js +27 -0
  154. package/dist/utils/error-utils.js.map +1 -0
  155. package/dist/utils/math-utils.d.ts +3 -0
  156. package/dist/utils/math-utils.js +10 -0
  157. package/dist/utils/math-utils.js.map +1 -0
  158. package/dist/utils/mcp-installer.d.ts +20 -0
  159. package/dist/utils/mcp-installer.js +199 -0
  160. package/dist/utils/mcp-installer.js.map +1 -0
  161. package/dist/utils/mention-parser.d.ts +18 -0
  162. package/dist/utils/mention-parser.js +136 -0
  163. package/dist/utils/mention-parser.js.map +1 -0
  164. package/dist/utils/simple-security.d.ts +3 -0
  165. package/dist/utils/simple-security.js +20 -0
  166. package/dist/utils/simple-security.js.map +1 -0
  167. package/dist/utils/stdin-utils.d.ts +2 -0
  168. package/dist/utils/stdin-utils.js +87 -0
  169. package/dist/utils/stdin-utils.js.map +1 -0
  170. package/dist/utils/string-utils.d.ts +1 -0
  171. package/dist/utils/string-utils.js +10 -0
  172. package/dist/utils/string-utils.js.map +1 -0
  173. package/dist/utils/template-processor.d.ts +32 -0
  174. package/dist/utils/template-processor.js +188 -0
  175. package/dist/utils/template-processor.js.map +1 -0
  176. package/docs/agent-configuration.md +373 -0
  177. package/docs/agent-registry-strategy.md +348 -0
  178. package/docs/branding-decision-crewx.md +395 -0
  179. package/docs/claude-code-docker-guide.md +264 -0
  180. package/docs/cli-guide.md +295 -0
  181. package/docs/development.md +595 -0
  182. package/docs/guides/agent-best-practices.md +97 -0
  183. package/docs/guides/bug-management.md +600 -0
  184. package/docs/guides/git-bug-reference.md +366 -0
  185. package/docs/mcp-integration.md +187 -0
  186. package/docs/process/development-workflow.md +84 -0
  187. package/docs/roadmap.md +528 -0
  188. package/docs/rules/branch-protection.md +40 -0
  189. package/docs/standards/rc-versioning.md +60 -0
  190. package/docs/standards/report-structure.md +67 -0
  191. package/docs/templates.md +517 -0
  192. package/docs/tools.md +583 -0
  193. package/docs/troubleshooting.md +585 -0
  194. package/package.json +106 -21
  195. package/bin/crewx.js +0 -20
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdin-utils.js","sourceRoot":"","sources":["../../src/utils/stdin-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function capitalizeFirstLetter(str: string): string;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.capitalizeFirstLetter = capitalizeFirstLetter;
4
+ function capitalizeFirstLetter(str) {
5
+ if (!str || str.length === 0) {
6
+ return str;
7
+ }
8
+ return str.charAt(0).toUpperCase() + str.slice(1);
9
+ }
10
+ //# sourceMappingURL=string-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string-utils.js","sourceRoot":"","sources":["../../src/utils/string-utils.ts"],"names":[],"mappings":";;AAIA,sDAKC;AALD,SAAgB,qBAAqB,CAAC,GAAW;IAC/C,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACpD,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { DocumentLoaderService } from '../services/document-loader.service';
2
+ export interface TemplateContext {
3
+ env?: Record<string, string | undefined>;
4
+ options?: string[];
5
+ agent?: {
6
+ id: string;
7
+ name: string;
8
+ provider: string;
9
+ model?: string;
10
+ workingDirectory?: string;
11
+ };
12
+ mode?: 'query' | 'execute';
13
+ messages?: Array<{
14
+ text: string;
15
+ isAssistant: boolean;
16
+ metadata?: Record<string, any>;
17
+ }>;
18
+ platform?: 'slack' | 'cli';
19
+ tools?: {
20
+ list: Array<{
21
+ name: string;
22
+ description: string;
23
+ input_schema: any;
24
+ output_schema?: any;
25
+ }>;
26
+ json: string;
27
+ count: number;
28
+ };
29
+ vars?: Record<string, any>;
30
+ }
31
+ export declare function processDocumentTemplate(template: string, documentLoader: DocumentLoaderService, additionalContext?: TemplateContext): Promise<string>;
32
+ export declare function hasDocumentReferences(template: string): boolean;
@@ -0,0 +1,188 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.processDocumentTemplate = processDocumentTemplate;
37
+ exports.hasDocumentReferences = hasDocumentReferences;
38
+ const Handlebars = __importStar(require("handlebars"));
39
+ async function processDocumentTemplate(template, documentLoader, additionalContext) {
40
+ if (!documentLoader.isInitialized()) {
41
+ if (!additionalContext) {
42
+ return template;
43
+ }
44
+ }
45
+ const context = {
46
+ documents: {},
47
+ env: additionalContext?.env || process.env,
48
+ options: additionalContext?.options || [],
49
+ agent: additionalContext?.agent || {},
50
+ mode: additionalContext?.mode,
51
+ messages: additionalContext?.messages || [],
52
+ platform: additionalContext?.platform,
53
+ tools: additionalContext?.tools,
54
+ vars: additionalContext?.vars || {},
55
+ };
56
+ registerHandlebarsHelpers();
57
+ const pattern = /{{{documents\.([^.}]+)\.([^}]+)}}}/g;
58
+ const matches = [...template.matchAll(pattern)];
59
+ if (matches.length > 0 && documentLoader.isInitialized()) {
60
+ const docNames = Array.from(new Set(matches.map(m => m[1]).filter((name) => !!name)));
61
+ for (const docName of docNames) {
62
+ let content = await documentLoader.getDocumentContent(docName);
63
+ const toc = await documentLoader.getDocumentToc(docName);
64
+ const summary = await documentLoader.getDocumentSummary(docName);
65
+ if (content) {
66
+ try {
67
+ const docTemplate = Handlebars.compile(content, { noEscape: true });
68
+ content = docTemplate(context);
69
+ }
70
+ catch (error) {
71
+ }
72
+ }
73
+ context.documents[docName] = {
74
+ content: content || '',
75
+ toc: toc || '',
76
+ summary: summary || '',
77
+ };
78
+ }
79
+ }
80
+ const compiledTemplate = Handlebars.compile(template, { noEscape: true });
81
+ return compiledTemplate(context);
82
+ }
83
+ function registerHandlebarsHelpers() {
84
+ if (Handlebars.helpers['eq']) {
85
+ return;
86
+ }
87
+ Handlebars.registerHelper('eq', function (a, b) {
88
+ return a === b;
89
+ });
90
+ Handlebars.registerHelper('ne', function (a, b) {
91
+ return a !== b;
92
+ });
93
+ Handlebars.registerHelper('contains', function (array, value) {
94
+ return Array.isArray(array) && array.includes(value);
95
+ });
96
+ Handlebars.registerHelper('and', function (a, b) {
97
+ return a && b;
98
+ });
99
+ Handlebars.registerHelper('or', function (a, b) {
100
+ return a || b;
101
+ });
102
+ Handlebars.registerHelper('not', function (a) {
103
+ return !a;
104
+ });
105
+ Handlebars.registerHelper('json', function (context) {
106
+ return JSON.stringify(context, null, 2);
107
+ });
108
+ Handlebars.registerHelper('truncate', function (text, maxLength) {
109
+ if (!text)
110
+ return '';
111
+ if (text.length <= maxLength)
112
+ return text;
113
+ const remaining = text.length - maxLength;
114
+ return `${text.substring(0, maxLength)} (...+${remaining} chars)`;
115
+ });
116
+ Handlebars.registerHelper('length', function (array) {
117
+ if (Array.isArray(array))
118
+ return array.length;
119
+ if (typeof array === 'string')
120
+ return array.length;
121
+ return 0;
122
+ });
123
+ Handlebars.registerHelper('formatConversation', function (messages, platform, options) {
124
+ const { Logger: NestLogger } = require('@nestjs/common');
125
+ const helperLogger = new NestLogger('FormatConversation');
126
+ const isBlockHelper = options && typeof options.fn === 'function';
127
+ helperLogger.log(`🔧 formatConversation helper called! Mode: ${isBlockHelper ? 'CUSTOM' : 'DEFAULT'}`);
128
+ helperLogger.log(`Messages type: ${typeof messages}, Is array: ${Array.isArray(messages)}, Length: ${messages?.length || 0}`);
129
+ helperLogger.log(`Platform: ${platform}`);
130
+ if (!messages || messages.length === 0) {
131
+ helperLogger.warn(`⚠️ formatConversation: messages empty or undefined, returning empty string`);
132
+ return '';
133
+ }
134
+ let content;
135
+ if (isBlockHelper) {
136
+ helperLogger.log(`📝 Using CUSTOM user template from block`);
137
+ content = options.fn({
138
+ messages,
139
+ platform,
140
+ messagesCount: messages.length
141
+ });
142
+ helperLogger.debug(`📤 Custom template rendered output length: ${content.length} characters`);
143
+ }
144
+ else {
145
+ helperLogger.log(`📦 Using DEFAULT template from .crewx/templates`);
146
+ const fs = require('fs');
147
+ const path = require('path');
148
+ const templatePath = path.join(process.cwd(), '.crewx', 'templates', 'conversation-history-default.hbs');
149
+ let templateContent;
150
+ let templateSource = 'inline-fallback';
151
+ try {
152
+ templateContent = fs.readFileSync(templatePath, 'utf8');
153
+ templateSource = templatePath;
154
+ helperLogger.debug(`✅ Loaded conversation template from: ${templatePath}`);
155
+ helperLogger.debug(`📏 Template content length: ${templateContent.length} characters`);
156
+ helperLogger.debug(`📊 Messages count: ${messages.length}, Platform: ${platform}`);
157
+ helperLogger.debug(`📝 First message sample: ${JSON.stringify(messages[0], null, 2)}`);
158
+ }
159
+ catch (error) {
160
+ helperLogger.warn(`⚠️ Failed to load template from ${templatePath}, using inline fallback`);
161
+ helperLogger.warn(`Error: ${error instanceof Error ? error.message : String(error)}`);
162
+ templateContent = `{{#if messages}}Previous conversation ({{messagesCount}} messages):
163
+ {{#each messages}}
164
+ {{#if isAssistant}}
165
+ **Assistant{{#if metadata.agent_id}} (@{{metadata.agent_id}}){{/if}}**
166
+ {{else}}
167
+ **{{#if metadata.slack}}{{#with metadata.slack}}{{#if user_profile.display_name}}{{user_profile.display_name}}{{else if username}}{{username}}{{else if user_id}}User ({{user_id}}){{else}}User{{/if}}{{/with}}{{else}}User{{/if}}**
168
+ {{/if}}: {{{text}}}
169
+ {{/each}}{{/if}}`;
170
+ }
171
+ const template = Handlebars.compile(templateContent, { noEscape: true });
172
+ content = template({
173
+ messages,
174
+ platform,
175
+ messagesCount: messages.length
176
+ });
177
+ helperLogger.debug(`📤 Default template rendered output length: ${content.length} characters`);
178
+ helperLogger.debug(`📍 Template source: ${templateSource}`);
179
+ }
180
+ const result = `${content}`;
181
+ helperLogger.debug(`📄 Final output (with tags):\n${result}`);
182
+ return result;
183
+ });
184
+ }
185
+ function hasDocumentReferences(template) {
186
+ return /{{{documents\.[^}]+}}}/g.test(template);
187
+ }
188
+ //# sourceMappingURL=template-processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-processor.js","sourceRoot":"","sources":["../../src/utils/template-processor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,373 @@
1
+ # Agent Configuration Guide
2
+
3
+ Complete guide for configuring custom specialist agents in CrewX.
4
+
5
+ ## Quick Start
6
+
7
+ Create a `crewx.yaml` file in your project:
8
+
9
+ ```yaml
10
+ agents:
11
+ - id: "frontend_dev"
12
+ name: "React Expert"
13
+ provider: "claude"
14
+ working_directory: "./src"
15
+ inline:
16
+ type: "agent"
17
+ system_prompt: |
18
+ You are a senior React developer.
19
+ Provide detailed examples and best practices.
20
+ ```
21
+
22
+ > **Note:** While `agents.yaml` is still supported for backward compatibility, `crewx.yaml` is the preferred filename. If both files exist, `crewx.yaml` takes priority.
23
+
24
+ ## Agent Configuration Structure
25
+
26
+ ```yaml
27
+ agents:
28
+ - id: "agent_id" # Required: Unique identifier
29
+ name: "Human Readable Name" # Optional: Display name
30
+ provider: "claude" # Required: AI provider (string or array)
31
+ working_directory: "/path/to/dir" # Optional: Working directory
32
+ options: # Optional: CLI options
33
+ query: # Options for query mode
34
+ - "--add-dir=."
35
+ execute: # Options for execute mode
36
+ - "--add-dir=."
37
+ - "--allowedTools=Edit,Bash"
38
+ inline: # Required: Agent definition
39
+ type: "agent" # Required: Type
40
+ model: "opus" # Optional: Specific model
41
+ system_prompt: | # Required: Instructions
42
+ Your agent's system prompt
43
+ ```
44
+
45
+ ## Provider Configuration
46
+
47
+ ### Single Provider (Fixed)
48
+
49
+ Use a single string to fix the provider:
50
+
51
+ ```yaml
52
+ agents:
53
+ - id: "claude_only"
54
+ provider: "claude" # Always uses Claude, no fallback
55
+ ```
56
+
57
+ ### Multiple Providers (Fallback)
58
+
59
+ Use an array for automatic fallback:
60
+
61
+ ```yaml
62
+ agents:
63
+ - id: "flexible_agent"
64
+ provider: ["claude", "gemini", "copilot"] # Tries in order
65
+ ```
66
+
67
+ **Behavior:**
68
+ - Tries providers in order until one is available
69
+ - If model is specified, uses first provider without fallback
70
+
71
+ ### Provider-Specific Options
72
+
73
+ Configure different options for each provider:
74
+
75
+ ```yaml
76
+ agents:
77
+ - id: "multi_provider"
78
+ provider: ["claude", "gemini", "copilot"]
79
+ options:
80
+ execute:
81
+ claude:
82
+ - "--permission-mode=acceptEdits"
83
+ - "--add-dir=."
84
+ gemini:
85
+ - "--include-directories=."
86
+ copilot:
87
+ - "--add-dir=."
88
+ ```
89
+
90
+ ## Mode-Specific Options
91
+
92
+ ### Query Mode vs Execute Mode
93
+
94
+ **Query Mode** (read-only):
95
+ ```yaml
96
+ options:
97
+ query:
98
+ - "--add-dir=."
99
+ - "--verbose"
100
+ # No file modification tools
101
+ ```
102
+
103
+ **Execute Mode** (file operations):
104
+ ```yaml
105
+ options:
106
+ execute:
107
+ - "--add-dir=."
108
+ - "--allowedTools=Edit,Bash"
109
+ # Can create/modify files
110
+ ```
111
+
112
+ ## Model Selection
113
+
114
+ Specify AI models in configuration or at runtime:
115
+
116
+ ### In Configuration
117
+ ```yaml
118
+ agents:
119
+ - id: "opus_agent"
120
+ provider: "claude"
121
+ inline:
122
+ model: "opus" # Fixed model
123
+ system_prompt: "You are an expert."
124
+ ```
125
+
126
+ ### At Runtime
127
+ ```bash
128
+ # Override model with @agent:model syntax
129
+ crewx query "@claude:haiku quick analysis"
130
+ crewx execute "@gemini:gemini-2.5-flash rapid prototyping"
131
+ ```
132
+
133
+ **Available Models:**
134
+
135
+ **Claude:**
136
+ - `opus` - Most capable, detailed
137
+ - `sonnet` - Balanced performance
138
+ - `haiku` - Fast, concise
139
+ - `claude-sonnet-4-5`
140
+ - `claude-sonnet-4-5-20250929`
141
+
142
+ **Gemini:**
143
+ - `gemini-2.5-pro` - High quality (default)
144
+ - `gemini-2.5-flash` - Fast responses
145
+
146
+ **Copilot:**
147
+ - `gpt-5`
148
+ - `claude-sonnet-4`
149
+ - `claude-sonnet-4.5`
150
+
151
+ ## Working Directory
152
+
153
+ Set the working directory for each agent:
154
+
155
+ ```yaml
156
+ agents:
157
+ - id: "frontend_dev"
158
+ working_directory: "./src/frontend"
159
+
160
+ - id: "backend_dev"
161
+ working_directory: "./src/backend"
162
+
163
+ - id: "full_stack"
164
+ working_directory: "." # Project root
165
+ ```
166
+
167
+ ## Complete Example
168
+
169
+ ```yaml
170
+ agents:
171
+ # Frontend specialist
172
+ - id: "frontend_developer"
173
+ name: "React Expert"
174
+ provider: "claude"
175
+ working_directory: "./src/frontend"
176
+ options:
177
+ query:
178
+ - "--add-dir=."
179
+ - "--verbose"
180
+ execute:
181
+ - "--add-dir=."
182
+ - "--allowedTools=Edit,Bash"
183
+ inline:
184
+ type: "agent"
185
+ model: "sonnet"
186
+ system_prompt: |
187
+ You are a senior frontend developer specializing in React.
188
+
189
+ **Expertise:**
190
+ - React 18+ with TypeScript
191
+ - State management (Redux, Zustand)
192
+ - Component design patterns
193
+ - Performance optimization
194
+
195
+ **Guidelines:**
196
+ - Always use TypeScript strict mode
197
+ - Prefer functional components with hooks
198
+ - Write comprehensive PropTypes/TypeScript types
199
+ - Follow accessibility (a11y) best practices
200
+
201
+ # Backend specialist with fallback
202
+ - id: "backend_developer"
203
+ name: "Backend Expert"
204
+ provider: ["gemini", "claude", "copilot"]
205
+ working_directory: "./src/backend"
206
+ options:
207
+ execute:
208
+ gemini:
209
+ - "--include-directories=."
210
+ - "--yolo"
211
+ claude:
212
+ - "--add-dir=."
213
+ - "--allowedTools=Edit,Bash"
214
+ inline:
215
+ type: "agent"
216
+ system_prompt: |
217
+ You are a backend engineering expert.
218
+
219
+ **Expertise:**
220
+ - RESTful API design
221
+ - Database optimization
222
+ - Authentication & authorization
223
+ - Microservices architecture
224
+
225
+ **Focus:**
226
+ - Security best practices
227
+ - Scalable architecture
228
+ - Error handling and logging
229
+ - API documentation
230
+
231
+ # DevOps specialist
232
+ - id: "devops_engineer"
233
+ name: "DevOps Expert"
234
+ provider: "copilot"
235
+ working_directory: "."
236
+ options:
237
+ query:
238
+ - "--allow-tool=files"
239
+ execute:
240
+ - "--allow-tool=terminal"
241
+ - "--allow-tool=files"
242
+ inline:
243
+ type: "agent"
244
+ system_prompt: |
245
+ You are a DevOps engineer expert in infrastructure and deployment.
246
+
247
+ **Expertise:**
248
+ - Docker and Kubernetes
249
+ - CI/CD pipelines
250
+ - Infrastructure as Code
251
+ - Monitoring and logging
252
+
253
+ **Focus:**
254
+ - Deployment automation
255
+ - Container orchestration
256
+ - Security and compliance
257
+ - Performance monitoring
258
+ ```
259
+
260
+ ## CLI Options Reference
261
+
262
+ ### Common Options
263
+
264
+ **Claude Code:**
265
+ - `--add-dir=PATH` - Add directory to context
266
+ - `--allowedTools=TOOLS` - Allowed tools (e.g., Edit,Bash)
267
+ - `--permission-mode=MODE` - Permission mode (acceptEdits, etc.)
268
+ - `--verbose` - Verbose output
269
+
270
+ **Gemini CLI:**
271
+ - `--include-directories=PATH` - Include directories
272
+ - `--yolo` - Auto-execute without confirmation
273
+ - `--allowed-mcp-server-names=NAME` - Allow MCP server
274
+
275
+ **Copilot CLI:**
276
+ - `--allow-tool=TOOL` - Allow specific tools (files, terminal)
277
+ - `--add-dir=PATH` - Add directory
278
+
279
+ ### Query Mode vs Execute Mode
280
+
281
+ **Query Mode** (read-only):
282
+ - Safe for analysis and reviews
283
+ - No file modifications
284
+ - Use minimal permissions
285
+
286
+ **Execute Mode** (file operations):
287
+ - Can create/modify/delete files
288
+ - Requires appropriate tool permissions
289
+ - Use with caution
290
+
291
+ ## Creating Agents via CLI
292
+
293
+ Use the `@crewx` assistant to create agents:
294
+
295
+ ```bash
296
+ # Create a Python expert
297
+ crewx execute "@crewx Create a Python expert agent. ID 'python_expert', use claude sonnet. Specializes in code review, optimization, and debugging."
298
+
299
+ # Create a React specialist
300
+ crewx execute "@crewx Create a React specialist agent with TypeScript expertise"
301
+
302
+ # Create a DevOps agent
303
+ crewx execute "@crewx Create a DevOps agent for Docker and Kubernetes"
304
+
305
+ # Create a security analyst
306
+ crewx execute "@crewx Create a security analyst agent"
307
+ ```
308
+
309
+ The `@crewx` assistant understands your request and creates a complete agent configuration.
310
+
311
+ ## Best Practices
312
+
313
+ ### 1. Specialize Your Agents
314
+ Create focused agents for specific domains:
315
+ - Frontend, backend, DevOps
316
+ - Testing, security, documentation
317
+ - Language-specific (Python, TypeScript, Go)
318
+
319
+ ### 2. Use Appropriate Models
320
+ - **Haiku/Flash**: Quick answers, simple tasks
321
+ - **Sonnet/Pro**: Balanced, most use cases
322
+ - **Opus**: Complex analysis, detailed work
323
+
324
+ ### 3. Set Working Directories
325
+ Limit agent scope to relevant directories:
326
+ ```yaml
327
+ working_directory: "./src/specific-module"
328
+ ```
329
+
330
+ ### 4. Configure Mode-Specific Options
331
+ Different options for query vs execute:
332
+ ```yaml
333
+ options:
334
+ query: # Read-only analysis
335
+ - "--add-dir=."
336
+ execute: # File modifications
337
+ - "--add-dir=."
338
+ - "--allowedTools=Edit"
339
+ ```
340
+
341
+ ### 5. Use Provider Fallback
342
+ Ensure availability with multiple providers:
343
+ ```yaml
344
+ provider: ["claude", "gemini", "copilot"]
345
+ ```
346
+
347
+ ### 6. Write Clear System Prompts
348
+ Include:
349
+ - Role and expertise
350
+ - Specific guidelines
351
+ - Expected output format
352
+ - Constraints and limitations
353
+
354
+ ## Validation
355
+
356
+ Check your configuration:
357
+
358
+ ```bash
359
+ crewx doctor
360
+ ```
361
+
362
+ This validates:
363
+ - YAML syntax
364
+ - Required fields
365
+ - Provider availability
366
+ - Working directory existence
367
+ - Option compatibility
368
+
369
+ ## Advanced Configuration
370
+
371
+ For advanced features like documents and templates, see:
372
+ - [Template System Guide](templates.md)
373
+ - [Tool System Guide](tools.md)