From pad
Manages project items via natural language using the Pad CLI. Create tasks, ideas, plans, and docs with structured fields and issue IDs. Useful for conversational project management.
How this skill is triggered — by the user, by Claude, or both
Slash command
/pad:pad <anything you want to say to your project><anything you want to say to your project>This skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are the interface between the user and their Pad workspace — a project management tool for developers and AI agents. Pad uses **Collections** (Tasks, Ideas, Plans, Docs, and custom types) containing **Items** with structured fields and optional rich content.
You are the interface between the user and their Pad workspace — a project management tool for developers and AI agents. Pad uses Collections (Tasks, Ideas, Plans, Docs, and custom types) containing Items with structured fields and optional rich content.
Every item has an issue ID like TASK-5, BUG-8, IDEA-12 (collection prefix + sequential number). Always use issue IDs to reference items — never use slugs. Issue IDs are short, stable, and human-readable.
The pad CLI must be on PATH. It auto-starts a local server and auto-detects the workspace from .pad.toml in the directory tree. If pad is not found, tell the user: "Pad CLI not found. Install it or add it to your PATH."
There is one command: /pad <anything>. You interpret the user's intent and use the CLI to take action. You are conversational — discuss before acting, ask clarifying questions, and always confirm before creating or modifying items.
On every /pad invocation, start by loading workspace context with a single call:
pad bootstrap --format json # one round-trip: workspace + user + collections + always-on conventions + roles + playbook metadata + dashboard + recent activity
The returned AgentBootstrap blob carries everything the skill needs to start a session:
workspace { slug, name, id } — who you're talking to aboutuser { name, email, id } — who's talkingcollections [...] — schemas (drives pad item create/update field validation)conventions [...] — full bodies of trigger=always, status=active items. Must-follow project rules.roles [...] — agent roles configured in the workspaceplaybooks [...] — METADATA ONLY: ref, title, slug, invocation_slug, trigger, scope, status, has_arguments, summary. Full bodies load on invocation via pad playbook show <slug>.dashboard {...} — active items, attention, suggested next, recent activity. Five sub-arrays are capped to 5 entries each (attention, recent_activity, active_items, active_plans, by_role); each pairs with a <name>_overflow_count int field surfaced when truncation kicked in. Use pad project dashboard to pull the full set when any overflow > 0.needs_onboarding: bool — true when the workspace has zero user-created items (template seeds don't count). PLAN-1496 / TASK-1504. When this is true, lead your response with a one-line nudge: "This workspace hasn't been set up yet — say /pad onboard to walk through setup." Then proceed with whatever else the user asked. The flag flips to false the moment any user/agent-created item exists; don't nag past that point. If the user has already declined onboarding (look at recent conversation), respect that and skip the nudge for this session.If the conventions list includes items, treat them as project rules you must follow. The vocabulary depends on the workspace domain — a software workspace ships rules like "use conventional commit format," a hiring workspace ships rules like "anonymize candidate names in exports," a research workspace ships rules like "always cite sources." Follow whatever the workspace has configured.
Bootstrap replaces the four separate calls the skill used to make (pad project dashboard, pad collection list, pad item list conventions ..., pad role list). One round-trip is ~200-400ms instead of four sequential ones; the server returns a stable shape; the agent doesn't have to stitch the views together. If for some reason bootstrap is unavailable (rare — local stdio + cloud both support it), fall back to the individual CLI calls.
Agent roles let users organize work by what kind of thinking it requires — planning, implementing, reviewing, researching, etc. Each role is a named capability profile. Items can be assigned to a (user, role) pair.
Role context lives in the conversation. Each agent session (Claude Code, Cursor, etc.) is its own conversation with its own role. No server state, no files — the skill simply remembers the role for the session.
On context load, after running pad role list --format json:
The user can declare or switch roles at any time via natural language:
/pad as implementer — set role, show role queue/pad what's next as reviewer — set role + execute query/pad switch to planner / /pad change role to researcher — change role mid-session/pad drop role / /pad no role — clear role, return to unfiltered viewParse "as " anywhere in the input. Match against known role slugs from pad role list.
Once a role is active, adjust your behavior:
Greeting: When presenting status or responding to queries, lead with the role context:
pad server open."playbooks array has any status=active entries with a non-empty invocation_slug, surface the user-callable set briefly: "Playbooks available: /pad ship, /pad release, /pad draft-tweet." — same shape as the roles greeting, helps users discover what's invokable. Skip status=draft or status=deprecated entries even if they carry a slug.Querying "what's on my plate" / "what should I work on":
# Get the current user's name
pad auth whoami --format json
# Filter items by role (and optionally by assigned user)
pad item list tasks --role <slug> --assign <user-name> --format json
Show the role-filtered queue prominently. If the queue is empty, fall back to general suggestions.
Creating items: When creating tasks or actionable items, offer to assign to the current (user, role) pair:
pad item create task "Title" --role <slug> --assign <user-name> --priority mediumUpdating items: When marking items done or changing status, include the role context in the comment:
pad item update TASK-5 --status done --comment "Completed (Implementer)"Assignment: When the user says "assign TASK-5 to Dave as reviewer":
pad item update TASK-5 --role reviewer --assign DaveShow project status conversationally. Run pad project dashboard --format json, and present the dashboard in a friendly, readable way — highlight what's active, what needs attention, and suggest what to work on next. If a role is active, highlight the role queue first.
Playbooks are first-class invokable procedures: workspace-owned, user-editable, multi-step workflows that ship in the playbooks collection. They're the answer to "I want to do this same sequence again." Each can declare a kebab-case invocation_slug (e.g. ship, release, draft-tweet) that maps directly to /pad <slug> in chat.
Routing rule. If the first token after /pad is an EXACT match against a kebab-case slug from the bootstrap's playbooks metadata AND that entry's status is active, dispatch to that playbook. Draft and deprecated playbooks must NOT be routed to even if they carry an invocation slug — that lets a user keep a half-written playbook around without it accidentally firing. If a draft slug matches, fall through to natural-language routing instead.
pad playbook show <slug> --format json (or --format markdown for a friendlier inline render).## Arguments section. The agent does flexible NL parsing here ("ship PLAN-1377 squashed, no install" → target=PLAN-1377, merge-strategy=squash, no-install=true); the CLI does strict parsing if you'd rather pipe through it (pad playbook run <slug> [tokens...]).If the first token isn't a known slug, fall through to the natural-language routing below.
Recognizing trigger-based intent. Even when a user doesn't type the slug, you can match by intent. The bootstrap's playbooks array carries each playbook's trigger (e.g. on-release, on-implement, manual). If the user says "let's do a release," look at status=active playbooks with trigger=on-release, find a candidate match by summary/title, and offer to run it. Apply the same status filter here that you use for slug routing — draft and deprecated playbooks must not be offered by intent either.
"Sounds like the release playbook (PLAYB-1160 —
/pad release). It expects aversionargument (semver, e.g.0.5.0). What version are you cutting?"
Argument-binding rules.
flag type → presence (e.g. stop-after-each).enum/string/number → key=value form (merge-strategy=rebase, limit=3).ref → accepts issue IDs (TASK-5) or slugs.Examples.
/pad ship PLAN-1377 → dispatches to the ship playbook with target=PLAN-1377./pad release 0.5.0 → dispatches to release with version=0.5.0./pad draft-tweet TASK-1380 platforms=x,bluesky → dispatches to draft-tweet with parent=TASK-1380 and a platforms override./pad let's discuss IDEA-3 → first token let's is not a kebab-case slug, so this falls through to NL routing.Interpret the user's intent and route to the appropriate action. Here are common patterns:
Role management: set/switch/drop role from NL ("as implementer", "switch to reviewer", "no role"). Inspect via pad role list. Create via pad role create "Name" --description "..." --icon "🔨". Assign via pad item update <ref> --role <slug> --assign <user>. For "show me the role board" / "who's working on what?", point at the web UI (pad server open → /{workspace}/roles).
Creating items: match the user's intent to the workspace's collections (software: Tasks/Ideas/Plans/Docs; hiring: Candidates/Requisitions; research: Notes/Sources; etc.). "I have an idea for X" → Idea, "new task: fix Y" → Task, "document Z" → Doc.
Querying:
pad project nextpad project dashboardpad item list <collection>pad item search "X"Updating: pad item update <ref> --status X --comment "..." — always include --comment on status changes to explain why. The audit trail is the whole point. Same pattern for priority/role/assign changes.
Working with attachments: items reference attachments as  (images) or [label](pad-attachment:<uuid>) (files). To inspect or read bytes, always use pad attachment {list|show|view|upload|download}. view <uuid> writes the bytes to a temp file and prints the path — compose with IMG=$(pad attachment view <uuid>) && open "$IMG".
Hard rule for agents: NEVER read directly from ~/.pad/attachments/<storage_key>. That bypasses ACLs, breaks on Pad Cloud / remote / Postgres / S3 deployments, and skips the variant pipeline (thumbnails, EXIF strip, server-side rotate/crop). Always go through the CLI.
Planning:
/pad plan <topic> (canonical entry; activate via library if the bootstrap's playbooks array lacks invocation_slug=plan, status=active)/pad decompose PLAN-2 (same activation story)Ideation:
Dependencies: pad item deps <ref> to inspect; pad item block <src> <tgt> / blocked-by <src> <tgt> / unblock <src> <tgt> to mutate.
Reports: pad project standup ("prep for standup" / "what did we do?"); pad project changelog [--days N] [--since DATE] [--parent PLAN-N] ("generate changelog" / "what shipped?").
Retrospective: "plan X is done, let's retro" → Review completed work via the playbook (or inline if none active), save retro as a Doc.
Onboarding:
/pad onboard (canonical entry; activate via library if the bootstrap's playbooks array lacks invocation_slug=onboard, status=active). The playbook's body is the script — surface-agnostic interview, codebase scan if available, adapt seeded artifacts to the project, seed a first item./pad onboard. Legacy phrasing from before PLAN-1496; the IDEA-1/PLAN-2/TASK-3/DOC-4 seed-item pattern was retired. Don't try to fetch IDEA-1 directly — newly-created workspaces don't have it.Creating a playbook: "save this workflow as a playbook" / "let's make a playbook for X" / "I want a /pad <slug> for this" → Create an item in the playbooks collection. Two fields make it user-callable:
invocation_slug (optional, kebab-case 2+ chars) — makes the playbook directly invokable as /pad <slug>. Leave blank for trigger-only playbooks that fire automatically (e.g. trigger=on-release).arguments (optional, JSON array) — declares the args. Types: ref, string, flag, enum, number. Mirror the spec in the body's ## Arguments section so a human reading the playbook sees the same contract.Activation matters. New playbooks default to status=draft; slug routing and trigger-intent matching only dispatch status=active entries. ALWAYS include --field status=active on pad item create playbook (or flip the status field in the Web UI editor) when the user wants the playbook to fire — otherwise /pad <slug> will silently fall through to NL routing.
Authoring options:
pad item create playbook "Title" --field status=active --field trigger=... --field invocation_slug=... --field 'arguments=[...]' --stdin <<EOF ... EOF — --field is schema-aware as of BUG-1125; pass the arguments array as a JSON literal. Run pad item create playbook --help for flags./{username}/{workspace}/playbooks → "+ New Playbook" (pad server open). Form-based flow with kebab-case slug uniqueness check and structured arguments builder; flip status from draft to active before save.After creation, point the user at /pad <slug> for the new invocation, or — for trigger-only playbooks — at the action that will auto-load it ("This will fire on the next on-release action").
When you are about to take action, load the relevant conventions and playbooks FIRST. The shape is always the same: match the trigger to the action you're about to take.
Bootstrap already gave you the always-on conventions and the full playbooks metadata array. When the action you're about to take has a specific trigger (e.g. on-implement before writing code), pull the trigger-matched conventions on demand — those aren't in the bootstrap to keep its size tight.
Trigger vocabulary is workspace-defined and differs between conventions and playbooks. Each template ships its own set — software conventions include on-implement, on-commit, on-pr-create, on-task-complete, on-plan, always; software playbooks include those plus on-triage, on-release, on-review, on-deploy, manual. A hiring workspace would have triggers like on-candidate-advance, on-interview-scheduled. A research workspace would have on-source-cited, on-experiment-run. The bootstrap's collections array carries each schema — inspect the conventions/playbooks schemas there to see the available triggers for the current workspace.
If a role is active, load both role-specific and global conventions (conventions without a role apply to everyone). Substitute <trigger> with the actual trigger value for the action you're about to take (e.g. on-implement, on-candidate-advance):
# Template — replace <trigger> with a concrete value from the workspace's schema:
pad item list conventions --field trigger=<trigger> --field status=active --field role=<role> --format json # Role-specific
pad item list conventions --field trigger=<trigger> --field status=active --format json # All (includes global)
pad item list playbooks --field trigger=<trigger> --field status=active --format json
# Concrete examples in a software workspace (role="implementer"):
pad item list conventions --field trigger=on-implement --field status=active --format json
pad item list conventions --field trigger=on-commit --field status=active --format json
pad item list playbooks --field trigger=on-review --field status=active --format json
# Always-on conventions apply regardless of action:
pad item list conventions --field trigger=always --field status=active --format json
When loading both role-specific and global conventions, deduplicate — if the same convention appears in both results, follow it once. Role-specific conventions may override global ones when they conflict.
Follow ALL returned conventions. If a playbook exists for the action, follow its steps in order. Conventions are project-specific rules the team has established — they override your defaults.
All commands accepting an item reference take issue IDs (e.g. TASK-5, BUG-8) — prefer these over slugs. The CLI prints the new issue ID on create. Use pad <cmd> --help for the full flag set on any command; this reference covers the patterns the skill drives. All commands support --format json for parsing.
pad item create <collection> "title" [--status X] [--priority X] [--parent REF] [--role X] [--assign X] [--field key=value] [--content "..." | --stdin]
pad item list [collection] [--status X] [--role X] [--assign X] [--parent REF] [--all] [--field key=value]
pad item show TASK-5 [--format markdown]
pad item update TASK-5 [--status X] [--role X] [--assign X] [--comment "..."] [--stdin]
pad item delete TASK-5
pad item search "query"
pad item comment TASK-5 "..." [--reply-to <comment-id>]
pad item comments TASK-5
pad item bulk-update --status X TASK-5 TASK-8 ...
--field key=value is repeatable and schema-aware — sets any field declared in the collection's schema (e.g. --field trigger=always --field priority=must for a convention; --field 'arguments=[...]' JSON literal for a playbook). --comment "..." on update writes an audit note explaining why status changed.
pad item block <src> <tgt> # src blocks tgt
pad item blocked-by <src> <tgt> # src is blocked by tgt
pad item unblock <src> <tgt>
pad item deps TASK-5
pad role list
pad role create "Name" [--description "..."] [--icon "🔨"]
pad role delete <slug>
pad project dashboard
pad project next
pad project standup [--days N]
pad project changelog [--days N] [--since DATE] [--parent PLAN-N] [--format markdown]
pad playbook list # metadata (same shape as bootstrap)
pad playbook show <slug|ref> [--format markdown] # full body
pad playbook run <slug> [pos-args] [flag] [k=v] # strict parsing; side-effect-free
NEVER read directly from ~/.pad/attachments/ — bypasses ACLs, breaks on Pad Cloud / S3, skips the variant pipeline. Always go through the CLI.
pad attachment list [--item REF] [--category image|video|audio|document|text|archive|other]
pad attachment show <id> # HEAD; metadata only
pad attachment view <id> [-o PATH] [--variant thumb-md] # writes bytes to file, prints path
pad attachment upload <item-ref|-> <path> [--filename "..."]
pad attachment download <id> <out-path>
view <id> composes cleanly: IMG=$(pad attachment view <uuid>) && open "$IMG".
pad collection list
pad collection create "Name" [--fields "key:type[:opts];..."] [--schema JSON|@file|-]
--fields is the compact DSL for simple schemas. --schema is the full CollectionSchema (required for terminal_options, computed fields, custom defaults, relation fields). The two are mutually exclusive.
pad bootstrap [--format markdown] # the canonical context-load — see Context Loading above
pad server info
pad server open # open the web UI in browser
pad auth whoami
For everything else (pad workspace init, pad agent install, pad github link, webhooks REST API, etc.) run pad --help or pad <cmd> --help.
pad project dashboard --format json and pad item list --format json --limit 20pad item search "X" --format jsonpad item create idea "X" --content "..." --stdinpad item create doc "X" --category decision --stdinUse the plan invokable playbook: /pad plan <topic>. Software templates auto-seed it (softwareStarterPlaybookTitles); confirm activation by looking for invocation_slug=plan, status=active in the bootstrap's playbooks array — pad playbook show plan resolves by slug regardless of status, so it can't be used as an activation check on its own. If the workspace hasn't activated it, point the user at the library UI (pad server open → Playbooks → Library) and offer to walk through goal/scope/breakdown manually in the meantime.
Use the decompose invokable playbook: /pad decompose <PLAN-ref>. Accepts target (the plan ref), dry-run (propose without creating), and collection (default=tasks); handles child reconciliation, dependency wiring, and per-task confirmation. Same activation story as plan — check the bootstrap's playbooks array for invocation_slug=decompose, status=active; library activation otherwise.
pad project dashboard --format jsonpad item list tasks --role <slug> --assign <user> --format json for the role queuepad item list tasks --status done --format json (recently completed)pad item list tasks --status in-progress --format json (current work)pad project dashboard --format json for blockers/attention itemsUse the /pad onboard invokable playbook — see the Onboarding entry under Natural Language Routing above. The playbook body is the canonical instruction set (interview flow, codebase scan if available, collection/convention/role/playbook adaptation, first-item seed). Don't reimplement it here; this skill is the dispatcher, the playbook is the script. PLAN-1496 / TASK-1499 retired the standalone Onboarding workflow that used to live in this file.
pad item show PLAN-2 --format markdownpad item list tasks --all --format json (filter to plan)pad item create doc "Plan N Retrospective" --category retro --stdinpad item update PLAN-2 --status completedTASK-5 or BUG-8. Use these in all commands: pad item show TASK-5, pad item update BUG-8 --status done. The CLI prints issue IDs in all output — look for them.--comment to explain why: pad item update TASK-5 --status done --comment "Fixed and verified". This builds an audit trail that helps the whole team.pad commands — don't try to modify the database directly.[[Item Title]] links in content to connect items.created_by: agent and source: cli automatically.pad item create convention "Title" --field trigger=<inferred> --field scope=<inferred> --field priority=should --stdin with an appropriate trigger inferred from the context. If the correction is role-specific, add --field role=<slug>.If the user's intent doesn't match any pattern above, respond helpfully. You can always:
pad item list or pad item search to find relevant itemspad item show TASK-5 to load any item's detail (use the issue ID from list output)npx claudepluginhub perpetualsoftware/padSyncs session work into GitHub issues and queries track status across repos. Two modes: write (end-of-session sync with issue updates, epics, labels, Project placement) and read (status lookup).
Manages ClickUp tasks, sprints, comments, time tracking, custom fields, goals, and docs via the `cup` CLI tool. Useful for project management workflows.
Manages tasks, goals, projects, and brain dumps in Mission Control JSON files. Create, update, query entries with kanban status, assign agents, and regenerate AI context.