Project OS Organizer Skill
Why This Skill
Use this when a user is juggling many AI-built projects and needs one simple command surface to:
- See what is active now.
- Capture progress and next steps fast.
- Resume any project in one jump (local/GitHub/chat).
Security Defaults
- Remote install is disabled by default.
- Chat transcript indexing is disabled by default.
- GitHub sync/token usage is disabled by default.
- Home-directory heuristic discovery is disabled by default.
To opt in explicitly:
PROJECT_OS_INCLUDE_CHAT_ROOTS=1 enables chat transcript indexing.
PROJECT_OS_ENABLE_GITHUB_SYNC=1 enables GitHub username/token integration.
PROJECT_OS_ENABLE_HOME_DISCOVERY=1 enables broad home-directory discovery.
PROJECT_OS_AUTO_SETUP=1 PROJECT_OS_ALLOW_REMOTE_INSTALL=1 allows remote clone/install if PROJECT_OS_ROOT is missing.
Goal
Produce a complete, local-first project inventory that answers:
- What projects exist right now?
- Which are active/blocked/stale?
- What is each project actually about?
- Where did the user leave off?
- How can the user jump back in immediately?
- How can the user quickly edit status/next steps/items without leaving OpenClaw?
Default Behavior (Natural Language First)
Default action for every user message:
- Interpret the message.
- Run:
scripts/project_router.sh "<user message>".
- Return the router output directly in plain language.
Users should not need to type scripts, Python, paths, or flags.
Fallback for power users:
- Use the short wrapper command:
project ...
- Examples:
project, project focus, project today, project inbox "idea: test", project dashboard start
Plain-language request mapping:
- "What am I working on today?" -> activity today
- "Show my projects" -> grouped project list (Now/Later/Blocked/Done)
- "Focus list" -> top focus items
- "Add this idea: ..." -> inbox capture
- "Next for project-os: ..." -> add next
- "Mark X blocked" -> set simple status
- "Start dashboard" -> dashboard start
- "Resume project X" -> resume pack
- "Only track A, B, C" -> set tracked scope (activity will only include these)
- "Mute X" / "Untrack X" / "Show scope" -> scope controls
Response style in non-technical mode:
- Keep responses short and direct.
- Do not expose technical command details unless user asks.
- For activity questions, always return
Activity Criteria + day sections.
- If a project name is ambiguous, ask one short clarification question.
Project Definition
Treat an item as a project if it matches any of these:
- Git repository folder.
- Non-git code folder with project markers (
package.json, pyproject.toml, Cargo.toml, etc).
- Chat session (Claude/Codex) that does not match an existing project; create a chat-derived project.
- Claude workspace chats should map to deeper subprojects when session folders indicate a nested workspace path.
Reject likely non-project folders in collection roots (docs-only, logs, backups, notes-only folders) unless there is strong code/marker evidence.
Reject low-signal chat-only entries as standalone projects unless they contain a useful path hint or meaningful project intent.
Required Workflow
- Run
scripts/bootstrap.sh first.
- Validate coverage:
- run
python3 -m project_os.cli --db ~/.project_os/openclaw_test.db --config ~/.project_os/openclaw_test_config.json list-projects --limit 200
- run
python3 -m project_os.cli --db ~/.project_os/openclaw_test.db --config ~/.project_os/openclaw_test_config.json list-sessions --limit 50
- run
python3 -m project_os.cli --db ~/.project_os/openclaw_test.db --config ~/.project_os/openclaw_test_config.json list-items --status open --limit 80
- run
python3 -m project_os.cli --db ~/.project_os/openclaw_test.db --config ~/.project_os/openclaw_test_config.json squash-chat-projects
- If user wants visual mode, run
scripts/start_dashboard.sh.
- If user wants quick resume context, run
scripts/write_memory.sh and use ~/.project_os/PROJECT_MEMORY.md.
First-Run (Production)
Run this for a first-time user:
scripts/openclaw_smoke_agent.sh
scripts/read_smoke_result.sh
- Confirm:
RESULT_STATUS=ok
RESULT_DASHBOARD_URL=...
RESULT_PORT_8765_LISTENING=yes
If project-os repo is not present locally, the skill will fail safely by default and instruct setting PROJECT_OS_ROOT. Remote install is explicit opt-in only.
Operation Modes
- Dashboard mode: simple visual triage (
Focus Today, Now, Blocked, Later, Done) and jump links.
- Dashboard mode includes:
- Quick Inbox capture (freeform note -> auto-routed update/next/reminder/idea/blocker)
- Daily Check-In panel (done + next + blocker)
- Focus list, stale nudges, weekly snapshot, and server health
- Dashboard intentionally avoids recommendation-score noise and focuses on plain language:
What it is (derived from project files like README/package metadata)
Where left off
Do next
- inline editing: set simple status (
now/later/blocked/done), set next action, add update/next/reminder/idea/blocker, mark items done/dismissed
- session resume buttons for both tools (
Resume in Claude and Resume in Codex) when session link is valid
- Memory mode: markdown snapshot for fast resume in any chat.
Default recommendation: use both.
OpenClaw Command-First Updates
Use CLI commands as the primary interface:
add-update for what changed.
add-next for the immediate next step (also updates project next_action).
add-reminder for date/time-based follow-ups.
add-idea for backlog thoughts.
list-items and set-item-status to triage/close items.
- Use
scripts/project_actions.sh for short aliases around these commands.
- For activity-window questions ("what did I work on today/yesterday"), run
scripts/activity_report.sh --when both or scripts/project_actions.sh activity --when both.
- Do not guess activity by project name or status; only use timestamp evidence from the report criteria.
- Activity report excludes archived projects by default (use
--include-archived only if user asks).
- Response contract for activity-window answers:
- always include
Activity Criteria
- always include
Today (...) and/or Yesterday (...) headings
- include at least one evidence line per listed project (
local_commit, github_push, session, or note)
- if no projects match, explicitly return
- none
OpenClaw Usage
- In OpenClaw, invoke this skill by name:
project-os-organizer.
- For first run setup:
project setup (or scripts/easy_mode.sh setup).
- Default day-to-day: just type plain English in chat and route through
project_router.sh.
- Optional shortcuts use only
project ....
- For one-command local install from this repo, run
scripts/install_openclaw_skill.sh.
- For non-interactive OpenClaw agents, use:
scripts/openclaw_smoke.sh for strict CI-style smoke (non-zero exit on failure)
scripts/openclaw_smoke_agent.sh for agent-safe smoke (always exits zero, returns RESULT_STATUS)
scripts/read_smoke_result.sh to fetch the last smoke result file when command output is flaky
scripts/bootstrap.sh --noninteractive (timeout-safe quick mode)
scripts/bootstrap.sh --noninteractive-full (full refresh mode)
scripts/start_dashboard.sh --detach --restart
- Smoke commands return machine-readable lines:
RESULT_STATUS
RESULT_ERROR
RESULT_DASHBOARD_URL
RESULT_DASHBOARD_PID
RESULT_PORT_8765_LISTENING
RESULT_CURL_HEAD
RESULT_SMOKE_LOG
RESULT_DASHBOARD_LOG
RESULT_RESULT_FILE
- For quick editing from chat:
scripts/project_actions.sh list --limit 80
scripts/project_actions.sh set-status --project "<name|id>" --status blocked
scripts/project_actions.sh set-next --project "<name|id>" --text "next step"
scripts/project_actions.sh add-update --project "<name|id>" --text "what changed"
scripts/project_actions.sh add-next --project "<name|id>" --text "immediate next step"
scripts/project_actions.sh add-reminder --project "<name|id>" --text "follow up" --due 2026-03-01
scripts/project_actions.sh add-blocker --project "<name|id>" --text "what is blocked"
scripts/project_actions.sh simple-status --project "<name|id>" --status now
scripts/project_actions.sh focus --limit 3
scripts/project_actions.sh stale --days 14 --limit 20
scripts/project_actions.sh weekly --days 7 --limit 12
scripts/project_actions.sh notify --period daily
scripts/project_actions.sh inbox --text "freeform note"
scripts/project_actions.sh checkin --project "<name|id>" --done "..." --next "..." --blocker "..."
scripts/project_actions.sh duplicates --limit 50
scripts/project_actions.sh merge --keep "<id|name>" --drop "<id|name>"
scripts/project_actions.sh ask --text "mark project-os blocked"
scripts/project_actions.sh set-item --item <id> --status done
- For "worked on today/yesterday":
scripts/project_actions.sh activity --when both
- For personal scope control:
scripts/project_actions.sh scope --set "project-os" "polymarket-trader-v2"
scripts/project_actions.sh track --project "project-os"
scripts/project_actions.sh mute --project "clawd"
scripts/project_actions.sh scope
- Add
--include-archived only on explicit request.
- Return the output sections
Activity Criteria, Today (...), and Yesterday (...) so the user sees exactly how projects were counted.
Safety and Scope
- Local-first only.
- Do not mutate repositories/servers automatically.
- Do not invent project state; infer from scans/sessions and expose uncertainty.
- Prefer broad root coverage to avoid missing nested subfolders.
- Keep non-git project discovery at root-level by default (
include_nested_non_git_projects: false) to avoid noisy submodules.
- Keep collection discovery strict: include real project subfolders, drop random text-only folders.
References
references/project-definition.md
references/workflow.md
1---2name: project-os-organizer3description: Privacy-first, chat-first project manager for vibe coders. Track projects, capture updates, and resume work across local folders, Claude/Codex, and GitHub with explicit opt-in controls.4---5
6# Project OS Organizer Skill
7
8## Why This Skill
9Use this when a user is juggling many AI-built projects and needs one simple command surface to:
101. See what is active now.
112. Capture progress and next steps fast.
123. Resume any project in one jump (local/GitHub/chat).
13
14## Security Defaults
151. Remote install is disabled by default.
162. Chat transcript indexing is disabled by default.
173. GitHub sync/token usage is disabled by default.
184. Home-directory heuristic discovery is disabled by default.
19
20To opt in explicitly:
211. `PROJECT_OS_INCLUDE_CHAT_ROOTS=1` enables chat transcript indexing.
222. `PROJECT_OS_ENABLE_GITHUB_SYNC=1` enables GitHub username/token integration.
233. `PROJECT_OS_ENABLE_HOME_DISCOVERY=1` enables broad home-directory discovery.
244. `PROJECT_OS_AUTO_SETUP=1 PROJECT_OS_ALLOW_REMOTE_INSTALL=1` allows remote clone/install if `PROJECT_OS_ROOT` is missing.
25
26## Goal
27Produce a complete, local-first project inventory that answers:
281. What projects exist right now?
292. Which are active/blocked/stale?
303. What is each project actually about?
314. Where did the user leave off?
325. How can the user jump back in immediately?
336. How can the user quickly edit status/next steps/items without leaving OpenClaw?
34
35## Default Behavior (Natural Language First)
36Default action for every user message:
371. Interpret the message.
382. Run: `scripts/project_router.sh "<user message>"`.
393. Return the router output directly in plain language.
40
41Users should not need to type scripts, Python, paths, or flags.
42
43Fallback for power users:
44- Use the short wrapper command: `project ...`
45- Examples: `project`, `project focus`, `project today`, `project inbox "idea: test"`, `project dashboard start`
46
47Plain-language request mapping:
481. "What am I working on today?" -> activity today
492. "Show my projects" -> grouped project list (Now/Later/Blocked/Done)
503. "Focus list" -> top focus items
514. "Add this idea: ..." -> inbox capture
525. "Next for project-os: ..." -> add next
536. "Mark X blocked" -> set simple status
547. "Start dashboard" -> dashboard start
558. "Resume project X" -> resume pack
569. "Only track A, B, C" -> set tracked scope (activity will only include these)
5710. "Mute X" / "Untrack X" / "Show scope" -> scope controls
58
59Response style in non-technical mode:
601. Keep responses short and direct.
612. Do not expose technical command details unless user asks.
623. For activity questions, always return `Activity Criteria` + day sections.
634. If a project name is ambiguous, ask one short clarification question.
64
65## Project Definition
66Treat an item as a project if it matches any of these:
671. Git repository folder.
682. Non-git code folder with project markers (`package.json`, `pyproject.toml`, `Cargo.toml`, etc).
693. Chat session (Claude/Codex) that does not match an existing project; create a chat-derived project.
704. Claude workspace chats should map to deeper subprojects when session folders indicate a nested workspace path.
71
72Reject likely non-project folders in collection roots (docs-only, logs, backups, notes-only folders) unless there is strong code/marker evidence.
73Reject low-signal chat-only entries as standalone projects unless they contain a useful path hint or meaningful project intent.
74
75## Required Workflow
761. Run `scripts/bootstrap.sh` first.
773. Validate coverage:
78 - run `python3 -m project_os.cli --db ~/.project_os/openclaw_test.db --config ~/.project_os/openclaw_test_config.json list-projects --limit 200`
79 - run `python3 -m project_os.cli --db ~/.project_os/openclaw_test.db --config ~/.project_os/openclaw_test_config.json list-sessions --limit 50`
80 - run `python3 -m project_os.cli --db ~/.project_os/openclaw_test.db --config ~/.project_os/openclaw_test_config.json list-items --status open --limit 80`
81 - run `python3 -m project_os.cli --db ~/.project_os/openclaw_test.db --config ~/.project_os/openclaw_test_config.json squash-chat-projects`
824. If user wants visual mode, run `scripts/start_dashboard.sh`.
835. If user wants quick resume context, run `scripts/write_memory.sh` and use `~/.project_os/PROJECT_MEMORY.md`.
84
85## First-Run (Production)
86Run this for a first-time user:
871. `scripts/openclaw_smoke_agent.sh`
882. `scripts/read_smoke_result.sh`
893. Confirm:
90 - `RESULT_STATUS=ok`
91 - `RESULT_DASHBOARD_URL=...`
92 - `RESULT_PORT_8765_LISTENING=yes`
93
94If `project-os` repo is not present locally, the skill will fail safely by default and instruct setting `PROJECT_OS_ROOT`. Remote install is explicit opt-in only.
95
96## Operation Modes
97- Dashboard mode: simple visual triage (`Focus Today`, `Now`, `Blocked`, `Later`, `Done`) and jump links.
98- Dashboard mode includes:
99 - Quick Inbox capture (freeform note -> auto-routed update/next/reminder/idea/blocker)
100 - Daily Check-In panel (done + next + blocker)
101 - Focus list, stale nudges, weekly snapshot, and server health
102- Dashboard intentionally avoids recommendation-score noise and focuses on plain language:
103 - `What it is` (derived from project files like README/package metadata)
104 - `Where left off`
105 - `Do next`
106 - inline editing: set simple status (`now/later/blocked/done`), set next action, add update/next/reminder/idea/blocker, mark items done/dismissed
107 - session resume buttons for both tools (`Resume in Claude` and `Resume in Codex`) when session link is valid
108- Memory mode: markdown snapshot for fast resume in any chat.
109
110Default recommendation: use both.
111
112## OpenClaw Command-First Updates
113Use CLI commands as the primary interface:
1141. `add-update` for what changed.
1152. `add-next` for the immediate next step (also updates project `next_action`).
1163. `add-reminder` for date/time-based follow-ups.
1174. `add-idea` for backlog thoughts.
1185. `list-items` and `set-item-status` to triage/close items.
1196. Use `scripts/project_actions.sh` for short aliases around these commands.
1207. For activity-window questions ("what did I work on today/yesterday"), run `scripts/activity_report.sh --when both` or `scripts/project_actions.sh activity --when both`.
1218. Do not guess activity by project name or status; only use timestamp evidence from the report criteria.
1229. Activity report excludes archived projects by default (use `--include-archived` only if user asks).
12310. Response contract for activity-window answers:
124 - always include `Activity Criteria`
125 - always include `Today (...)` and/or `Yesterday (...)` headings
126 - include at least one evidence line per listed project (`local_commit`, `github_push`, `session`, or `note`)
127 - if no projects match, explicitly return `- none`
128
129## OpenClaw Usage
1301. In OpenClaw, invoke this skill by name: `project-os-organizer`.
1312. For first run setup: `project setup` (or `scripts/easy_mode.sh setup`).
1323. Default day-to-day: just type plain English in chat and route through `project_router.sh`.
1334. Optional shortcuts use only `project ...`.
1345. For one-command local install from this repo, run `scripts/install_openclaw_skill.sh`.
1356. For non-interactive OpenClaw agents, use:
136 - `scripts/openclaw_smoke.sh` for strict CI-style smoke (non-zero exit on failure)
137 - `scripts/openclaw_smoke_agent.sh` for agent-safe smoke (always exits zero, returns `RESULT_STATUS`)
138 - `scripts/read_smoke_result.sh` to fetch the last smoke result file when command output is flaky
139 - `scripts/bootstrap.sh --noninteractive` (timeout-safe quick mode)
140 - `scripts/bootstrap.sh --noninteractive-full` (full refresh mode)
141 - `scripts/start_dashboard.sh --detach --restart`
142 - Smoke commands return machine-readable lines:
143 - `RESULT_STATUS`
144 - `RESULT_ERROR`
145 - `RESULT_DASHBOARD_URL`
146 - `RESULT_DASHBOARD_PID`
147 - `RESULT_PORT_8765_LISTENING`
148 - `RESULT_CURL_HEAD`
149 - `RESULT_SMOKE_LOG`
150 - `RESULT_DASHBOARD_LOG`
151 - `RESULT_RESULT_FILE`
1527. For quick editing from chat:
153 - `scripts/project_actions.sh list --limit 80`
154 - `scripts/project_actions.sh set-status --project "<name|id>" --status blocked`
155 - `scripts/project_actions.sh set-next --project "<name|id>" --text "next step"`
156 - `scripts/project_actions.sh add-update --project "<name|id>" --text "what changed"`
157 - `scripts/project_actions.sh add-next --project "<name|id>" --text "immediate next step"`
158 - `scripts/project_actions.sh add-reminder --project "<name|id>" --text "follow up" --due 2026-03-01`
159 - `scripts/project_actions.sh add-blocker --project "<name|id>" --text "what is blocked"`
160 - `scripts/project_actions.sh simple-status --project "<name|id>" --status now`
161 - `scripts/project_actions.sh focus --limit 3`
162 - `scripts/project_actions.sh stale --days 14 --limit 20`
163 - `scripts/project_actions.sh weekly --days 7 --limit 12`
164 - `scripts/project_actions.sh notify --period daily`
165 - `scripts/project_actions.sh inbox --text "freeform note"`
166 - `scripts/project_actions.sh checkin --project "<name|id>" --done "..." --next "..." --blocker "..."`
167 - `scripts/project_actions.sh duplicates --limit 50`
168 - `scripts/project_actions.sh merge --keep "<id|name>" --drop "<id|name>"`
169 - `scripts/project_actions.sh ask --text "mark project-os blocked"`
170 - `scripts/project_actions.sh set-item --item <id> --status done`
1718. For "worked on today/yesterday":
172 - `scripts/project_actions.sh activity --when both`
1739. For personal scope control:
174 - `scripts/project_actions.sh scope --set "project-os" "polymarket-trader-v2"`
175 - `scripts/project_actions.sh track --project "project-os"`
176 - `scripts/project_actions.sh mute --project "clawd"`
177 - `scripts/project_actions.sh scope`
178 - Add `--include-archived` only on explicit request.
179 - Return the output sections `Activity Criteria`, `Today (...)`, and `Yesterday (...)` so the user sees exactly how projects were counted.
180
181## Safety and Scope
1821. Local-first only.
1832. Do not mutate repositories/servers automatically.
1843. Do not invent project state; infer from scans/sessions and expose uncertainty.
1854. Prefer broad root coverage to avoid missing nested subfolders.
1865. Keep non-git project discovery at root-level by default (`include_nested_non_git_projects: false`) to avoid noisy submodules.
1876. Keep collection discovery strict: include real project subfolders, drop random text-only folders.
188
189## References
190- `references/project-definition.md`
191- `references/workflow.md`