Project OS Organizer
by @ldodee
Privacy-first, chat-first project manager for vibe coders. Track projects, capture updates, and resume work across local folders, Claude/Codex, and GitHub wi...
clawhub install project-os-organizerπ About This Skill
name: project-os-organizer description: "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." metadata: {"clawdbot":{"emoji":"ποΈ","requires":{"bins":["python3"],"env":["PROJECT_OS_ROOT (required unless explicit remote install opt-in)","PROJECT_OS_INCLUDE_CHAT_ROOTS=1 (optional)","PROJECT_OS_ENABLE_GITHUB_SYNC=1 (optional)"]},"os":["linux","darwin","win32"]}}
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: 1. See what is active now. 2. Capture progress and next steps fast. 3. Resume any project in one jump (local/GitHub/chat).Security Defaults
1. Remote install is disabled by default. 2. Chat transcript indexing is disabled by default. 3. GitHub sync/token usage is disabled by default. 4. Home-directory heuristic discovery is disabled by default.To opt in explicitly:
1. PROJECT_OS_INCLUDE_CHAT_ROOTS=1 enables chat transcript indexing.
2. PROJECT_OS_ENABLE_GITHUB_SYNC=1 enables GitHub username/token integration.
3. PROJECT_OS_ENABLE_HOME_DISCOVERY=1 enables broad home-directory discovery.
4. 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: 1. What projects exist right now? 2. Which are active/blocked/stale? 3. What is each project actually about? 4. Where did the user leave off? 5. How can the user jump back in immediately? 6. How can the user quickly edit status/next steps/items without leaving OpenClaw?Default Behavior (Natural Language First)
Default action for every user message: 1. Interpret the message. 2. Run:scripts/project_router.sh "" .
3. Return the router output directly in plain language.Users should not need to type scripts, Python, paths, or flags.
Fallback for power users:
project ...project, project focus, project today, project inbox "idea: test", project dashboard startPlain-language request mapping: 1. "What am I working on today?" -> activity today 2. "Show my projects" -> grouped project list (Now/Later/Blocked/Done) 3. "Focus list" -> top focus items 4. "Add this idea: ..." -> inbox capture 5. "Next for project-os: ..." -> add next 6. "Mark X blocked" -> set simple status 7. "Start dashboard" -> dashboard start 8. "Resume project X" -> resume pack 9. "Only track A, B, C" -> set tracked scope (activity will only include these) 10. "Mute X" / "Untrack X" / "Show scope" -> scope controls
Response style in non-technical mode:
1. Keep responses short and direct.
2. Do not expose technical command details unless user asks.
3. For activity questions, always return Activity Criteria + day sections.
4. 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: 1. Git repository folder. 2. Non-git code folder with project markers (package.json, pyproject.toml, Cargo.toml, etc).
3. Chat session (Claude/Codex) that does not match an existing project; create a chat-derived project.
4. 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
1. Runscripts/bootstrap.sh first.
3. 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
4. If user wants visual mode, run scripts/start_dashboard.sh.
5. 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: 1.scripts/openclaw_smoke_agent.sh
2. scripts/read_smoke_result.sh
3. Confirm:
- RESULT_STATUS=ok
- RESULT_DASHBOARD_URL=...
- RESULT_PORT_8765_LISTENING=yesIf 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
Focus Today, Now, Blocked, Later, Done) and jump links.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
Default recommendation: use both.
OpenClaw Command-First Updates
Use CLI commands as the primary interface: 1.add-update for what changed.
2. add-next for the immediate next step (also updates project next_action).
3. add-reminder for date/time-based follow-ups.
4. add-idea for backlog thoughts.
5. list-items and set-item-status to triage/close items.
6. Use scripts/project_actions.sh for short aliases around these commands.
7. 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.
8. Do not guess activity by project name or status; only use timestamp evidence from the report criteria.
9. Activity report excludes archived projects by default (use --include-archived only if user asks).
10. 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 - noneOpenClaw Usage
1. In OpenClaw, invoke this skill by name:project-os-organizer.
2. For first run setup: project setup (or scripts/easy_mode.sh setup).
3. Default day-to-day: just type plain English in chat and route through project_router.sh.
4. Optional shortcuts use only project ....
5. For one-command local install from this repo, run scripts/install_openclaw_skill.sh.
6. 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
7. For quick editing from chat:
- scripts/project_actions.sh list --limit 80
- scripts/project_actions.sh set-status --project "" --status blocked
- scripts/project_actions.sh set-next --project "" --text "next step"
- scripts/project_actions.sh add-update --project "" --text "what changed"
- scripts/project_actions.sh add-next --project "" --text "immediate next step"
- scripts/project_actions.sh add-reminder --project "" --text "follow up" --due 2026-03-01
- scripts/project_actions.sh add-blocker --project "" --text "what is blocked"
- scripts/project_actions.sh simple-status --project "" --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 "" --done "..." --next "..." --blocker "..."
- scripts/project_actions.sh duplicates --limit 50
- scripts/project_actions.sh merge --keep "" --drop ""
- scripts/project_actions.sh ask --text "mark project-os blocked"
- scripts/project_actions.sh set-item --item --status done
8. For "worked on today/yesterday":
- scripts/project_actions.sh activity --when both
9. 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
1. Local-first only. 2. Do not mutate repositories/servers automatically. 3. Do not invent project state; infer from scans/sessions and expose uncertainty. 4. Prefer broad root coverage to avoid missing nested subfolders. 5. Keep non-git project discovery at root-level by default (include_nested_non_git_projects: false) to avoid noisy submodules.
6. Keep collection discovery strict: include real project subfolders, drop random text-only folders.References
references/project-definition.mdreferences/workflow.md