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---56# Project OS Organizer Skill78## Why This Skill9Use 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).1314## Security Defaults151. 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.1920To 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.2526## Goal27Produce 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?3435## 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.4041Users should not need to type scripts, Python, paths, or flags.4243Fallback for power users:44- Use the short wrapper command: `project ...`45- Examples: `project`, `project focus`, `project today`, `project inbox "idea: test"`, `project dashboard start`4647Plain-language request mapping:481. "What am I working on today?" -> activity today492. "Show my projects" -> grouped project list (Now/Later/Blocked/Done)503. "Focus list" -> top focus items514. "Add this idea: ..." -> inbox capture525. "Next for project-os: ..." -> add next536. "Mark X blocked" -> set simple status547. "Start dashboard" -> dashboard start558. "Resume project X" -> resume pack569. "Only track A, B, C" -> set tracked scope (activity will only include these)5710. "Mute X" / "Untrack X" / "Show scope" -> scope controls5859Response 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.6465## Project Definition66Treat 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.7172Reject 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.7475## Required Workflow761. 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`.8485## 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`9394If `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.9596## Operation Modes97- 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 health102- 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/dismissed107 - session resume buttons for both tools (`Resume in Claude` and `Resume in Codex`) when session link is valid108- Memory mode: markdown snapshot for fast resume in any chat.109110Default recommendation: use both.111112## OpenClaw Command-First Updates113Use 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 (...)` headings126 - include at least one evidence line per listed project (`local_commit`, `github_push`, `session`, or `note`)127 - if no projects match, explicitly return `- none`128129## OpenClaw Usage1301. 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 flaky139 - `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.180181## Safety and Scope1821. 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.188189## References190- `references/project-definition.md`191- `references/workflow.md`