---
gsd_state_version: 1.0
milestone: v1.0
milestone_name: milestone
status: unknown
stopped_at: Completed 06-02-PLAN.md
last_updated: "2026-03-22T22:44:02.664Z"
last_activity: 2026-03-22
progress:
  total_phases: 6
  completed_phases: 6
  total_plans: 19
  completed_plans: 19
---

# Project State

## Project Reference

See: .planning/PROJECT.md (updated 2026-03-20)

**Core value:** Users can manage all their AI assistants from one place with consistent configuration and security practices.
**Current focus:** Phase 06 — make-secrets-specific-to-installed-claws-not-global

## Current Position

Phase: 06
Plan: Not started

## Performance Metrics

**Velocity:**

- Total plans completed: 0
- Average duration: N/A
- Total execution time: 0.0 hours

**By Phase:**

| Phase | Plans | Total | Avg/Plan |
|-------|-------|-------|----------|
| - | - | - | - |

| Phase 01 P01 | 6 | 3 tasks | 12 files |
| Phase 01 P02 | 152 | 2 tasks | 4 files |
| Phase 02 P03 | 196 | 2 tasks | 2 files |
| Phase 02 P02 | 211 | 2 tasks | 2 files |
| Phase 02 P01 | 221 | 4 tasks | 4 files |
| Phase 02 P04 | 251 | 3 tasks | 3 files |
| Phase 03 P01 | 96 | 1 tasks | 6 files |
| Phase 03 P02 | 127 | 1 tasks | 2 files |
| Phase 03 P03 | 128 | 1 tasks | 2 files |
| Phase 03 P04 | 156 | 2 tasks | 3 files |
| Phase 04 P01 | 237 | 2 tasks | 5 files |
| Phase 04 P02 | 280 | 1 tasks | 3 files |
| Phase 04 P03 | 336 | 2 tasks | 5 files |
| Phase 04-installation-fleet-status P04 | 128 | 1 tasks | 3 files |
| Phase 05 P01 | 189 | 2 tasks | 4 files |
| Phase 05 P02 | 209 | 2 tasks | 3 files |
| Phase 06-make-secrets-specific-to-installed-claws-not-global P01 | 427 | 1 tasks | 4 files |
| Phase 06 P03 | 336 | 2 tasks | 4 files |
| Phase 06 P02 | 411 | 2 tasks | 3 files |

## Accumulated Context

### Decisions

Decisions are logged in PROJECT.md Key Decisions table.
Recent decisions affecting current work:

- Ansible for execution — Standard automation tool, no agent needed on hosts, SSH-based
- No sudo policy — Security-first, user controls privileged operations
- Central store in ~/.config/clawrium/ — Standard XDG location, single source of truth
- Start with OpenClaw — Well-documented, clear file structure, good test case
- [Phase 01]: Use src/ layout for project structure - Industry best practice for Python packaging
- [Phase 01]: Use Typer callback pattern for multi-command CLI - Forces command names, allows expansion
- [Phase 01-02]: Use pipx recommendation for Ansible install (Ubuntu externally-managed-environment compatibility)
- [Phase 01-02]: Display version for found dependencies, path fallback if version unavailable
- [Phase 01-02]: Table-based output instead of plain text for better readability
- [Phase 02-03]: Fixed ATI vendor detection to avoid false positives from substring matches (e.g., 'Corporation')
- [Phase 02-02]: JSON format for host storage (no additional dependencies)
- [Phase 02-01]: Use pytest.mark.xfail for all Wave 0 test stubs to clearly mark RED phase in TDD cycle
- [Phase 02-02]: Auto-add SSH host keys for new hosts (paramiko.AutoAddPolicy)
- [Phase 02]: CLI flags override SSH config values (hybrid input pattern)
- [Phase 02]: Hardware detection failures show warnings but don't block host addition
- [Phase 03]: OS names normalized to lowercase (Ubuntu → ubuntu) for consistent compatibility checking
- [Phase 03-03]: Sparse matrix compatibility matching: only explicit manifest entries valid, no partial matches
- [Phase 03-04]: Implemented both list and show commands in single module following existing CLI patterns
- [Phase 04-01]: Base playbook located at project root (platform/) not in src/ for easier discovery
- [Phase 04-01]: OpenClaw user naming pattern: opc-<hostname> using inventory_hostname variable
- [Phase 04-02]: Hybrid invocation pattern for CLI commands (interactive prompts when flags missing, direct with flags)
- [Phase 04-02]: Rich Panel for confirmation dialogs, Rich Progress for long-running operations
- [Phase 04-03]: Use ISO 8601 timestamps for installed_at field in claw tracking
- [Phase 04-03]: Use pgrep for process detection in health checks (simple, portable)
- [Phase 04-installation-fleet-status]: Claw-centric grouping: display organized by claw type rather than by host for better fleet visibility
- [Phase 04-installation-fleet-status]: Rich Progress spinner for health checks provides UX feedback on potentially slow SSH operations
- [Phase 05]: Use same locking and atomic write patterns as hosts.py for consistency
- [Phase 05]: Secrets stored as dict[str, SecretEntry] for O(1) key lookup
- [Phase 05]: Named CLI functions set_cmd/list_cmd/remove_cmd to avoid shadowing Python builtins
- [Phase 06-make-secrets-specific-to-installed-claws-not-global]: Nested JSON structure for per-instance secrets: {instance_key: {secret_key: SecretEntry}}
- [Phase 06-make-secrets-specific-to-installed-claws-not-global]: Instance key format: host:claw_type:claw_name (colon-separated)
- [Phase 06-make-secrets-specific-to-installed-claws-not-global]: Legacy __global__ namespace for backward compatibility with Phase 05 CLI commands
- [Phase 06-03]: DEGRADED status added to ClawStatus enum for running claws with missing required secrets
- [Phase 06-03]: Degraded state displayed in yellow to indicate warning (not critical failure)
- [Phase 06-02]: CLI commands now require claw_name as first positional argument for per-instance scoping

### Pending Todos

None yet.

### Blockers/Concerns

None yet.

### Quick Tasks Completed

| # | Description | Date | Commit | Directory |
|---|-------------|------|--------|-----------|
| 260321-fna | Implement per-host SSH key storage with clm host init command | 2026-03-21 | 61aaee0 | [260321-fna-implement-per-host-ssh-key-storage-with-](./quick/260321-fna-implement-per-host-ssh-key-storage-with-/) |
| 260321-iqu | Fix issue #1: Key lookup mismatch. Add key_id field to host records | 2026-03-21 | 1262959 | [260321-iqu-fix-issue-1-key-lookup-mismatch-add-key-](./quick/260321-iqu-fix-issue-1-key-lookup-mismatch-add-key-/) |
| 260321-jld | Fix hardware detection ansible-runner issue #3 | 2026-03-21 | fe4561d | [260321-jld-fix-hardware-detection-ansible-runner-ne](./quick/260321-jld-fix-hardware-detection-ansible-runner-ne/) |
| 260321-jux | ATX review fixes: SSH key validation, test coverage, GPU detection | 2026-03-21 | 397640b | [260321-jux-atx-review-fixes-ssh-key-validation-test](./quick/260321-jux-atx-review-fixes-ssh-key-validation-test/) |

### Roadmap Evolution

- Phase 6 added: make secrets specific to installed claws, not global

## Session Continuity

Last activity: 2026-03-22
Stopped at: Completed 06-02-PLAN.md
Resume file: None
