page
Create, list, get, or update a Plane page (project or workspace scope) Arguments: <action> [scope] [project] [args...].
SKILL.mdplane-ops/skills/page/SKILL.md
GitHubPage
Manage Plane Pages — long-form documents attached to a project or to the workspace. Delegates rendering rules to the pages-publishing skill and tool resolution to connector-bootstrap.
Arguments
Format: <action> [scope] [project] [args...]
action:create|list|get|update|archive|deletescope:project(default) |workspaceproject: project name or identifier (required whenscope=project)- Remaining: title, content source (
--from-file,--from-template, inline body),--page-idforget/update
Parse from "$ARGUMENTS".
Process
- Bootstrap connector — consult
connector-bootstrap. ProbeToolSearchfor the Plane resource toolspageandproject(mcp__<server>__pagetakes every page action below). - Resolve scope:
project→project(action=list)→project_idworkspace→ no project lookup; omitproject_idfrom everypagecall
- Route by action:
create→ gathernameanddescription_html. Sources of body, in order of preference:--from-file <path>→ read file, convert markdown→HTML if needed--from-template <name>→ use a template frompages-publishingskill (sprint-report,retro,release-notes,roadmap,milestone-update,meeting-notes,decision-log,spec,runbook,blank)- inline body in arguments → wrap in
<p>paragraphs - none → ask the user once for the body
Call
page(action=create, project_id?, name, description_html). A page's parent is fixed at creation: passparent_id(nest under a page) orcollection_id(file into a collection), never both.
list→page(action=list, project_id?)(follownext_cursor); each entry reports itsparent_idandcollection_id.get→page(action=retrieve, project_id?, page_id). Render the HTML back as readable markdown for the terminal.update→page(action=retrieve, ...)first, edit the full HTML, thenpage(action=update, project_id?, page_id, description_html, name?):description_htmlreplaces the whole body, so send the complete edited page, not a fragment. A locked or archived page is refused.archive→page(action=archive, project_id?, page_id)(hides it;archive=falserestores it).delete→ destructive: show the page, ask for explicit confirmation,page(action=archive)it first (delete is refused for a page that is not archived), thenpage(action=delete, project_id?, page_id).
- Confirm — print the page name, ID, and URL. Suggest where to link it (cycle description, Slack, README).
Examples
/page create project "TaskFlow" "Q2 Engineering Plan" --from-file ./plan.md
/page create project "TaskFlow" "Sprint 14 Report" --from-template sprint-report
/page create workspace "Team Handbook"
/page get project "TaskFlow" --page-id 7c8e...
/page update project "TaskFlow" --page-id 7c8e... --from-file ./plan-v2.md
/page list project "TaskFlow"
Best Practices
- Project pages live with the project they document — use them for sprint reports, retros, decision logs, runbooks.
- Workspace pages are for cross-project content — handbooks, OKRs, hiring loops.
- Always include a "Last updated" line at the top — Plane does not surface freshness in the sidebar.
- Prefer editing an existing page (e.g. roadmap) over recreating it; recreating breaks links.