/pdca-watch
Live PDCA dashboard ticking every 30s — reads pdca-status.json + token-ledger.ndjson tail, renders fixed-width panel via CC /loop. Triggers: pdca watch, live dashboard, watch progress
Claude Code
$ npx -y skills add ww-w-ai/bkit-claude-code --skill pdca-watch --agent claude-code
Codex
$ npx skills add ww-w-ai/bkit-claude-code --skill pdca-watch -a codex -y
Cursor
$ npx skills add ww-w-ai/bkit-claude-code --skill pdca-watch -a cursor -y
Gemini CLI
$ npx skills add ww-w-ai/bkit-claude-code --skill pdca-watch -a gemini-cli -y
GitHub Copilot
$ npx skills add ww-w-ai/bkit-claude-code --skill pdca-watch -a github-copilot -y
OpenCode
$ npx skills add ww-w-ai/bkit-claude-code --skill pdca-watch -a opencode -y
Windsurf
$ npx skills add ww-w-ai/bkit-claude-code --skill pdca-watch -a windsurf -y
SKILL.md
pdca-watch.SKILL.mdname: pdca-watch
classification: workflow
classification-reason: Live PDCA dashboard tied to bkit's state machine + token ledger
deprecation-risk: none
effort: low
description: |
Live PDCA dashboard ticking every 30s — reads pdca-status.json + token-ledger.ndjson tail, renders fixed-width panel via CC /loop.
Triggers: pdca watch, live dashboard, watch progress
argument-hint: "[feature]"
user-invocable: true
allowed-tools:
- Read
- Glob
imports: []
next-skill: null
pdca-phase: null
task-template: "[Watch] {feature}"PDCA Watch — Live Tick Dashboard
> v2.1.11 Sprint β FR-β4. Wraps `lib/dashboard/watch.js` over CC's > `/loop` (v2.1.71+). Read-only — only consumes state files; never > writes. Falls back to a single render when `/loop` is unsupported > (E-β4-01).
Arguments
| Argument | Description | Example | |----------|-------------|---------| | (none) | Auto-resolve active feature from `pdca-status.primaryFeature` | `/pdca-watch` | | `<feature>` | Watch a specific feature by name | `/pdca-watch bkit-v2111-integrated-enhancement` |
Behavior
Resolution
1. If `<feature>` is provided, use it verbatim. 2. Else read `.bkit/state/pdca-status.json` → `primaryFeature`, then `activeFeatures[0]` as fallback. 3. If still no feature → render `"No active PDCA feature. Start one with /pdca pm <feature>"` and exit.
Tick (every 30s via `/loop`)
For each tick, `lib/dashboard/watch.js#renderTick` produces a panel with:
Watch <feature> — tick N (HH:MM:SS)
─────────────────────────────────────────────────────────────
Phase: <phase> Match: <%> Iter: <n / 5>
Tokens: <in> in / <out> out · samples <N>
Est cost: $<USD>
─────────────────────────────────────────────────────────────
Data sources:
- Phase / matchRate / iterationCount: `pdca-status.features[<feature>]`
- Token totals: last 50 lines of `token-ledger.ndjson`
- Cost: Sonnet-class flat estimate ($3/Mtok in, $15/Mtok out)
Termination
- Ctrl-C from user
- Feature `phase === 'completed'` or `phase === 'archived'`
- After max 60 ticks (≈30 min) — caller restarts if more time needed
CC `/loop` Support
| CC Version | Behavior | |------------|----------| | ≥ 2.1.71 | Native `/loop 30s` ticker | | < 2.1.71 | E-β4-01: single render + warning, no loop | | Unknown | Same as < 2.1.71 (fail-safe) |
The check is performed via `watch.checkLoopSupport({ ccVersion })` — caller passes the resolved CC version from `lib/infra/cc-version-checker`.
Security
- Pure read on `.bkit/state/pdca-status.json` and `.bkit/runtime/token-ledger.ndjson`.
- Tail bounded to `MAX_TAIL_LINES = 200` regardless of caller input —
defends against pathological NDJSON growth.
- No subprocess spawning, no network.
- PII redaction on the ledger is owned by the writer (Token Accountant);
watch only reads what's already redacted.
Module Dependencies
| Module | Function | Usage | |--------|----------|-------| | `lib/dashboard/watch.js` | `resolveFeature()` | Auto-detect when no arg | | `lib/dashboard/watch.js` | `renderTick()` | One frame per tick | | `lib/dashboard/watch.js` | `tailLedger()` | NDJSON tail (≤200) | | `lib/dashboard/watch.js` | `checkLoopSupport()` | CC version gate | | `lib/infra/cc-version-checker.js` | `getCurrent()` | Version source |
Examples
# Auto-detect active feature
/pdca-watch
# Watch a specific feature
/pdca-watch bkit-v2111-integrated-enhancement
Related
- `/pdca status` — single snapshot (no loop)
- `/control trust` — trust score informs auto-escalation
- `/pdca-fast-track` — Daniel-mode auto-approve checkpoints
ARGUMENTS:
Read more
name: pdca-watch
classification: workflow
classification-reason: Live PDCA dashboard tied to bkit's state machine + token ledger
deprecation-risk: none
effort: low
description: |
Live PDCA dashboard ticking every 30s — reads pdca-status.json + token-ledger.ndjson tail, renders fixed-width panel via CC /loop.
Triggers: pdca watch, live dashboard, watch progress
argument-hint: "[feature]"
user-invocable: true
allowed-tools:
- Read
- Glob
imports: []
next-skill: null
pdca-phase: null
task-template: "[Watch] {feature}"PDCA Watch — Live Tick Dashboard
> v2.1.11 Sprint β FR-β4. Wraps `lib/dashboard/watch.js` over CC's > `/loop` (v2.1.71+). Read-only — only consumes state files; never > writes. Falls back to a single render when `/loop` is unsupported > (E-β4-01).
Arguments
| Argument | Description | Example | |----------|-------------|---------| | (none) | Auto-resolve active feature from `pdca-status.primaryFeature` | `/pdca-watch` | | `<feature>` | Watch a specific feature by name | `/pdca-watch bkit-v2111-integrated-enhancement` |
Behavior
Resolution
1. If `<feature>` is provided, use it verbatim. 2. Else read `.bkit/state/pdca-status.json` → `primaryFeature`, then `activeFeatures[0]` as fallback. 3. If still no feature → render `"No active PDCA feature. Start one with /pdca pm <feature>"` and exit.
Tick (every 30s via `/loop`)
For each tick, `lib/dashboard/watch.js#renderTick` produces a panel with:
Watch <feature> — tick N (HH:MM:SS) ───────────────────────────────────────────────────────────── Phase: <phase> Match: <%> Iter: <n / 5> Tokens: <in> in / <out> out · samples <N> Est cost: $<USD> ─────────────────────────────────────────────────────────────
Data sources:
- Phase / matchRate / iterationCount: `pdca-status.features[<feature>]`
- Token totals: last 50 lines of `token-ledger.ndjson`
- Cost: Sonnet-class flat estimate ($3/Mtok in, $15/Mtok out)
Termination
- Ctrl-C from user
- Feature `phase === 'completed'` or `phase === 'archived'`
- After max 60 ticks (≈30 min) — caller restarts if more time needed
CC `/loop` Support
| CC Version | Behavior | |------------|----------| | ≥ 2.1.71 | Native `/loop 30s` ticker | | < 2.1.71 | E-β4-01: single render + warning, no loop | | Unknown | Same as < 2.1.71 (fail-safe) |
The check is performed via `watch.checkLoopSupport({ ccVersion })` — caller passes the resolved CC version from `lib/infra/cc-version-checker`.
Security
- Pure read on `.bkit/state/pdca-status.json` and `.bkit/runtime/token-ledger.ndjson`.
- Tail bounded to `MAX_TAIL_LINES = 200` regardless of caller input —
defends against pathological NDJSON growth.
- No subprocess spawning, no network.
- PII redaction on the ledger is owned by the writer (Token Accountant);
watch only reads what's already redacted.
Module Dependencies
| Module | Function | Usage | |--------|----------|-------| | `lib/dashboard/watch.js` | `resolveFeature()` | Auto-detect when no arg | | `lib/dashboard/watch.js` | `renderTick()` | One frame per tick | | `lib/dashboard/watch.js` | `tailLedger()` | NDJSON tail (≤200) | | `lib/dashboard/watch.js` | `checkLoopSupport()` | CC version gate | | `lib/infra/cc-version-checker.js` | `getCurrent()` | Version source |
Examples
# Auto-detect active feature /pdca-watch # Watch a specific feature /pdca-watch bkit-v2111-integrated-enhancement
Related
- `/pdca status` — single snapshot (no loop)
- `/control trust` — trust score informs auto-escalation
- `/pdca-fast-track` — Daniel-mode auto-approve checkpoints
ARGUMENTS:
A Claude Code plugin that verifies AI-generated code against its own design specs. Three commands. Anyone — even someone vibe-coding for the first time — can ship robust, production-quality software.
Other skills on bkit.
More skills from other plugins.
agentmail
Use your assigned AgentMail inbox to read email tasks, explicitly send or reply, and check delivery. Provided automatically by…
adr-create
Create a new Architecture Decision Record with sequential numbering and AgentDB registration
Questions about pdca-watch.
- Which coding agents can use pdca-watch?
- pdca-watch installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.

