@chiendt/ack-cli 1.0.0-dev.1 → 1.0.1

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
@@ -1,566 +1,143 @@
1
- # AckKit Config UI
1
+ # ACK CLI
2
2
 
3
- Command-line tool and web dashboard for managing AckKit projects.
3
+ `ack` is the command-line tool for bootstrapping, updating, and managing **AckKit** projects — curated kits of Claude Code skills, agents, commands, and hooks.
4
4
 
5
- **Version**: 1.17.0
5
+ [![npm](https://img.shields.io/npm/v/@chiendt/ack-cli.svg)](https://www.npmjs.com/package/@chiendt/ack-cli)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](./LICENSE)
6
7
 
7
- ## Overview
8
+ ---
8
9
 
9
- AckKit Config UI (`ack`) provides both CLI and web dashboard for managing AckKit projects. It is built with Bun, TypeScript, and React for development, while the published CLI runs on plain Node.js so end users do not need Bun installed.
10
+ ## What you get
10
11
 
11
- **Key Features:**
12
- - **CLI Commands (16)**: new, init, config, projects, setup, skills, agents, commands, migrate, doctor, versions, update, uninstall, watch, content, easter-egg
13
- - **Web Dashboard**: Interactive React UI via `ack config ui` for configuration and project management
14
- - **Hook Diagnostics Dashboard**: Inspect recent Claude hook activity and failures from `ack config` across global and project scopes
15
- - **Projects Registry**: Centralized registry at `~/.ack/projects.json` with file locking
16
- - **Skill Installation**: Install AckKit skills to other coding agents (Cursor, Codex, etc.)
17
- - **Multi-tier Authentication**: gh CLI → env vars → keychain → prompt fallback
18
- - **Smart Merging**: Conflict detection with user customization preservation
19
- - **Skills Migration**: Auto-detects and migrates skills structure changes
20
- - **Offline Installation**: From local archives or directories
21
- - **Security**: Path traversal protection, symlink validation, UNC path protection
22
- - **Cross-Platform**: macOS, Linux, Windows with platform-specific optimizations
23
- - **Update Notifications**: Intelligent 7-day cache for version checks
24
-
25
- ## Documentation
26
-
27
- Comprehensive documentation in `/docs`:
28
-
29
- - **[Codebase Summary](./docs/codebase-summary.md)** - Overview, structure, key components
30
- - **[Project Overview & PDR](./docs/project-overview-pdr.md)** - Requirements, features, roadmap
31
- - **[System Architecture](./docs/system-architecture.md)** - Architecture diagrams, data flow
32
- - **[Reconciliation Architecture](./docs/reconciliation-architecture.md)** - `ack migrate` RECONCILE → EXECUTE → REPORT design
33
- - **[Code Standards](./docs/code-standards.md)** - Coding conventions, best practices
34
- - **[Project Roadmap](./docs/project-roadmap.md)** - Release timeline, feature status
35
- - **[Deployment Guide](./docs/deployment-guide.md)** - Release procedures
36
- - **[ck watch](./docs/ck-watch.md)** - GitHub issue monitoring daemon
37
- - **[ck content](./docs/ck-content.md)** - Automated content generation from git activity
38
-
39
- ## Prerequisites
40
-
41
- Before using ACK CLI, you need to:
42
-
43
- 1. **Purchase a AckKit Starter Kit** from [AckKit.cc](https://AckKit.cc)
44
- 2. **Get Repository Access**: After purchase, you'll receive access to the private GitHub repository containing your kit
45
- 3. **Create a GitHub Personal Access Token** (PAT) with `repo` scope to download releases
46
-
47
- Without a purchased kit and repository access, the CLI will not be able to download any project templates.
12
+ - **One command to bootstrap** a Claude-ready project from a kit (engineer, QA, marketing).
13
+ - **Idempotent installs and updates** your customizations are preserved across upgrades.
14
+ - **Web dashboard** for managing skills, agents, commands, and hooks (`ack config ui`).
15
+ - **Multi-provider migration** move config between Claude Code, Cursor, Codex, Gemini CLI, and more.
16
+ - **Built-in doctor** with auto-fix for the most common setup problems.
48
17
 
49
18
  ## Installation
50
19
 
51
- The ACK CLI is published on npm at [npmjs.com/package/@chiendt/ack-cli](https://www.npmjs.com/package/@chiendt/ack-cli).
52
-
53
- End-user runtime note: global installs from `npm`, `pnpm`, `yarn`, or `bun` all execute the packaged Node.js CLI. Bun is optional for users and only needed for local ACK CLI development workflows.
54
-
55
- ### Using npm (Recommended)
20
+ The CLI is published on npm at [`@chiendt/ack-cli`](https://www.npmjs.com/package/@chiendt/ack-cli). Pick one:
56
21
 
57
22
  ```bash
58
23
  npm install -g @chiendt/ack-cli
59
- ```
60
-
61
- ### Using Bun
62
-
63
- ```bash
64
- bun add -g @chiendt/ack-cli
65
- ```
66
-
67
- ### Using Yarn
68
-
69
- ```bash
70
- yarn global add @chiendt/ack-cli
71
- ```
72
-
73
- ### Using pnpm
74
-
75
- ```bash
76
24
  pnpm add -g @chiendt/ack-cli
25
+ yarn global add @chiendt/ack-cli
26
+ bun add -g @chiendt/ack-cli
77
27
  ```
78
28
 
79
- After installation, verify it's working:
29
+ Verify:
80
30
 
81
31
  ```bash
82
32
  ack --version
83
33
  ```
84
34
 
85
- ## Usage
86
-
87
- ### Discoverability Quick Start
88
-
89
- ```bash
90
- # Top-level command discovery
91
- ack --help
92
-
93
- # Open config dashboard immediately
94
- ack config
35
+ > **Requirements:** Node.js ≥ 18, [GitHub CLI](https://cli.github.com/) (`gh`) for kit downloads.
95
36
 
96
- # Expose the dashboard intentionally to your LAN/Tailscale
97
- ack config --host 0.0.0.0 --no-open
98
-
99
- # Command-level help (recommended)
100
- ack config --help
101
- ack skills --help
102
- ack agents --help
103
- ack commands --help
104
- ack migrate --help
105
- ```
106
-
107
- ### Config Dashboard Access
108
-
109
- By default, `ack config` binds the dashboard to `127.0.0.1` for local-only access.
37
+ ## Authentication
110
38
 
111
- Use `--host` when you intentionally want remote access from another device on the same trusted network:
39
+ AckKit kits live in private GitHub repos. Authenticate once with the GitHub CLI:
112
40
 
113
41
  ```bash
114
- # Bind to all interfaces
115
- ack config --host 0.0.0.0 --no-open
116
-
117
- # Bind to a specific interface or hostname
118
- ack config --host 100.88.12.4 --no-open
119
- ack config --host dashboard.local --no-open
42
+ gh auth login
43
+ # choose: GitHub.com → HTTPS → Login with a web browser
120
44
  ```
121
45
 
122
- The dashboard still enforces same-origin browser access. Remote access works when you open the UI from the same host/origin that reaches the server, instead of relying on a hardcoded IP allowlist.
46
+ > Don't use *"Paste an authentication token"* OAuth via web browser is the supported path. The CLI reads `gh`'s token automatically; tokens are stored in your OS keychain.
123
47
 
124
- ### Create New Project
48
+ ## Quick start
125
49
 
126
50
  ```bash
127
- # Interactive mode
128
- ack new
129
-
130
- # With options
131
- ack new --dir my-project --kit engineer
132
-
133
- # Show beta versions
134
- ack new --beta
135
-
136
- # With exclude patterns
137
- ack new --exclude "*.log" --exclude "temp/**"
138
-
139
- # Optional packages (OpenCode, Gemini)
140
- ack new --opencode --gemini
141
-
142
- # Install skills dependencies (Python, Node packages, system tools)
143
- ack new --install-skills
144
-
145
- # Command prefix (/ck: namespace to avoid conflicts)
146
- ack new --prefix
147
-
148
- # Offline installation (from local archive or directory)
149
- ack new --archive ~/downloads/engineer-v1.16.0.zip
150
- ack new --kit-path ~/extracted-kit/
151
-
152
- # Direct repo downloads are also supported
153
- ack new --archive ~/downloads/AckKit-engineer-main.zip
154
- ack new --kit-path ~/downloads/AckKit-engineer-main/
155
- ```
51
+ # Bootstrap a new project from a kit
52
+ ack new --kit engineer
156
53
 
157
- **Flags:**
158
- - `--install-skills`: Auto-install Python packages, system tools (FFmpeg, ImageMagick), Node.js packages
159
- - `--prefix`: Move commands to /ck: namespace (/plan → /ck:plan)
160
- - `--beta`: Show pre-release versions in selection
161
- - `--opencode/--gemini`: Install optional packages
162
- - `--archive <path>`: Use local archive (zip/tar.gz) instead of downloading
163
- - `--kit-path <path>`: Use local kit directory instead of downloading
164
-
165
- `--archive` and `--kit-path` both accept direct repo downloads with a single wrapper directory, including GitHub "Download ZIP" archives and extracted repo folders that still contain `AckKit-engineer-main/` or similar at the top level.
166
-
167
- ### Initialize or Update Project
168
-
169
- **Note:** Run from project root.
170
-
171
- ```bash
172
- # Interactive mode
54
+ # Initialize / update an existing project
173
55
  ack init
174
56
 
175
- # Non-interactive mode with sensible defaults
176
- ack init --yes
177
- ack init -y
178
-
179
- # Combine with other flags
180
- ack init -g --kit engineer -y
181
-
182
- # With options
183
- ack init --kit engineer --beta
184
-
185
- # Global mode (platform-specific paths)
186
- ack init --global
187
-
188
- # Fresh installation (⚠️ DESTRUCTIVE - removes ALL customizations)
189
- ack init --fresh
190
-
191
- # With exclude patterns and prefix
192
- ack init --exclude "*.local" --prefix
193
-
194
- # Offline installation (from local archive or directory)
195
- ack init --archive ~/downloads/engineer-v1.16.0.zip
196
- ack init --kit-path ~/extracted-kit/
197
-
198
- # Direct repo downloads are also supported
199
- ack init --archive ~/downloads/AckKit-engineer-main.zip
200
- ack init --kit-path ~/downloads/AckKit-engineer-main/
201
- ```
202
-
203
- **Flags:**
204
- - `--yes/-y`: Non-interactive mode with sensible defaults (skip all prompts)
205
- - `--global/-g`: Use platform-specific config (macOS/Linux: ~/.claude, Windows: %USERPROFILE%\.claude)
206
- - `--fresh`: Clean reinstall, removes .claude directory (requires "yes" confirmation)
207
- - `--beta`: Show pre-release versions
208
- - `--prefix`: Apply /ck: namespace to commands
209
- - `--archive <path>`: Use local archive (zip/tar.gz) instead of downloading
210
- - `--kit-path <path>`: Use local kit directory instead of downloading
211
-
212
- `--archive` and `--kit-path` both accept direct repo downloads with a single wrapper directory, including GitHub "Download ZIP" archives and extracted repo folders that still contain `AckKit-engineer-main/` or similar at the top level.
213
-
214
- **Default Behavior with `-y` Flag:**
215
-
216
- | Prompt | Default |
217
- |--------|---------|
218
- | Select AckKit | engineer (first option) |
219
- | Target directory | Current directory (`.`) |
220
- | Version selection | Latest stable release |
221
- | Google Gemini setup | Skip |
222
- | Other optional features | Skip |
223
-
224
- ### Update CLI
225
-
226
- Keep the ACK CLI up to date:
227
-
228
- ```bash
229
- # Check for CLI updates
230
- ack update --check
231
-
232
- # Update to latest version
233
- ack update
234
-
235
- # Update to specific version
236
- ack update --version 1.17.0
237
-
238
- # Update to beta / skip confirmation
239
- ack update --beta
240
- ack update --yes
241
- ```
242
-
243
- The CLI notifies you when updates are available via `ack --version`.
244
-
245
- **Skills Migration:**
246
- - Auto-detects structure changes (flat → categorized)
247
- - Preserves customizations (SHA-256 hashing)
248
- - Creates backup before migration
249
- - Rollback on failure
250
-
251
- ### List Available Versions
252
-
253
- ```bash
254
- # Show all available versions for all kits
255
- ack versions
256
-
257
- # Filter by specific kit
258
- ack versions --kit engineer
259
- ack versions --kit marketing
260
-
261
- # Show more versions (default: 30)
262
- ack versions --limit 50
263
-
264
- # Include prereleases and drafts
265
- ack versions --all
266
- ```
267
-
268
- ### Diagnostics & Doctor
269
-
270
- ```bash
271
- # Full health check (default)
272
- ack doctor
273
-
274
- # Verbose mode with execution timing and command details
275
- ack doctor --verbose
276
-
277
- # Generate shareable diagnostic report (prompts for gist upload)
278
- ack doctor --report
57
+ # Open the web dashboard
58
+ ack config
279
59
 
280
- # Auto-fix all fixable issues
60
+ # Health check + auto-fix
281
61
  ack doctor --fix
282
-
283
- # CI mode: no prompts, exit 1 on failures
284
- ack doctor --check-only
285
-
286
- # Machine-readable JSON output
287
- ack doctor --json
288
-
289
- # Combine flags
290
- ack doctor --verbose --check-only --json
291
- ack doctor --verbose --fix
292
62
  ```
293
63
 
294
- **Health Checks:**
295
- - **System**: Node.js, npm, Python, pip, Claude CLI, git, gh CLI
296
- - **AckKit**: Global/project installation, versions, skills, skill listing budget, duplicate skill inventory
297
- - **Auth**: GitHub CLI authentication, repository access
298
- - **Project**: package.json, node_modules, lock files
299
- - **Modules**: Dynamic skill dependency resolution
300
-
301
- **Auto-Fix Capabilities:**
302
- | Issue | Fix Action |
303
- |-------|------------|
304
- | Missing dependencies | Install via package manager |
305
- | Missing gh auth | Run `gh auth login` |
306
- | Corrupted node_modules | Reinstall dependencies |
307
- | Missing global install | Run `ack init --global` |
308
- | Missing skill deps | Install in skill directory |
309
- | Missing/low Engineer skill listing budget | Ensure computed `skillListingBudgetFraction` and a valid AckKit-recommended `skillListingMaxDescChars` ceiling in project settings |
64
+ Run `ack --help` for the full command list, or `ack <command> --help` for any one. The full machine-readable command reference is at [`docs/cli-reference.md`](./docs/cli-reference.md).
310
65
 
311
- `ack doctor` never writes `skillOverrides`, hides skills, or deletes duplicate skills automatically. It reports existing `skillOverrides` and inventory issues so all active project/global skills can stay user-invocable while listing pressure is managed through 200k-context-floor project settings and bounded descriptions.
66
+ ## Available kits
312
67
 
313
- **Exit Codes:**
314
- - `0`: All checks pass or issues fixed
315
- - `1`: Failures detected (only with `--check-only`)
68
+ | Kit | Slash prefix | Repo | Description |
69
+ |-------------|--------------|-----------------------------------|------------------------------------------------------------|
70
+ | `engineer` | `/ck:` | `chiendt1108/ack-engineer` | Engineering toolkit for building with Claude |
71
+ | `marketing` | `/mkt:` | `chiendt1108/claudekit-marketing` | Content automation: campaigns, social, analytics |
72
+ | `fqc-qa` | `/fqc:` | `chiendt1108/ack-fqc-qa` | QA: test design, debugging, security, scenario coverage |
316
73
 
317
- > **Note:** `ack diagnose` is deprecated. Use `ack doctor` instead.
74
+ Kits are sold as part of [AckKit](https://AckKit.cc). Use `ack versions --kit <name>` to see released versions.
318
75
 
319
- ### Uninstall
76
+ ## Common workflows
320
77
 
321
- Remove AckKit installations from your system:
78
+ ### Create a project
322
79
 
323
80
  ```bash
324
- ack uninstall # Interactive mode - prompts for scope and confirmation
325
- ack uninstall --local # Uninstall only local installation (current project)
326
- ack uninstall --global # Uninstall only global installation (~/.claude/)
327
- ack uninstall -g --kit marketing # Remove only global Marketing kit
328
- ack uninstall -l -y # Local only, skip confirmation
329
- ack uninstall -g -y # Global only, skip confirmation
330
- ack uninstall --yes # Non-interactive - skip confirmation (for scripts)
81
+ ack new # interactive
82
+ ack new --kit engineer --yes # non-interactive
83
+ ack new --kit fqc-qa --prefix qa # custom slash prefix /qa:
331
84
  ```
332
85
 
333
- **Scope Selection:**
334
- - When both local and global installations exist, you'll be prompted to choose:
335
- - **Local only**: Remove from current project (`.claude/`)
336
- - **Global only**: Remove from user directory (`~/.claude/`)
337
- - **Both**: Remove all AckKit installations
338
- - When multiple kits are installed in the selected scope, interactive uninstall prompts for:
339
- - **Marketing kit only** or **Engineer kit only**: Remove one kit and preserve the other
340
- - **All AckKit kits**: Remove the full selected installation scope
341
- - Use `--local` or `--global` flags to skip the prompt
342
- - Use `--kit engineer` or `--kit marketing` to skip the kit prompt
343
-
344
- **What it does:**
345
- - Detects local `.claude` directory in current project
346
- - Detects global `~/.claude` AckKit installation
347
- - Shows paths before deletion
348
- - Requires confirmation (unless `--yes` flag)
349
- - Removes AckKit subdirectories (`commands/`, `agents/`, `skills/`, `workflows/`, `hooks/`, `metadata.json`)
350
- - **Preserves user configs** like `settings.json`, `settings.local.json`, and `CLAUDE.md`
351
-
352
- **Note:** Only removes valid AckKit installations (with metadata.json). Regular `.claude` directories from Claude Desktop are not affected.
353
-
354
- ### Watch GitHub Issues (`ack watch`)
355
-
356
- Autonomous daemon that monitors GitHub issues, analyzes them with Claude, generates plans, and creates PRs.
86
+ ### Update an existing project
357
87
 
358
88
  ```bash
359
- # Start watching (single repo)
360
- ack watch
361
-
362
- # Dry-run mode (no posts/PRs)
363
- ack watch --dry-run
364
-
365
- # Custom poll interval (ms)
366
- ack watch --interval 60000
367
-
368
- # Force restart (clear state)
369
- ack watch --force
370
-
371
- # Verbose logging
372
- ack watch --verbose
89
+ ack init # update to latest, preserve your customizations
90
+ ack init --fresh # ⚠️ destructive: wipe and reinstall
373
91
  ```
374
92
 
375
- **Features:** issue lifecycle management (10 statuses), Claude-powered brainstorming/planning, automatic PR creation, rate limiting (persisted across restarts), maintainer reply filtering, processedIssues TTL, optional git worktree isolation per issue, multi-repo support, graceful shutdown.
93
+ `--fresh` is destructive. `--force` is **not** a fresh install it only skips prompts.
376
94
 
377
- **Config:** `.ck.json` under `watch` key. See [docs/ck-watch.md](./docs/ck-watch.md) for full configuration reference.
378
-
379
- ### Content Generation (`ack content`)
380
-
381
- Daemon that scans git activity (commits, PRs, tags), generates social media content with Claude, and publishes to X/Twitter and Facebook.
95
+ ### Update the CLI itself
382
96
 
383
97
  ```bash
384
- # Interactive setup wizard
385
- ack content setup
386
-
387
- # Start daemon
388
- ack content start
389
-
390
- # Check status
391
- ack content status
392
-
393
- # View logs
394
- ack content logs
395
-
396
- # Queue manual content
397
- ack content queue
398
-
399
- # Review workflow
400
- ack content approve <id>
401
- ack content reject <id>
402
-
403
- # Dry-run / verbose
404
- ack content start --dry-run
405
- ack content start --verbose
98
+ ack update --check # check for newer CLI
99
+ ack update # install latest stable
100
+ ack update --dev # install latest @dev prerelease
406
101
  ```
407
102
 
408
- **Features:** 11-phase pipeline (scan → filter → classify → context → create → validate → review → photo → publish → engage → analyze), noise filtering, context caching (24h TTL), content validation, photo generation, 3 review modes (auto/manual/hybrid), quiet hours scheduling, engagement tracking, SQLite database, platform-specific adapters.
409
-
410
- **Config:** `.ck.json` under `content` key. See [docs/ck-content.md](./docs/ck-content.md) for full configuration reference.
411
-
412
- ### Other Commands
103
+ ### Health check
413
104
 
414
105
  ```bash
415
- # Show CLI version (shows local + global kit versions)
416
- ack --version
417
-
418
- # Show help
419
- ack --help
420
- ack -h
421
-
422
- # Command-specific help
423
- ack new --help
424
- ack init --help
425
- ack config --help
426
- ack skills --help
427
- ack versions --help
106
+ ack doctor # full health check
107
+ ack doctor --fix # auto-repair fixable issues
108
+ ack doctor --report # generate a shareable gist
109
+ ack doctor --json # machine-readable output
428
110
  ```
429
111
 
430
- ### Debugging
112
+ ### Migrate config to another agent
431
113
 
432
114
  ```bash
433
- ack new --verbose # Enable verbose logging
434
- ack new --verbose --log-file debug.log # Save to file
435
- ACK_VERBOSE=1 ack new # Via environment variable
115
+ ack migrate --dry-run # preview the migration plan
116
+ ack migrate # apply it (interactive conflict resolution)
436
117
  ```
437
118
 
438
- ### Cache Configuration
439
-
440
- Release data is cached locally to improve performance. You can configure the cache TTL:
119
+ Supported providers: Claude Code, Cursor, Codex, Gemini CLI, Windsurf, Amp, Antigravity, OpenCode, OpenHands, Droid, Roo, Kilo. See [`docs/reconciliation-architecture.md`](./docs/reconciliation-architecture.md) for the RECONCILE → EXECUTE → REPORT design.
441
120
 
442
- ```bash
443
- # Set custom cache TTL (in seconds, default: 3600 = 1 hour)
444
- CK_CACHE_TTL=7200 ack versions # Cache for 2 hours
445
- CK_CACHE_TTL=0 ack versions # Disable caching (always fetch fresh)
446
-
447
- # Permanent configuration (add to ~/.bashrc or ~/.zshrc)
448
- export CK_CACHE_TTL=1800 # 30 minutes
449
- ```
450
-
451
- **Cache Location:** `~/.ack/cache/releases/`
452
-
453
- ### Update Notifications
454
-
455
- The `ack --version` command checks for newer versions of your installed AckKit and displays a notification if an update is available. The check is cached for 7 days to minimize API calls.
456
-
457
- **Disable Update Notifications:**
458
- ```bash
459
- # Set environment variable to disable
460
- NO_UPDATE_NOTIFIER=1 ack --version
461
-
462
- # Windows (permanent)
463
- [System.Environment]::SetEnvironmentVariable("NO_UPDATE_NOTIFIER", "1", [System.EnvironmentVariableTarget]::User)
464
-
465
- # macOS/Linux (add to ~/.bashrc or ~/.zshrc)
466
- export NO_UPDATE_NOTIFIER=1
467
- ```
468
-
469
- **Cache Location:** `~/.ack/cache/version-check.json` (Windows: `%USERPROFILE%\.AckKit\cache\`)
470
-
471
- ## Authentication
472
-
473
- The CLI requires GitHub authentication to download releases from private repositories.
474
-
475
- ### Authentication Flow
476
-
477
- ```
478
- ┌─────────────────────────────────────────────────┐
479
- │ Multi-Tier Authentication │
480
- │ │
481
- │ 1. GitHub CLI (gh auth token) │
482
- │ ↓ (if not available) │
483
- │ 2. Environment Variables (GITHUB_TOKEN) │
484
- │ ↓ (if not set) │
485
- │ 3. Config File (~/.ack/config.json) │
486
- │ ↓ (if not found) │
487
- │ 4. OS Keychain (secure storage) │
488
- │ ↓ (if not stored) │
489
- │ 5. User Prompt (with save option) │
490
- └─────────────────────────────────────────────────┘
491
- ```
492
-
493
- ### Quick Setup
494
-
495
- **Step 1: Install GitHub CLI**
496
- ```bash
497
- # Windows
498
- winget install GitHub.cli
499
-
500
- # macOS
501
- brew install gh
502
-
503
- # Linux
504
- sudo apt install gh
505
- ```
121
+ ### Uninstall
506
122
 
507
- **Step 2: Authenticate with GitHub CLI**
508
123
  ```bash
509
- gh auth login
124
+ ack uninstall # interactive — pick scope and kits
125
+ ack uninstall --local # remove project install only
126
+ ack uninstall --global # remove ~/.claude install only
510
127
  ```
511
128
 
512
- When prompted, follow these steps:
513
- 1. Select **GitHub.com**
514
- 2. Select **HTTPS** (or SSH if preferred)
515
- 3. Authenticate Git? → **Yes**
516
- 4. Select **Login with a web browser** (⚠️ recommended)
517
- 5. Copy the one-time code shown
518
- 6. Press Enter to open browser and paste the code
519
- 7. Authorize GitHub CLI
520
-
521
- > **⚠️ Important**: Select "Login with a web browser" - do NOT use "Paste an authentication token" as PAT authentication is no longer supported for accessing private repositories.
522
-
523
- ## Troubleshooting
524
-
525
- Run the doctor command to diagnose issues:
129
+ ## Web dashboard
526
130
 
527
131
  ```bash
528
- # Interactive diagnostics
529
- ack doctor
530
-
531
- # Generate report for support
532
- ack doctor --report
533
-
534
- # CI/automation
535
- ack doctor --check-only --json
536
-
537
- # Verbose logging
538
- ack new --verbose
539
- ack init --verbose
132
+ ack config # http://localhost:3456
133
+ ack config --host 0.0.0.0 # expose on LAN
540
134
  ```
541
135
 
542
- **Common Issues:**
543
- - **"Access denied"**: Run `ack doctor` to check auth, use `--fix` to auto-repair
544
- - **"Authentication failed"**: Run `ack doctor --fix` to re-authenticate, or manually run `gh auth login` (select 'Login with a web browser')
545
- - **"GitHub CLI not authenticated"**: Run `gh auth login` and select 'Login with a web browser' (NOT 'Paste token')
546
- - **Module errors**: Run `ack doctor --fix` to reinstall skill dependencies
547
- - **Need help**: Run `ack doctor --report` and share the gist URL
548
-
549
- ## Available Kits
550
-
551
- AckKit offers premium starter kits available for purchase at [AckKit.cc](https://AckKit.cc):
136
+ The dashboard lets you browse and toggle skills, agents, commands, and hooks; inspect recent Claude hook activity; and run migrations interactively.
552
137
 
553
- | Kit | Slash prefix | Repo | Description |
554
- |------|--------------|------|-------------|
555
- | `engineer` | `/ck:` | `chiendt1108/ack-engineer` | Engineering toolkit for building with Claude |
556
- | `marketing` | `/mkt:` | `claudekit/claudekit-marketing` | Content automation: campaigns, social media, analytics |
557
- | `fqc-qa` | `/fqc:` | `chiendt1108/ack-fqc-qa` | QA kit: test design, debugging, security, scenario coverage |
138
+ ## Per-project layout
558
139
 
559
- Each kit ships with its own slash-command namespace. When `--prefix` is applied, the kit's commands are reorganized under `.claude/commands/{prefix}/` and slash references inside files are rewritten to `/{prefix}:...`.
560
-
561
- ### Per-project layout override
562
-
563
- A user project can pin where the kit installs files via its `package.json`:
140
+ Override where a kit installs files via `package.json`:
564
141
 
565
142
  ```json
566
143
  {
@@ -571,144 +148,66 @@ A user project can pin where the kit installs files via its `package.json`:
571
148
  }
572
149
  ```
573
150
 
574
- (The legacy `claudekit` field is no longer recognized.)
575
-
576
- ## Configuration
577
-
578
- Configuration is stored in `~/.ack/config.json`:
579
-
580
- ```json
581
- {
582
- "github": {
583
- "token": "stored_in_keychain"
584
- },
585
- "defaults": {
586
- "kit": "engineer",
587
- "dir": "."
588
- }
589
- }
590
- ```
591
-
592
- ## Protected Files
151
+ ## Protected files
593
152
 
594
- The following file patterns are protected and will not be overwritten during updates:
153
+ The following are never overwritten by `ack init` or updates:
595
154
 
596
155
  - `.env`, `.env.local`, `.env.*.local`
597
156
  - `*.key`, `*.pem`, `*.p12`
598
- - `node_modules/**`, `.git/**`
599
- - `dist/**`, `build/**`
157
+ - `node_modules/**`, `.git/**`, `dist/**`, `build/**`
600
158
 
601
- ## Excluding Files
602
-
603
- Use `--exclude` flag with glob patterns to skip files:
159
+ Add your own patterns with `--exclude`:
604
160
 
605
161
  ```bash
606
- ack new --exclude "*.log" --exclude "temp/**"
607
- ack update --exclude "node_modules/**" --exclude "dist/**"
608
- ```
609
-
610
- **Patterns:** `*` (any chars), `**` (recursive), `?` (single char), `[abc]`, `{a,b}`
611
- **Restrictions:** No absolute paths, no path traversal (..), 1-500 chars
612
- **Note:** User patterns are ADDED to default protected patterns
613
-
614
- ### Custom .claude Files & Skills Migration
615
-
616
- **Custom File Preservation:**
617
- The CLI automatically preserves your custom `.claude/` files during updates:
618
-
619
- - Custom slash commands
620
- - Personal workflows
621
- - Project-specific configurations
622
- - Any other custom files in `.claude/` directory
623
-
624
- **Skills Directory Migration:**
625
- Automatic migration when structure changes (flat → categorized):
626
-
627
- - **Detection**: Manifest-based + heuristic fallback
628
- - **Customizations**: SHA-256 hash comparison detects modifications
629
- - **Safety**: Backup before migration, rollback on failure
630
- - **Preservation**: All customizations preserved during migration
631
- - **Interactive**: Prompts for confirmation (can skip in CI/CD)
632
-
633
- **Example Migration:**
634
- ```
635
- Before (flat):
636
- .claude/skills/
637
- ├── gemini-vision/
638
- ├── postgresql-psql/
639
- └── cloudflare-dns/
640
-
641
- After (categorized):
642
- .claude/skills/
643
- ├── ai-multimodal/
644
- │ └── gemini-vision/
645
- ├── databases/
646
- │ └── postgresql-psql/
647
- └── devops/
648
- └── cloudflare-dns/
162
+ ack init --exclude "*.log" --exclude "vendor/**"
649
163
  ```
650
164
 
651
- Customizations in any skill are detected and preserved automatically.
652
-
653
165
  ## Development
654
166
 
655
- See [Development Guide](./docs/codebase-summary.md) for:
656
- - Project structure (modular domain-driven architecture)
657
- - Build & compilation (`bun run build`, `bun run compile`)
658
- - Testing & type checking
659
- - Code standards & linting
660
-
661
- **Architecture Highlights:**
662
- - **Modular design**: 122 focused modules (target: <100 lines each)
663
- - **Facade pattern**: Each domain exposes public API via facade
664
- - **Phase handlers**: Complex commands use orchestrator + phase handlers
665
- - **Self-documenting names**: kebab-case file names describe purpose
666
-
667
- **Quick Start:**
668
167
  ```bash
168
+ git clone https://github.com/chiendt1108/ack-cli.git
169
+ cd ack-cli
669
170
  bun install
670
- bun run dev new --kit engineer
171
+ bun run dev new --kit engineer # run locally without installing globally
671
172
  bun test
672
- # Optional: run expensive CLI integration tests explicitly
673
- bun run test:integration
173
+ bun run ci:local # full quality gate (matches GitHub Actions)
674
174
  ```
675
175
 
676
- ## E2E Tests
677
-
678
- Playwright E2E tests cover the `ack migrate` dashboard (3 scenarios). Tests run against the local dev server and use API mocking — no real filesystem state is modified.
176
+ See [`CLAUDE.md`](./CLAUDE.md) for the contributor guide, [`docs/codebase-summary.md`](./docs/codebase-summary.md) for architecture, and [`docs/code-standards.md`](./docs/code-standards.md) for conventions.
679
177
 
680
- **Prerequisites:** Node 18+ or Bun 1.0+, Chromium (installed automatically).
681
-
682
- ```bash
683
- # One-time browser setup (if not already installed)
684
- ./node_modules/.bin/playwright install chromium
178
+ ## Documentation
685
179
 
686
- # Run all E2E specs
687
- bun run test:e2e
180
+ | Doc | Topic |
181
+ |-----|-------|
182
+ | [`docs/cli-reference.md`](./docs/cli-reference.md) | Full command + flag reference |
183
+ | [`docs/codebase-summary.md`](./docs/codebase-summary.md) | Architecture & module map |
184
+ | [`docs/system-architecture.md`](./docs/system-architecture.md) | Design diagrams, data flow |
185
+ | [`docs/reconciliation-architecture.md`](./docs/reconciliation-architecture.md) | `ack migrate` internals |
186
+ | [`docs/deployment-guide.md`](./docs/deployment-guide.md) | Release & publishing |
187
+ | [`docs/project-roadmap.md`](./docs/project-roadmap.md) | Roadmap & release timeline |
688
188
 
689
- # Interactive UI mode (watch + trace viewer)
690
- bun run test:e2e:ui
691
- ```
189
+ ## Troubleshooting
692
190
 
693
- Note: The dev server starts automatically via `bun run dashboard:dev`. CI wiring is a separate follow-up (local-only for now).
191
+ | Symptom | First step |
192
+ |---------|------------|
193
+ | `Access denied` / kit download fails | `ack doctor --fix` |
194
+ | `GitHub CLI not authenticated` | `gh auth login` (web browser flow) |
195
+ | Module / dependency errors | `ack doctor --fix` |
196
+ | Want a sharable diagnostic | `ack doctor --report` |
197
+ | Skill not appearing after install | Check `~/.ack/projects.json`, then `ack config` |
694
198
 
695
199
  ## FAQ
696
200
 
697
- **Q: Do I need GitHub CLI?**
698
- A: Yes, GitHub CLI is required. AckKit uses it exclusively for authentication with private repositories.
201
+ **Do I need GitHub CLI?** Yes — `gh` is the only supported auth path; tokens are stored in your OS keychain.
699
202
 
700
- **Q: How do I authenticate?**
701
- A: Run `gh auth login`, select 'Login with a web browser', complete OAuth in browser. Do NOT use 'Paste an authentication token'.
203
+ **Can I use a Personal Access Token?** No. PAT-paste auth was removed. Use `gh auth login` with the web browser flow.
702
204
 
703
- **Q: "Access denied" error?**
704
- A: Accept GitHub repo invitation, re-run `gh auth login` with web browser login, wait 2-5min for permissions.
205
+ **Will updating overwrite my custom skills/commands?** No. Custom files in `.claude/` are detected (SHA-256 hash comparison) and preserved. Use `--fresh` if you want a clean reinstall.
705
206
 
706
- **Q: "GitHub CLI not authenticated" error?**
707
- A: Run `gh auth login` and select 'Login with a web browser' (NOT 'Paste token'). PAT authentication is no longer supported.
207
+ **Where is my config stored?** `~/.ack/config.json`, with the GitHub token in the OS keychain. The projects registry is at `~/.ack/projects.json`.
708
208
 
709
- **Q: Is my token secure?**
710
- A: Yes. GitHub CLI manages tokens securely via OAuth, stored encrypted in OS keychain.
209
+ **How do I get help?** `ack doctor --report` produces a shareable gist URL. Or open an issue at [github.com/chiendt1108/ack-cli/issues](https://github.com/chiendt1108/ack-cli/issues).
711
210
 
712
211
  ## License
713
212
 
714
- MIT
213
+ [MIT](./LICENSE)
package/cli-manifest.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "1.0.0-dev.1",
3
- "generatedAt": "2026-05-17T08:49:49.583Z",
2
+ "version": "1.0.1",
3
+ "generatedAt": "2026-05-17T09:48:49.771Z",
4
4
  "commands": {
5
5
  "agents": {
6
6
  "name": "agents",
package/dist/index.js CHANGED
@@ -63692,7 +63692,7 @@ var package_default;
63692
63692
  var init_package = __esm(() => {
63693
63693
  package_default = {
63694
63694
  name: "@chiendt/ack-cli",
63695
- version: "1.0.0-dev.1",
63695
+ version: "1.0.1",
63696
63696
  description: "ACK CLI - tool for bootstrapping and updating ACK kits (Claude Code agent kits)",
63697
63697
  type: "module",
63698
63698
  repository: {
@@ -76375,6 +76375,76 @@ var init_ownership_display = __esm(() => {
76375
76375
  import_picocolors25 = __toESM(require_picocolors(), 1);
76376
76376
  });
76377
76377
 
76378
+ // src/ui/node_modules/picocolors/picocolors.js
76379
+ var require_picocolors2 = __commonJS((exports, module) => {
76380
+ var p2 = process || {};
76381
+ var argv = p2.argv || [];
76382
+ var env3 = p2.env || {};
76383
+ var isColorSupported = !(!!env3.NO_COLOR || argv.includes("--no-color")) && (!!env3.FORCE_COLOR || argv.includes("--color") || p2.platform === "win32" || (p2.stdout || {}).isTTY && env3.TERM !== "dumb" || !!env3.CI);
76384
+ var formatter = (open6, close, replace = open6) => (input) => {
76385
+ let string = "" + input, index = string.indexOf(close, open6.length);
76386
+ return ~index ? open6 + replaceClose(string, close, replace, index) + close : open6 + string + close;
76387
+ };
76388
+ var replaceClose = (string, close, replace, index) => {
76389
+ let result = "", cursor = 0;
76390
+ do {
76391
+ result += string.substring(cursor, index) + replace;
76392
+ cursor = index + close.length;
76393
+ index = string.indexOf(close, cursor);
76394
+ } while (~index);
76395
+ return result + string.substring(cursor);
76396
+ };
76397
+ var createColors = (enabled = isColorSupported) => {
76398
+ let f4 = enabled ? formatter : () => String;
76399
+ return {
76400
+ isColorSupported: enabled,
76401
+ reset: f4("\x1B[0m", "\x1B[0m"),
76402
+ bold: f4("\x1B[1m", "\x1B[22m", "\x1B[22m\x1B[1m"),
76403
+ dim: f4("\x1B[2m", "\x1B[22m", "\x1B[22m\x1B[2m"),
76404
+ italic: f4("\x1B[3m", "\x1B[23m"),
76405
+ underline: f4("\x1B[4m", "\x1B[24m"),
76406
+ inverse: f4("\x1B[7m", "\x1B[27m"),
76407
+ hidden: f4("\x1B[8m", "\x1B[28m"),
76408
+ strikethrough: f4("\x1B[9m", "\x1B[29m"),
76409
+ black: f4("\x1B[30m", "\x1B[39m"),
76410
+ red: f4("\x1B[31m", "\x1B[39m"),
76411
+ green: f4("\x1B[32m", "\x1B[39m"),
76412
+ yellow: f4("\x1B[33m", "\x1B[39m"),
76413
+ blue: f4("\x1B[34m", "\x1B[39m"),
76414
+ magenta: f4("\x1B[35m", "\x1B[39m"),
76415
+ cyan: f4("\x1B[36m", "\x1B[39m"),
76416
+ white: f4("\x1B[37m", "\x1B[39m"),
76417
+ gray: f4("\x1B[90m", "\x1B[39m"),
76418
+ bgBlack: f4("\x1B[40m", "\x1B[49m"),
76419
+ bgRed: f4("\x1B[41m", "\x1B[49m"),
76420
+ bgGreen: f4("\x1B[42m", "\x1B[49m"),
76421
+ bgYellow: f4("\x1B[43m", "\x1B[49m"),
76422
+ bgBlue: f4("\x1B[44m", "\x1B[49m"),
76423
+ bgMagenta: f4("\x1B[45m", "\x1B[49m"),
76424
+ bgCyan: f4("\x1B[46m", "\x1B[49m"),
76425
+ bgWhite: f4("\x1B[47m", "\x1B[49m"),
76426
+ blackBright: f4("\x1B[90m", "\x1B[39m"),
76427
+ redBright: f4("\x1B[91m", "\x1B[39m"),
76428
+ greenBright: f4("\x1B[92m", "\x1B[39m"),
76429
+ yellowBright: f4("\x1B[93m", "\x1B[39m"),
76430
+ blueBright: f4("\x1B[94m", "\x1B[39m"),
76431
+ magentaBright: f4("\x1B[95m", "\x1B[39m"),
76432
+ cyanBright: f4("\x1B[96m", "\x1B[39m"),
76433
+ whiteBright: f4("\x1B[97m", "\x1B[39m"),
76434
+ bgBlackBright: f4("\x1B[100m", "\x1B[49m"),
76435
+ bgRedBright: f4("\x1B[101m", "\x1B[49m"),
76436
+ bgGreenBright: f4("\x1B[102m", "\x1B[49m"),
76437
+ bgYellowBright: f4("\x1B[103m", "\x1B[49m"),
76438
+ bgBlueBright: f4("\x1B[104m", "\x1B[49m"),
76439
+ bgMagentaBright: f4("\x1B[105m", "\x1B[49m"),
76440
+ bgCyanBright: f4("\x1B[106m", "\x1B[49m"),
76441
+ bgWhiteBright: f4("\x1B[107m", "\x1B[49m")
76442
+ };
76443
+ };
76444
+ module.exports = createColors();
76445
+ module.exports.createColors = createColors;
76446
+ });
76447
+
76378
76448
  // src/commands/watch/phases/implementation-git-helpers.ts
76379
76449
  import { spawn as spawn5 } from "node:child_process";
76380
76450
  async function getCurrentBranch2(cwd2) {
@@ -104994,7 +105064,7 @@ import { basename as basename28, join as join142, resolve as resolve49 } from "n
104994
105064
  init_logger();
104995
105065
 
104996
105066
  // src/ui/ack-cli-design/tokens.ts
104997
- var import_picocolors27 = __toESM(require_picocolors(), 1);
105067
+ var import_picocolors27 = __toESM(require_picocolors2(), 1);
104998
105068
  import { homedir as homedir48, platform as platform12 } from "node:os";
104999
105069
  import { resolve as resolve48, win32 } from "node:path";
105000
105070
  var PANEL_MIN_WIDTH = 60;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chiendt/ack-cli",
3
- "version": "1.0.0-dev.1",
3
+ "version": "1.0.1",
4
4
  "description": "ACK CLI - tool for bootstrapping and updating ACK kits (Claude Code agent kits)",
5
5
  "type": "module",
6
6
  "repository": {