| 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:
- 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"
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