property
Manage custom properties on Plane work items (severity, customer impact, etc.) Arguments: <action> <project> [args...].
SKILL.mdplane-ops/skills/property/SKILL.md
GitHubProperty
Define and manage custom properties on work items. Properties are typed fields beyond the built-ins (state, priority, points). Examples: severity, customer impact, environment, root cause.
Arguments
Format: <action> <project> [args...]
action:list|create|update|delete|getproject: project name or identifier- For
create:--name,--type <text|number|select|multi-select|date|boolean|user|url>(mapped to Plane'sTEXT,DECIMAL,OPTION,OPTION+is_multi,DATETIME,BOOLEAN,RELATION+relation_type=USER,URL),--required,--type-id <work_item_type_id>(the property lives with this work item type),--options "a,b,c"(for select) - For
update: same flags
Parse from "$ARGUMENTS".
Process
- Bootstrap connector — consult
connector-bootstrap. Probe for the Plane resource toolsworkitem_property,workitem_typeandworkitem(plan-gated: a plan without work item properties refuses the calls with a message naming the feature). - Resolve project →
project_id. If--type-idnot given, resolve the work item type by name:workitem_type(action=resolve, project_id, name="Bug")returns itsid(theworkitem_type_id). - Route:
list→workitem_property(action=list, project_id, workitem_type_id?)(without ids it lists every workspace property in one call; follownext_cursor). Render: name | data type | scope (type) | required? | option countcreate→workitem_property(action=create, project_id, workitem_type_id, display_name, property_type, is_required?, is_multi?, options?). Forselect/multi-select, parse the options intooptions=[{"name": "S0"}, ...](a JSON array of{name, color, is_default}).TEXTandDATETIMEneed adisplay_format; list their allowed values from the tool description.update→ resolve by name →workitem_property(action=update, workitem_property_id, project_id?, workitem_type_id?, ...). Changing data type breaks existing values — warn loudly. Options are managed withcreate_option/update_option/delete_option.delete→ confirm, thenworkitem_property(action=delete, workitem_property_id, ...). Existing values are dropped. (Detaching a property from a type only removes the association:workitem_property(action=manage_type_properties, workitem_type_id, detach_ids=[...]).)get→workitem_property(action=retrieve, workitem_property_id, ...)+ a sample of items that have it set:workitem(action=list, project_id, pql='cf["<property-id>"] IS NOT NULL', per_page=5). A single item's value:workitem_property(action=get_value, project_id, workitem_id, property_id); to set it:set_value.
- Confirm — re-list.
Property design rules
- Use a property when: data is structured, queryable, and reportable (severity, environment, customer).
- Use a label when: data is freeform tagging, optional, no values needed (
needs-design,flaky). - Use a work item type when: the workflow itself differs (Bug vs Spike).
Three buckets, three tools — don't mix. See labels-states-properties skill.
Examples
/property list "TaskFlow"
/property create "TaskFlow" --name severity --type select --options "S0,S1,S2,S3" --required
/property create "TaskFlow" --name "customer impact" --type number
/property create "TaskFlow" --name environment --type select --options "prod,staging,dev"
/property update "TaskFlow" severity --required false
/property delete "TaskFlow" "old field"