chati-dev 3.2.1 → 3.2.3
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/README.md
CHANGED
|
@@ -80,12 +80,16 @@ The wizard guides you through 4 steps:
|
|
|
80
80
|
|
|
81
81
|
Open your AI CLI in the same project directory, then type:
|
|
82
82
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
83
|
+
| CLI | Command | Notes |
|
|
84
|
+
|-----|---------|-------|
|
|
85
|
+
| **Claude Code** | `/chati` | Slash command (native) |
|
|
86
|
+
| **Gemini CLI** | `/chati` | TOML custom command |
|
|
87
|
+
| **Codex CLI** | `$chati` | Skill invocation (Codex uses `$` for skills, not `/`) |
|
|
86
88
|
|
|
87
89
|
The orchestrator loads your session, detects where you left off, and routes you to the right agent. You stay inside the system until you explicitly exit.
|
|
88
90
|
|
|
91
|
+
> **Codex CLI note:** You can also just describe what you want (e.g., "start chati" or "plan my project") and Codex will auto-invoke the skill based on its description.
|
|
92
|
+
|
|
89
93
|
### 3. Follow the pipeline
|
|
90
94
|
|
|
91
95
|
The agents guide you through each phase:
|
|
@@ -108,10 +112,13 @@ npx chati-dev status --watch # Auto-refresh every 5s
|
|
|
108
112
|
|
|
109
113
|
### Exit & Resume
|
|
110
114
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
+
| CLI | Exit | Resume |
|
|
116
|
+
|-----|------|--------|
|
|
117
|
+
| **Claude Code** | `/chati exit` | `/chati` |
|
|
118
|
+
| **Gemini CLI** | `/chati exit` | `/chati` |
|
|
119
|
+
| **Codex CLI** | `$chati exit` | `$chati` |
|
|
120
|
+
|
|
121
|
+
The system saves your full session state — pipeline position, current agent, decisions, and context. You resume exactly where you left off, even across days or machines.
|
|
115
122
|
|
|
116
123
|
---
|
|
117
124
|
|
|
@@ -127,7 +134,7 @@ npx chati-dev status --watch # Auto-refresh every 5s
|
|
|
127
134
|
| **Multi-Terminal** | Autonomous agents run in parallel in separate terminals. Detail, Architect, and UX agents work simultaneously |
|
|
128
135
|
| **Memory System** | The system learns from mistakes. Gotchas are captured automatically and recalled when relevant |
|
|
129
136
|
| **Execution Profiles** | Three profiles — explore (read-only), guided (default), autonomous (gate >= 90%) — with safety net and circuit breaker |
|
|
130
|
-
| **IDE-Agnostic** | Works with Claude Code, VS Code, Cursor, Gemini CLI, and AntiGravity |
|
|
137
|
+
| **IDE-Agnostic** | Works with Claude Code, VS Code, Cursor, Gemini CLI, Codex CLI, and AntiGravity |
|
|
131
138
|
| **4 Languages** | Interface supports English, Portuguese, Spanish, and French. Artifacts are always generated in English |
|
|
132
139
|
| **Supply Chain Security** | Every file is cryptographically signed (Ed25519). Tampered packages are blocked on install |
|
|
133
140
|
|
|
@@ -203,7 +210,7 @@ The system starts in `guided` mode. Transition to `autonomous` requires both QA
|
|
|
203
210
|
### How the Pipeline Works
|
|
204
211
|
|
|
205
212
|
```
|
|
206
|
-
You
|
|
213
|
+
You activate the orchestrator (/chati or $chati)
|
|
207
214
|
│
|
|
208
215
|
▼
|
|
209
216
|
┌──────────────────────────────────────────────┐
|
|
@@ -280,13 +287,14 @@ The system is governed by a **19-article Constitution** that enforces agent beha
|
|
|
280
287
|
|
|
281
288
|
## Supported IDEs
|
|
282
289
|
|
|
283
|
-
| IDE | How it connects |
|
|
284
|
-
|
|
285
|
-
| **Claude Code** | `.claude/commands/chati.md` → orchestrator |
|
|
286
|
-
| **
|
|
287
|
-
| **
|
|
288
|
-
| **
|
|
289
|
-
| **
|
|
290
|
+
| IDE | How it connects | Activation |
|
|
291
|
+
|-----|----------------|------------|
|
|
292
|
+
| **Claude Code** | `.claude/commands/chati.md` → orchestrator | `/chati` |
|
|
293
|
+
| **Gemini CLI** | `.gemini/commands/chati.toml` → orchestrator | `/chati` |
|
|
294
|
+
| **Codex CLI** | `.agents/skills/chati/SKILL.md` → orchestrator | `$chati` |
|
|
295
|
+
| **VS Code** | `.vscode/chati.md` → orchestrator | Extension-dependent |
|
|
296
|
+
| **Cursor** | `.cursor/rules/chati.md` → orchestrator | Extension-dependent |
|
|
297
|
+
| **AntiGravity** | Platform agent config → orchestrator | Platform-dependent |
|
|
290
298
|
|
|
291
299
|
All IDEs use a thin router file that points to the same orchestrator. Your project works the same regardless of which IDE you use.
|
|
292
300
|
|
|
@@ -323,23 +331,27 @@ All IDEs use a thin router file that points to the same orchestrator. Your proje
|
|
|
323
331
|
|
|
324
332
|
### Inside an Active Session
|
|
325
333
|
|
|
326
|
-
|
|
|
327
|
-
|
|
328
|
-
|
|
|
329
|
-
| `/chati status` |
|
|
330
|
-
| `/chati help` |
|
|
331
|
-
| `/chati resume` |
|
|
332
|
-
| `/chati exit` |
|
|
334
|
+
| Action | Claude Code / Gemini | Codex CLI |
|
|
335
|
+
|--------|---------------------|-----------|
|
|
336
|
+
| Start or resume session | `/chati` | `$chati` |
|
|
337
|
+
| Show pipeline progress | `/chati status` | `$chati status` |
|
|
338
|
+
| Show available commands | `/chati help` | `$chati help` |
|
|
339
|
+
| Resume from continuation | `/chati resume` | `$chati resume` |
|
|
340
|
+
| Save session and exit | `/chati exit` | `$chati exit` |
|
|
333
341
|
|
|
334
342
|
---
|
|
335
343
|
|
|
336
344
|
## Project Structure
|
|
337
345
|
|
|
346
|
+
The structure below shows the Claude Code layout (default). Gemini and Codex get equivalent files in their native locations.
|
|
347
|
+
|
|
338
348
|
```
|
|
339
349
|
your-project/
|
|
340
350
|
├── .chati/
|
|
341
351
|
│ ├── session.yaml # Session state (auto-managed, gitignored)
|
|
342
352
|
│ └── memories/ # Memory storage (gitignored)
|
|
353
|
+
│
|
|
354
|
+
│── # ─── Claude Code ───────────────────
|
|
343
355
|
├── .claude/
|
|
344
356
|
│ ├── commands/
|
|
345
357
|
│ │ └── chati.md # Thin router → orchestrator
|
|
@@ -350,7 +362,26 @@ your-project/
|
|
|
350
362
|
│ ├── protocols.md # Universal protocols
|
|
351
363
|
│ └── quality.md # Quality standards
|
|
352
364
|
├── CLAUDE.md # Project context (auto-generated)
|
|
353
|
-
├── CLAUDE.local.md # Runtime state (gitignored)
|
|
365
|
+
├── CLAUDE.local.md # Runtime state / session lock (gitignored)
|
|
366
|
+
│
|
|
367
|
+
│── # ─── Gemini CLI (when selected) ────
|
|
368
|
+
├── .gemini/
|
|
369
|
+
│ ├── commands/
|
|
370
|
+
│ │ └── chati.toml # TOML command → orchestrator
|
|
371
|
+
│ ├── context/ # 4 framework context files (@imported by GEMINI.md)
|
|
372
|
+
│ ├── hooks/ # 6 hooks (BeforeModel, BeforeTool, PreCompress)
|
|
373
|
+
│ ├── settings.json # Hook configuration
|
|
374
|
+
│ └── session-lock.md # Runtime state / session lock (gitignored)
|
|
375
|
+
├── GEMINI.md # Project context with @import chain
|
|
376
|
+
│
|
|
377
|
+
│── # ─── Codex CLI (when selected) ─────
|
|
378
|
+
├── .agents/skills/chati/
|
|
379
|
+
│ └── SKILL.md # Skill definition → orchestrator
|
|
380
|
+
├── .codex/rules/ # Starlark execution policies (constitution-guard, read-protection)
|
|
381
|
+
├── AGENTS.md # Project context with inline governance
|
|
382
|
+
├── AGENTS.override.md # Runtime state / session lock (gitignored)
|
|
383
|
+
│
|
|
384
|
+
│── # ─── Framework ─────────────────────
|
|
354
385
|
├── chati.dev/
|
|
355
386
|
│ ├── orchestrator/ # Main orchestrator
|
|
356
387
|
│ ├── agents/ # 13 agent definitions
|
|
@@ -364,8 +395,8 @@ your-project/
|
|
|
364
395
|
│ ├── schemas/ # 5 JSON schemas
|
|
365
396
|
│ ├── intelligence/ # PRISM, RECALL, COMPASS specs
|
|
366
397
|
│ ├── domains/ # Per-agent and per-workflow configs
|
|
367
|
-
│ ├── hooks/ # 6 Claude
|
|
368
|
-
│ ├── context/ # Context files (deployed
|
|
398
|
+
│ ├── hooks/ # 6 shared hooks (used by Claude + Gemini)
|
|
399
|
+
│ ├── context/ # Context files (deployed per provider)
|
|
369
400
|
│ ├── frameworks/ # Decision heuristics
|
|
370
401
|
│ ├── quality-gates/ # Planning & implementation gates
|
|
371
402
|
│ ├── patterns/ # Elicitation patterns
|
package/framework/config.yaml
CHANGED
package/package.json
CHANGED
|
@@ -170,6 +170,15 @@ function buildReplacementConfig(provider) {
|
|
|
170
170
|
{ pattern: /Update CLAUDE\.md/g, replacement: `Update ${contextFile}` },
|
|
171
171
|
];
|
|
172
172
|
|
|
173
|
+
// Codex CLI uses $chati for skill invocation, not /chati.
|
|
174
|
+
// Lookbehind prevents replacing /chati in file paths (e.g., orchestrator/chati.md).
|
|
175
|
+
if (provider === 'codex') {
|
|
176
|
+
patterns.push({
|
|
177
|
+
pattern: /(?<![/\w])\/chati/g,
|
|
178
|
+
replacement: '$$chati',
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
|
|
173
182
|
return { strings, patterns };
|
|
174
183
|
}
|
|
175
184
|
|
|
@@ -482,13 +482,39 @@ export function generateAllGeminiHooks() {
|
|
|
482
482
|
/**
|
|
483
483
|
* Generate .gemini/settings.json content with hook configuration.
|
|
484
484
|
*
|
|
485
|
+
* Gemini CLI expects hooks as an object keyed by event name, where each
|
|
486
|
+
* event contains an array of hook groups. Each group has an optional
|
|
487
|
+
* `matcher` and a `hooks` array with `{ name, type, command }` entries.
|
|
488
|
+
*
|
|
485
489
|
* @returns {string} JSON string for .gemini/settings.json
|
|
486
490
|
*/
|
|
487
491
|
export function generateGeminiSettings() {
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
+
// Group hooks by event
|
|
493
|
+
const eventGroups = {};
|
|
494
|
+
for (const [name, config] of Object.entries(HOOK_MAP)) {
|
|
495
|
+
if (!eventGroups[config.event]) {
|
|
496
|
+
eventGroups[config.event] = [];
|
|
497
|
+
}
|
|
498
|
+
eventGroups[config.event].push({
|
|
499
|
+
name,
|
|
500
|
+
type: 'command',
|
|
501
|
+
command: `node .gemini/hooks/${name}.js`,
|
|
502
|
+
description: config.description,
|
|
503
|
+
});
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
// Build the settings object: each event → array of hook groups
|
|
507
|
+
const hooks = {};
|
|
508
|
+
for (const [event, hookList] of Object.entries(eventGroups)) {
|
|
509
|
+
// Tool events (BeforeTool) use matcher; lifecycle events don't
|
|
510
|
+
const isToolEvent = event.includes('Tool');
|
|
511
|
+
hooks[event] = [
|
|
512
|
+
{
|
|
513
|
+
...(isToolEvent ? { matcher: '.*' } : {}),
|
|
514
|
+
hooks: hookList,
|
|
515
|
+
},
|
|
516
|
+
];
|
|
517
|
+
}
|
|
492
518
|
|
|
493
519
|
return JSON.stringify({ hooks }, null, 2) + '\n';
|
|
494
520
|
}
|