For Claude: REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
Goal: Rebuild the InkOS CLI TUI as a fixed-layout Ink dashboard with a persistent highlighted composer and a status rail directly above it.
Architecture: Keep @actalk/inkos-core unchanged and swap the CLI shell from readline + ANSI to Ink + React. app.ts becomes the launcher; new dashboard components render header, conversation, status, and composer from persisted interaction session data.
Tech Stack: TypeScript, React, Ink, Vitest
Files:
packages/cli/package.jsonpnpm-lock.yamlStep 1: Add CLI dependencies
Add the runtime and test dependencies needed for the new shell.
Step 2: Verify installation
Run: pnpm --dir packages/cli install
Expected: dependencies resolve and lockfile updates cleanly.
Files:
packages/cli/src/__tests__/tui-layout.test.tspackages/cli/src/__tests__/tui-dashboard.test.tsxStep 1: Write failing tests
Cover:
Step 2: Run tests to verify they fail
Run: pnpm --dir packages/cli exec vitest run src/__tests__/tui-layout.test.ts src/__tests__/tui-dashboard.test.tsx
Expected: FAIL because the Ink dashboard components do not exist yet.
Files:
packages/cli/src/tui/dashboard-model.tspackages/cli/src/tui/dashboard-model.test.tsStep 1: Write failing tests
Verify session data is mapped into:
Step 2: Run tests to verify they fail
Run: pnpm --dir packages/cli exec vitest run src/tui/dashboard-model.test.ts
Expected: FAIL because the helpers do not exist yet.
Step 3: Write minimal implementation
Create pure helpers so the Ink components can stay thin.
Step 4: Run tests to verify they pass
Run: pnpm --dir packages/cli exec vitest run src/tui/dashboard-model.test.ts
Expected: PASS
Files:
packages/cli/src/tui/dashboard.tsxpackages/cli/src/tui/app.tspackages/cli/src/tui/output.tsStep 1: Write or extend a failing dashboard render test
Assert that the mounted dashboard contains:
Step 2: Run tests to verify they fail
Run: pnpm --dir packages/cli exec vitest run src/__tests__/tui-dashboard.test.tsx
Expected: FAIL
Step 3: Write minimal implementation
Implement:
InkTuiDashboard componentprocessProjectInteractionInputStep 4: Run tests to verify they pass
Run: pnpm --dir packages/cli exec vitest run src/__tests__/tui-dashboard.test.tsx src/__tests__/tui-layout.test.ts
Expected: PASS
Files:
packages/cli/src/tui/app.tspackages/cli/src/tui/effects.tsStep 1: Replace the old REPL entry
Make launchTui() mount Ink instead of starting a readline loop.
Step 2: Verify startup / setup flow
Run: pnpm --dir packages/cli exec vitest run src/__tests__/tui-command.test.ts src/__tests__/tui-layout.test.ts src/__tests__/tui-dashboard.test.tsx
Expected: PASS
Files:
Step 1: Run focused tests
Run: pnpm --dir packages/cli exec vitest run src/__tests__/tui-layout.test.ts src/__tests__/tui-dashboard.test.tsx
Expected: PASS
Step 2: Run CLI build
Run: pnpm --dir packages/cli run build
Expected: PASS
Step 3: Commit
git add docs/plans/2026-04-11-ink-tui-dashboard-design.md docs/plans/2026-04-11-ink-tui-dashboard-implementation.md packages/cli/package.json pnpm-lock.yaml packages/cli/src/tui/app.ts packages/cli/src/tui/dashboard.tsx packages/cli/src/tui/dashboard-model.ts packages/cli/src/__tests__/tui-layout.test.ts packages/cli/src/__tests__/tui-dashboard.test.tsx
git commit -m "feat(tui): rebuild CLI shell with Ink dashboard"