17 KiB
17 KiB
hf / HarborForge Cross-Project TODO
Scope: HarborForge.Cli, HarborForge.Backend, HarborForge.Frontend, HarborForge.OpenclawPlugin, HarborForge.Monitor, HarborForge.Test
Goal: land the new
hfCLI and the supporting backend/frontend/plugin/monitor changes described in the main CLI plan.
0. Cross-cutting / coordination
- Finalize MVP scope for first shipping version of
hf - Confirm which existing backend routes can be reused vs which new routes are needed
- Define canonical code-first lookup policy across all resources
- Define permission introspection strategy for
--help/--help-brief- settled as: token → current user → user role → role permissions
hf user createremains a special account-manager-token flow and is not gated by ordinary user-token write permission
- Define JSON output contract for CLI list/get commands
- current CLI contract:
--jsonemits raw success payloads on stdout without a universal envelope; list/get responses should preserve canonical code-bearing fields when backend payloads provide them
- current CLI contract:
- Define CLI exit code / stderr conventions
- current CLI contract: success exits
0; validation/runtime failures exit1; errors go to stderr and successful output goes to stdout
- current CLI contract: success exits
- Define local plugin↔monitor communication protocol over
monitor_port - Define release order across submodules
- Define rollback strategy if plugin / monitor bridge is unavailable
Note: the CLI contract items above are now documented from the currently implemented
HarborForge.Clibehavior; they can still be refined later if a stricter release contract is needed.
1. HarborForge.Cli
1.1 Go project scaffold
- Initialize Go module for
hf - Add binary entrypoint (
cmd/hf/main.goor equivalent) - Add internal package layout (
config,help,mode,passmgr,client,commands) - Add build instructions to
README.md - Add
.gitignorefor Go artifacts - Add repo-config-safe contribution note if needed
1.2 Runtime mode detection
- Implement
which pass_mgrdetection on startup - Add runtime mode enum: padded-cell mode / manual mode
- Block manual credential flags in padded-cell mode
- Return exact error when forbidden manual token flags are used:
padded-cell installed, --token flag disabled, use command directly
- Define equivalent handling for
--acc-mgr-tokenand related manual secret flags
1.3 Config handling
- Resolve binary directory correctly at runtime
- Read
<binary-dir>/.hf-config.json - Write/update
base-urlviahf config --url - Add config validation for malformed/missing config
- Add
hf config --acc-mgr-token - Implement
pass_mgr set --public --key hf-acc-mgr-token --secret <token> - Return exact error on failure:
--acc-mgr-token can only be set with padded-cell plugin
1.4 Help system
- Implement
hf --help - Implement
hf --help-brief - Implement
<group> --help - Implement
<group> --help-brief - Implement leaf command
--help - Implement leaf command
--help-brief - Show all subcommands in normal help, marking unavailable ones as
(not permitted) - Hide unavailable commands entirely in
--help-brief - Ensure leaf
--helpfor unavailable commands only printsnot permitted - Hide manual auth flags from help in padded-cell mode
- Show required manual auth flags in help in manual mode
- Handle special help behavior for
hf user create
1.5 Auth/token resolution layer
- Implement shared normal token resolution helper
- In padded-cell mode, resolve via
pass_mgr get-secret --key hf-token - In manual mode, require explicit
--token - Emit exact error on missing manual token:
--token <token> required or execute this with pcexec
- Ensure
hf --helpnever requires token - Ensure subcommand help can render even when token is unavailable
1.6 Output model
- Add default human-readable output mode
- Add
--jsonoutput mode - Ensure list outputs include canonical resource code fields
- Ensure machine-readable output is stable enough for agent use
1.7 Base commands
- Implement
hf version - Implement
hf health
1.8 User commands
- Implement
hf user create - Forbid
--tokenonhf user create - Do not support
--roleonhf user create - Default created accounts to
guest - In padded-cell mode, auto-generate password with:
pass_mgr generate --key hf --username <username>
- In padded-cell mode, auto-fetch account-manager token with:
pass_mgr get-secret --public --key hf-acc-mgr-token
- Emit exact missing-password error:
--pass <password> required or execute with pcexec
- Emit exact missing-account-manager-token error:
--acc-mgr-token <token> required or execute with pcexec
- Implement
hf user list - Implement
hf user get <username> - Implement
hf user update <username> - Implement
hf user activate <username> - Implement
hf user deactivate <username> - Implement
hf user delete <username>
1.9 Role / permission commands
- Implement
hf role list - Implement
hf role get <role-name> - Implement
hf role create - Implement
hf role update - Implement
hf role delete - Implement
hf permission list - Implement
hf role set-permissions - Implement
hf role add-permissions - Implement
hf role remove-permissions
1.10 Project / milestone commands
- Implement
hf project list - Implement
hf project get <project-code> - Implement
hf project create - Implement
hf project update <project-code> - Implement
hf project delete <project-code> - Implement
hf project members <project-code> - Implement
hf project add-member <project-code> - Implement
hf project remove-member <project-code> - Implement
hf milestone list --project <project-code> - Implement
hf milestone get <milestone-code> - Implement
hf milestone create - Implement
hf milestone update <milestone-code> - Implement
hf milestone delete <milestone-code> - Implement
hf milestone progress <milestone-code>
1.11 Task commands
- Implement
hf task list - Add filters:
--project <project-code>--milestone <milestone-code>--status <status>--taken-by <me|null|username>--due-today <true|false>- repeated
--order-by <due-date|priority|created|name>
- Implement
hf task get <task-code> - Implement
hf task create - Implement
hf task update <task-code> - Implement
hf task transition <task-code> <status> - Implement
hf task take <task-code> - Return clear error when task is already taken by someone else
- Return clear error when caller lacks permission to take task
- Implement
hf task delete <task-code> - Implement
hf task search
1.12 Meeting commands
- Implement
hf meeting list - Implement
hf meeting get <meeting-code> - Implement
hf meeting create - Implement
hf meeting update <meeting-code> - Implement
hf meeting attend <meeting-code> - Ensure attend adds caller to participant list
- Implement
hf meeting delete <meeting-code>
1.13 Support commands
- Implement
hf support list - Implement
hf support get <support-code> - Implement
hf support create - Implement
hf support update <support-code> - Implement
hf support take <support-code> - Implement
hf support transition <support-code> <status> - Implement
hf support delete <support-code>
1.14 Propose commands
- Implement
hf propose list --project <project-code> - Implement
hf propose get <propose-code> - Implement
hf propose create - Implement
hf propose update <propose-code> - Implement
hf propose accept <propose-code> --milestone <milestone-code> - Implement
hf propose reject <propose-code> - Implement
hf propose reopen <propose-code>
1.15 Monitor commands
- Implement
hf monitor overview - Implement
hf monitor server list - Implement
hf monitor server get <identifier> - Implement
hf monitor server create --identifier <identifier> - Implement
hf monitor server delete <identifier> - Implement
hf monitor api-key generate <identifier> - Implement
hf monitor api-key revoke <identifier>
1.16 CLI packaging / release
- Add cross-platform build targets if needed
- Add release artifact naming for
hf - Add install documentation
- Add shell examples for padded-cell and manual mode
2. HarborForge.Backend
2.1 Code-first API support
- Audit all CLI-targeted resources for code availability
- Ensure
project-codeis accepted in get/update/delete/member APIs - Ensure
milestone-codeis accepted in get/update/delete/progress APIs - Ensure
task-codeis accepted in get/update/delete/transition APIs - Ensure
meeting-codeis accepted in get/update/delete/attend APIs - Ensure
support-codeis accepted in get/update/delete/take/transition APIs - Ensure
propose-codeis accepted in get/update/delete/accept/reject/reopen APIs - Add code-based list filters where missing
- Ensure CLI-related list payloads always include canonical code fields
2.2 User / account-manager flow
- Review current
account-managerpermission implementation - Add dedicated backend flow for account-manager-based account creation if current
/usersroute is insufficient - Ensure
hf user createmaps cleanly to backend account-manager permission model - Ensure new accounts default to
guest - Ensure admin role cannot be assigned through normal user management APIs
2.3 Permission introspection for CLI help
- Decide how CLI will query effective permissions
- Add/extend backend endpoint(s) for current-user permission introspection if needed
- Ensure CLI can cheaply determine whether a subcommand is permitted
- Support permission-aware help rendering without excessive API chattiness
2.4 Task / meeting / support actions
- Add/confirm backend route for task self-assignment (
task take) - Add/confirm conflict behavior when task already has a different assignee
- Add/confirm backend route for meeting attendance (
meeting attend) - Ensure meeting attendance updates participant list
- Add/confirm backend route for support self-assignment (
support take)
2.5 Frontend-facing code migration support
- Add code-based detail endpoints or code query support for frontend routing
- Ensure frontend can resolve resources by code without fallback to id-only APIs
- Update serializers to expose code prominently wherever applicable
2.6 Legacy Python CLI retirement
- Track parity between new
hfCLI and old backend Python CLI - Once parity is acceptable, remove legacy Python CLI from backend repo
- Remove backend docs referencing the old Python CLI
3. HarborForge.Frontend
3.1 Code-first UI migration
- Audit current routes and identify every place still using raw ids
- Move project detail lookup toward
project-code - Move milestone detail lookup toward
milestone-code - Move task detail lookup toward
task-code - Move meeting detail lookup toward
meeting-code - Move support detail lookup toward
support-code - Move propose detail lookup toward
propose-code - Stop surfacing raw ids as the main visible identifier in lists/details
- Display codes consistently in relevant list and detail views
3.2 User / role UX alignment
- Review current user management page against final backend behavior
- Ensure only code/name-first identifiers are shown where relevant
- Ensure account role display matches single-role model everywhere
3.3 Meeting / support UI
- Audit current frontend support for meeting resources
- Add/adjust UI for meeting participant state if needed
- Add/adjust UI for support take/ownership state if needed
3.4 Monitor UI alignment
- Ensure monitor views expose server identifier/code cleanly
- Review display of OpenClaw/plugin metadata once Monitor bridge is implemented
3.5 Future CLI alignment aids
- Consider showing canonical codes more prominently to help users map UI↔CLI
- Ensure copyable resource codes are easy to find from the UI
4. HarborForge.OpenclawPlugin
4.1 Plugin identity and packaging
- Rename plugin registration name to
harbor-forge - Audit all docs/config/install references to old plugin name
- Ensure plugin config keys and examples reflect the new registration name
4.2 Remove sidecar architecture
- Remove plugin-side
server/telemetry sidecar - Remove sidecar startup/shutdown lifecycle logic
- Remove sidecar-specific docs and examples
- Replace old OpenClaw telemetry flow with direct plugin-exposed data path
4.3 Plugin config updates
- Add
monitor_portto plugin config schema - Document
monitor_portin plugin README/docs/examples - Ensure runtime reads and validates
monitor_port
4.4 CLI install support
- Add install script flag
--install-cli - Resolve OpenClaw profile bin directory (default
~/.openclaw/bin) - Build
HarborForge.Cli - Install compiled
hfbinary to profilebin/ chmod +xinstalled binary- Handle failure cases cleanly if CLI build/install fails
4.5 Skills deployment
- Add plugin
skills/directory - Add
skills/hf/ - Add
skills/hf/SKILL.md - In
SKILL.md, explain basichfusage - In
SKILL.md, encourage agents to usehf --help-brief - In
SKILL.md, point to normal--helpfor full command tree - Installer should copy normal plugin skills into profile
skills/ - Installer should not copy
skills/hf/unless--install-cliis present - Installer should copy
skills/hf/when--install-cliis present
4.6 Monitor bridge endpoint
- Define how plugin exposes OpenClaw metadata to Monitor over local port
- Decide HTTP endpoint structure / payload schema
- Expose OpenClaw version
- Expose plugin version
- Expose agent list / agent metadata
- Ensure plugin remains functional even if Monitor never connects
5. HarborForge.Monitor
5.1 Docker/runtime changes
- Add
MONITOR_PORTenv var - Ensure Monitor listens on
127.0.0.1:<MONITOR_PORT> - Update Docker runtime docs/examples
- Update docker-compose to expose that port to host
127.0.0.1
5.2 Plugin communication
- Implement local communication client to query plugin over
MONITOR_PORT - Define request timeout / retry / fallback policy
- Keep startup independent of plugin communication success
- Keep heartbeat/telemetry upload independent of plugin communication success
- If plugin is reachable, enrich telemetry with:
- OpenClaw version
- plugin version
- agent info
- If plugin is unreachable, continue current behavior unchanged
5.3 Telemetry model alignment
- Ensure backend-facing telemetry payloads can carry optional OpenClaw metadata
- Avoid making plugin-derived fields mandatory
- Ensure monitor data model cleanly distinguishes:
- host/hardware telemetry
- optional OpenClaw metadata
5.4 Docs / examples
- Update Monitor README to explain
MONITOR_PORT - Explain degraded mode when plugin bridge is absent
- Provide example Docker run / compose snippet with host loopback exposure
6. HarborForge.Test / HarborForge.Frontend.Test
6.1 Keep test runner aligned
- Preserve Frontend.Test Dockerfile as owner of proxy startup
- Keep
run-test-frontend.shfrom overriding default test container CMD unless strictly necessary - Keep expose-port mode working with 127.0.0.1 + proxy architecture
6.2 Code-first frontend test updates
- Update tests to prefer resource codes over ids in assertions and navigation
- Remove assumptions that UI surfaces raw ids where codes should be primary
6.3 Future CLI tests
- Add tests for
hfhelp rendering - Add tests for
hf --help-brief - Add tests for padded-cell mode vs manual mode
- Add tests for exact stderr messages
- Add tests for code-only command acceptance
7. Suggested implementation order
Phase A — Foundations
- Finalize CLI help / mode / output model
- Finalize backend permission introspection approach
- Finalize plugin↔monitor local protocol
Phase B — Backend first
- Add/finish code-based backend support
- Add/finish task take / meeting attend / support take
- Add any missing account-manager creation behavior
Phase C — CLI MVP
- Build
hfscaffold - Ship
version,health,config - Ship
user create,user list,user get - Ship
task list,task get,task take - Ship initial
monitorcommands
Phase D — Frontend alignment
- Move frontend to code-first lookup/display
- Surface canonical codes consistently in UI
Phase E — Plugin / Monitor integration
- Rename plugin to
harbor-forge - Remove plugin sidecar
- Add
--install-cli - Add
skills/hf - Add
monitor_port/MONITOR_PORTbridge
Phase F — Cleanup / retirement
- Remove legacy backend Python CLI
- Update all docs to point to
hf - Add final tests and packaging flow