vitrinka.docs

MCP tool reference

Every tool the vitrinka MCP server exposes.

Every tool the deployment's MCP endpoint serves, grouped by area. This is the same vocabulary an agent sees on a live connection — names, titles and descriptions are quoted verbatim from the server's tool table. The catalogue a registration serves is scoped by vitrinka setup from the installed plugins (/mcp?modules=…).

Tools marked read-only never write; everything else is a write and goes through workspace scoping and, where armed, the default-workspace confirmation gate. Tools whose name is <verb>_<kind> are not listed on a live connection: call them as the generic verb with kind (list {kind: "sprint"}); docs {topic: "kind:<kind>"} answers the kind's contract. Every tool accepts select, jq and budget, and a reply over the budget is withheld behind an over_budget envelope that names the narrowing arguments.

Generic verbs

list — List a kind

Page a kind. Contract: docs {topic:"kind:<kind>"}.

Module: core · Read-only.

get — Read a kind

Read a kind; docs kind:<kind> has its contract.

Module: core · Read-only.

create — Create one of a kind

Create one kind using its arguments. Contract: docs {topic:"kind:<kind>"}.

Module: core

update — Update a kind

Update a kind; docs kind:<kind> has its contract.

Module: core

delete — Delete one of a kind

Delete one kind using its arguments. Contract: docs {topic:"kind:<kind>"}.

Module: core

Tasks, epics, stories by title words, plus pages, boards, tags, cards, sessions, shots, annotations (by №); mode:"resolve": one task reference → verdict, ≤5 candidates.

Module: core · Read-only.

Boards

list_boards — List boards

List annotation boards (slug, title, project, subgroup, tags, url). ALWAYS narrow — project, subgroup, board_type (e.g. journeys) and/or tags run as one indexed query; unscoped exceeds any budget.

Call as list {kind: "board", …}

Module: core · Read-only.

create_board — Create board

Create a board: slug, url and metadata back. board_type defaults to "board" ("brainstorm" or a custom token for sub-types); stamp project and subgroup (reviews · testing · sessions · brainstorming · design · journeys; inferred when omitted). Then ARM THE LISTENER — a board without one queues annotations nobody reacts to.

Call as create {kind: "board", …}

Module: core

set_board_meta — Update board metadata

Update a board's subgroup, theme, tags, archived flag or meta bag (meta is a shallow merge-patch) — contract: docs {topic:"organization"}.

Module: core

compose_board — Compose board content

Place a batch of AI-authored content on a board — cards, frames, wires, questions — by intent, never coordinates; all-or-nothing — contract: docs {topic:"composing"}, payloads docs {topic:"<kind>"}.

Module: core

update_cards — Update board cards

Batch-edit your own AI-layer cards and frames, remove (soft, 30 days) or restore; others' cards take the 409 confirm handshake — contract: docs {topic:"composing"}.

Module: core

arrange — Arrange board cards

Auto-align board cards by intent — mode, gap/padding, scope; save:true persists a section layout — contract: docs {topic:"sections"}.

Module: core

scrape_board — Read board digest

Read a board as one digest: cards with section, media URLs, notes, annotations, journey chains, questions and the sections map; section isolates one journey — contract: docs {topic:"sections"}.

Module: core · Read-only.

list_sections — List board sections

A board's journey-section index: every section (name, bounds, member count, order, journey/pass) plus journeys [{journey, title, passes, latest}] — cheaper than scrape_board when you only need the map to pick a section or journey.

Call as list {kind: "section", …}

Module: core · Read-only.

highlight — Highlight board region

Draw a live ink rectangle on an annotation's shot card (defaults to its region; x/y/w/h in source pixels) — "the element you mean is HERE".

Module: rare

board_working — Show working status

Narrate what you are doing on a brainstorm board: open tabs show the status line and expected ghost tiles where the next questions land. Post it when a ↻ Regenerate batch arrives, then compose; it clears when questions land; decays after 90 s.

Module: rare

get_capsule — Get work capsule

One annotation's compact markdown work brief (same shape wait_for_work delivers): ask, region, source set, thread tail, protocol. Cheaper than get_annotation when you just need to act.

Call as get {kind: "capsule", …}

Module: pm · Read-only.

list_tags — List tags

The tag vocabulary with per-entity usage counts (boards / cards / sessions), label, colour, icon, description — read BEFORE tagging to reuse the operator's vocabulary; list_boards {tags} fetches carriers.

Call as list {kind: "tag", …}

Module: pm · Read-only.

share_board — Mint a share link

Mint a capability share link (the URL is the credential) for the WHOLE board; never on a board carrying drafts; returns {id, mode, url} — contract: docs {topic:"organization"}.

Module: core

undo — Undo your last batch

Revert your newest batch on a board — your own stack only, the user's ⌘Z never touches it; answers {applied, label}; applied 0 = nothing of yours to undo.

Module: core

import — Import a truth source

Turn a truth source (openapi · sqlddl · compose · pgschema) into ONE refreshable diagram card; the server places it, refresh re-parses it later.

Module: core

refresh — Refresh a living card

Re-parse a living-source card — an imported diagram from its stored or new source, a page from pushed markdown — keeping human overrides; answers the card.

Module: core

Sets and screenshots

list_sets — List artifact sets

The artifact sets of a project (all branches) or one branch — newest first, no file lists; each carries a share URL, version, key, optional custom name and title.

Call as list {kind: "set", …}

Module: core · Read-only.

get_set — Get artifact set

Get one artifact set: metadata (version, key, name, title, commit, PR, issue) plus its full file list and share URL.

Call as get {kind: "set", …}

Module: core · Read-only.

search_shots — Search screenshots

Search the cross-set screens library — every ingested screenshot — by project, journey, surface, branch, kind, free text (route, note, title, label) and time range; newest shot per screen by default, all=true every occurrence. Pulls screens onto boards.

Call as search {kind: "shot", …}

Module: qa · Read-only.

rename_set — Rename artifact set

Set or change a set's custom URL name — e.g. name acme/main v2 "payout-flow" so …/w/<ws>/acme/main/payout-flow resolves; an empty name clears it; permission-gated.

Module: rare

update_set — Update set metadata

Edit a set's mutable metadata: custom name and/or human title. Omitted fields stay untouched; empty string clears. Requires an authenticated connection with permission for this operation.

Call as update {kind: "set", …}

Module: core

list_components — List UI components

A project's indexed UI components as compact rows (library, name, kind, summary) — load BEFORE mocking its UI so mockups use the real vocabulary; filter by library in monorepos; empty = vitrinka project index --components has not run.

Call as list {kind: "component", …}

Module: core · Read-only.

get_component — Get UI component

One indexed component in full: props (names/types), variant vocabulary, summary, source path. Use after list_components when a mockup needs the exact prop shape.

Call as get {kind: "component", …}

Module: core · Read-only.

Work queue

wait_for_work — Wait for annotation work

Drain scoped work once. On idle end the model turn; never re-poll. Background waiting and repeated-poll correction: docs {topic:"guide:listening"}.

Module: core

list_work — List work items

Annotation work items FIFO: id, board, intent (fix · investigate · refactor · redesign · reshoot · note · other), prompt, source ref, crop URL. ALWAYS SCOPE with board or project + branch — unscoped is every session's backlog; status=open is what waits on an agent.

Call as list {kind: "work", …}

Module: core · Read-only.

get_annotation — Get annotation

One annotation's full brief: region, intent, prompt revisions, thread (with attachments), fix attempts, explicit ⌖E refs (elements the user pointed at — rank above implicit context), overlapping element context, the card's source set; get_card_image {annotation} SEES the region.

Call as get {kind: "annotation", …}

Module: core · Read-only.

set_status — Set annotation status

Move an annotation: "working" on pickup, "in_review" after the after-shot and reply; never "resolved"; 409 cancelled = withdrawn — contract: docs {topic:"annotation"}.

Module: core

reply — Reply to annotation

Post a reply into an annotation's thread as the agent (pass agent): report what was done, ask a clarifying question, or explain a push-back.

Module: core

attach_after — Attach after-shot

Attach the after-shot to an annotation from a pushed set version — the canonical way to show a fix — contract: docs {topic:"annotation"}.

Module: core

get_card_image — Get card image

See a shot card's pixels + {width, height, cardVersion} (annotate's source space, not imageWidth/imageHeight); cardIds: survey sheet; run: a review sheet; annotation: its crop — docs {topic:"annotation"}.

Module: core · Read-only.

annotate — Annotate screens (agent findings)

File your OWN findings as staged annotations on shot cards: THE answer to "review these screens"; regions: source px of cardVersion (docs annotation).

Module: core

agent_verdict — Release or dismiss staged findings

Verdict on a board's staged agent-authored findings: accept releases them to the work wire (the listener drains them), dismiss cancels; every id must be staged on this board.

Module: core

Questions

ask_board — Ask a board question

Ask the operator a multiple-choice or text question on a board, optionally anchored; answers stage until ↑ Send — contract: docs {topic:"composing"}.

Module: rare

get_questions — Get board questions

A board's FULL question record — options, answer, note rider, ⌖E refs, answeredBy, staged/sent, pivot, retracted — the DURABLE read after a batch left the wire: reconstruct decisions, audit unattended answers, see staged picks. Never drains.

Call as get {kind: "questions", …}

Module: core · Read-only.

retract_questions — Retract open questions

Withdraw your own OPEN questions a settled answer invalidated, then compose replacements; answered or staged ones answer a per-item 409 (see results[]); rows stay in get {kind: "questions"} as retracted:true; remove the decision tiles with update_cards yourself.

Module: rare

update_question — Update open question

Rewrite one of your OPEN questions in place (prompt, stakes, options, multiSelect, pivot), keeping id and tile; 409 once answered. answer (+ note) alone records a decision settled off the board — the tile closes, delivered, no Send; update the tile's text with update_cards.

Call as update {kind: "question", …}

Module: core

answer_ask — Answer an info request

Stream an answer to an ask-AI item: chunks with partial:true append, the final chunk without it settles ✓ (failed:true ✗); appending after settle 409s.

Module: rare

update_brainstorm — Cancel, reopen or finish a brainstorm

Change a brainstorm's status: action "plan" is the dry run (the tasks a cancel moves to each project's cancelled state — linked tasks, their epic, its open children — or a reopen restores); cancel or reopen apply the chosen rows; finish marks an epic-less brainstorm Finished.

Call as update {kind: "brainstorm", …}

Module: core

Sessions

get_session — Get session digest

One recorded user-testing session as a compact digest — THE way to traverse it, never raw events: steps (route, action, notes, cardId; folded runs carry seqs), deduped issues with live board status, vitals per route, facets, totals. Address by id or board slug.

Call as get {kind: "session", …}

Module: qa · Read-only.

update_session — Update a session

Close, pause or resume a recorded session, or stamp its pipeline (triaged · fixPr · tested · journeys); done lands it on its journey board; journeys record a run per plan.

Call as update {kind: "session", …}

Module: qa

Tasks, sprints and milestones

create_task — Create a task

File a task in a project's task engine: reporter attribution rides your token, subtasks pass parentId, custom fields ride fields (list_fields; epics carry the feature preset); the reply's url is the task's ONE link — print it as returned.

Call as create {kind: "task", …}

Module: pm

update_task — Update a task

Patch one task — every field optional; explicit zeros clear (parentId 0 detaches, sprintId/milestoneId 0 unassign, "" unsets dates); labels and assignees REPLACE their sets (label_task edits incrementally); reporter is immutable.

Call as update {kind: "task", …}

Module: pm

list_tasks — List tasks

One cursor page of a project's tasks as COMPACT rows in PM working order — EXPLORE, never dump: narrow with f first, pass nextCursor back as cursor, read one body with get_task; summarize_tasks counts without rows.

Call as list {kind: "task", …}

Module: pm · Read-only.

summarize_tasks — Summarize tasks

Exact filtered task counts from the server — total and groups by state, type or priority — without reading rows; more than 100 groups is an error.

Module: pm · Read-only.

get_task — Get a task

Read one task: body, dates, ids, resolved reporter/assignee actors, custom fields, url (print as returned); include embeds bounded pages — children, links, external, refs (the attachment INDEX; load through read_task_ref), events, comments; view:"pickup" is the bounded session start.

Call as get {kind: "task", …}

Module: pm · Read-only.

get_work_time — Read work time

Automatic human and agent effort for a bounded period — human overlap counted once, parallel agent sessions summed, tool time a subset, waiting/unknown separate — as totals plus task/person/day groups, no raw evidence; scope defaults to mine, team follows workspace permissions.

Call as get {kind: "work_time", …}

Module: me · Read-only.

get_work_evidence — Read work evidence

One captured work interval plus a bounded newest-first page of its corrections (nextBefore pages back); owner or an authorised manager only (audited), project permission applies; no screenshots, keystrokes or transcripts exist.

Call as get {kind: "work_evidence", …}

Module: me · Read-only.

get_work_forecasts — Read work forecast history

A bounded newest-first page of immutable estimate override versions for a task (nextBefore pages back; latest carries the current override; null = automatic, zero = a real estimate); get_work_time with taskId gives the effective forecast.

Call as get {kind: "work_forecasts", …}

Module: me · Read-only.

create_sprint — Create a sprint

Create an outcome scope with optional dates, a goal and declared coverage. Names are unique per project. Multiple sprints may be active; dates never appear implicitly.

Call as create {kind: "sprint", …}

Module: pm

update_sprint — Update a sprint

Rename or re-date one of a project's sprints (name collisions answer 409; "" clears a date). There is deliberately no delete.

Call as update {kind: "sprint", …}

Module: pm

list_sprints — List sprints

List a project's sprints, oldest first.

Call as list {kind: "sprint", …}

Module: pm · Read-only.

list_categories — List categories

Page the permanent workspace category vocabulary.

Call as list {kind: "category", …}

Module: pm · Read-only.

create_category — Create a category

Create a permanent workspace category; requires workspace admin.

Call as create {kind: "category", …}

Module: pm

update_category — Update a category

Configure a category using its current version; requires workspace admin.

Call as update {kind: "category", …}

Module: pm

get_session_scope — Read a session scope

Read explicit harness binding: unknown, none or sprint.

Call as get {kind: "session_scope", …}

Module: pm · Read-only.

update_session_scope — Bind a session scope

Bind a harness session to none or a sprint using current version (0 for unknown).

Call as update {kind: "session_scope", …}

Module: pm

create_scope_resolution — Resolve a task's scope

Resolve feature, child, followup or verified-bug scope without creating a task. Multiple matches require selection; pass the request to task creation atomically.

Call as create {kind: "scope_resolution", …}

Module: pm · Read-only.

get_scope_readiness — Read scope readiness

Page Before/Ship/After obligations; omit id for project scope. Carry first-page scopeVersion with after; 409 requires restarting.

Call as get {kind: "scope_readiness", …}

Module: pm · Read-only.

get_now — Read Now

Read bounded needs-you, active outcomes and next work without requiring Eve.

Call as get {kind: "now", …}

Module: pm · Read-only.

get_copilot — Read the project copilot

Project front page: Eve's brief and moves, needs you, gating bugs, next, ≤ 3 active-sprint cockpits, next 7 days, activity. Works without Eve.

Call as get {kind: "copilot", …}

Module: pm · Read-only.

get_cockpit — Read a sprint cockpit

One sprint's cockpit: goal, counts, obligations per phase, gating bugs, scope change, people load, activity, next 7 days, Eve's brief. id: a sprint id from list {kind:"sprint"}.

Call as get {kind: "cockpit", …}

Module: pm · Read-only.

list_sprint_members — List sprint members

Page unfinished members before explicit carry selection.

Call as list {kind: "sprint_member", …}

Module: pm · Read-only.

create_sprint_start — Start a sprint

Start this sprint alongside existing active scopes; no implicit dates or completion.

Call as create {kind: "sprint_start", …}

Module: pm

create_sprint_transition_preview — Preview a sprint transition

Preview closing a sprint with only selected taskIds; destinationId 0 explicitly means backlog.

Call as create {kind: "sprint_transition_preview", …}

Module: pm · Read-only.

create_sprint_transition — Apply a sprint transition

Apply a reviewed transition preview with a stable requestId; stale scope returns 409.

Call as create {kind: "sprint_transition", …}

Module: pm

create_release_candidate — Create a release candidate

Prepare exact repository revisions and builds for sprint id at scopeVersion. Cutting notes does not prove shipment.

Call as create {kind: "release_candidate", …}

Module: pm

get_release_candidate — Read a release candidate

Read exact candidate identity and currentness.

Call as get {kind: "release_candidate", …}

Module: pm · Read-only.

list_release_candidates — Page candidates for sprint id

Page candidates for sprint id.

Call as list {kind: "release_candidate", …}

Module: pm · Read-only.

list_candidate_evidences — Page original evidence for candidate id

Page original evidence for candidate id.

Call as list {kind: "candidate_evidence", …}

Module: pm · Read-only.

create_candidate_evidence — Record original candidate evidence

Record original candidate evidence. Agents must set verified:false; authorized humans verify through the browser.

Call as create {kind: "candidate_evidence", …}

Module: pm

list_shipments — List shipments

Page immutable shipped snapshots; evidence belongs to exact candidate identity.

Call as list {kind: "shipment", …}

Module: pm · Read-only.

get_history_chapter — Read a history chapter

Read a chapter's spread (cover, narrative, numbers, boards, documents) and its first original sources; cursor pages sources and pins the snapshot.

Call as get {kind: "history_chapter", …}

Module: pm · Read-only.

update_history_chapter — Update a history chapter

Rewrite a History chapter's narrative (title, body, the narrativeVersion read last) or pin its cover to a screen key from its spread ("" = the server's pick); an edit beats Eve's draft. Returns the chapter and spread.

Call as update {kind: "history_chapter", …}

Module: pm

create_history_edition — Create a history edition

Export one History chapter (from) or a range (from…to, at most 60) as a doc artifact on the project's artifacts board; returns its /a/{id} url.

Call as create {kind: "history_edition", …}

Module: pm

get_overview — Read the project board

The project board: the human-level work in Planned (top-ranked 8 + total), Building, Built and Shipped (newest first, next cursor), the strip (open, shipped this month, live, prod deploy, open release, active goals), newest History chapters (ids for get history_chapter; chapters = chaptersNext pages older ones). after = Shipped's next cursor: its next page.

Call as get {kind: "overview", …}

Module: pm · Read-only.

create_consolidation_preview — Preview a consolidation

Preview explicit category and parent edits without changing identity or provenance.

Call as create {kind: "consolidation_preview", …}

Module: pm · Read-only.

create_consolidation — Apply a consolidation

Apply reviewed consolidation with version checks and an idempotency requestId.

Call as create {kind: "consolidation", …}

Module: pm

create_milestone — Create a milestone

Create a milestone in a project. Names are unique per project (409 on collision); append-only rows, update_milestone fixes mistakes.

Call as create {kind: "milestone", …}

Module: pm

update_milestone — Update a milestone

Rename, re-date or mark reached one of a project's milestones (name collisions 409; "" clears the due date; reached:true stamps reachedAt now and ripens every todo waiting on it, false clears it); no delete.

Call as update {kind: "milestone", …}

Module: pm

list_milestones — List milestones

List a project's milestones, due-date order.

Call as list {kind: "milestone", …}

Module: pm · Read-only.

ripe_todos — Ripe todos

The todos whose condition holds NOW (overdue, within lead, milestone, typed when), computed server-side; pass branch/task/paths so those fire; ≤10 rows with why.

Module: me · Read-only.

complete_todo — Complete a todo

Mark a todo done; a recurring todo advances to its next occurrence and stays open (recurred:true); not a todo → 422.

Module: me

mark_deploy — Mark a deploy

Record that a commit reached an environment (prod, staging, …) — the fact deployed todo conditions wait on; idempotent per (project, env, sha); admin+ credential only (a member is 403).

Module: rare

create_agenda — Plan a task on a day

Put an EXISTING task on a person's day ("add to today's todos <task>"): all-day, or a block with at/for; one open item per person and task (repeating answers or moves it); never plan by editing dueAt — free text is a todo task first.

Call as create {kind: "agenda", …}

Module: me

list_agenda — List an agenda

Days as compact rows: planned items (open ones from earlier days float onto today as "from <day>"), people's due work and deadlines; item is the id update/delete {kind: "agenda"} take; default you, today + 6 days.

Call as list {kind: "agenda", …}

Module: me · Read-only.

update_agenda — Move or tick an agenda item

Move an agenda item to another day, set or clear its time, re-rank it, or tick it: done closes the item only — the task's state never moves (a todo completes through its own door).

Call as update {kind: "agenda", …}

Module: me

delete_agenda — Remove an agenda item

Take an item off its day; the task itself is untouched.

Call as delete {kind: "agenda", …}

Module: me

list_states — List project states

A project's states in order — key, name, group (backlog | unstarted | started | completed | cancelled), default; a task's state is one of these keys, the legacy status derives from the group.

Call as list {kind: "state", …}

Module: pm · Read-only.

list_fields — List custom fields

A project's custom-field definitions — key, label, kind (text · longtext · select · multiselect · checklist · number · date · url · relation · flow), options, preset, appliesTo, position, required; values live on the task's fields and validate against the kind on every write.

Call as list {kind: "field", …}

Module: pm · Read-only.

create_field — Define a custom field

Add a custom-field definition to a project. Admin only (member-scoped tokens are refused). Key is a snake_case slug and immutable; fieldKind is immutable. select/multiselect need options.

Call as create {kind: "field", …}

Module: pm

update_field — Update a custom field

Patch a custom-field definition by key — label, options, appliesTo, position, required (key and kind are immutable). Admin only.

Call as update {kind: "field", …}

Module: pm

delete_field — Delete a custom field

Remove a custom-field definition AND every value stored under it in the project. Admin only.

Call as delete {kind: "field", …}

Module: pm

list_labels — List labels

A project's labels (name order, max 500), created on demand by create_task.labels, update_task.labels (replace) and label_task (add/remove); eve-* are TRIGGER labels — applying one fires that Eve flow.

Call as list {kind: "label", …}

Module: pm · Read-only.

label_task — Add or remove labels on a task

Add and/or remove labels in one write (created on demand); the reply is the full set; eve-* are trigger labels — apply one only to request that flow.

Module: pm

create_comment — Comment on a task

Append a markdown comment (max 32 KiB) to a task: @mentions land in that person's My work, @eve asks Eve to reply under it, parentId makes it a REPLY in that thread (any depth); attribution rides your token.

Call as create {kind: "comment", …}

Module: pm

list_comments — List task comments

Page a task's comments oldest first (keyset: pass nextAfter back as after).

Call as list {kind: "comment", …}

Module: pm · Read-only.

add_task_ref — Attach a ref to a task

Attach a session, shot, board, file, PR ("owner/repo#n") or run, or link a typed document by URL; refs are versioned — contract: docs {topic:"tasks"}.

Module: pm

upload_task_file — Upload a text file as task evidence

Store inline TEXT as a typed, versioned attachment (same filename = next version; versionOf continues a lineage); binaries go through vitrinka task upload — contract: docs {topic:"tasks"}.

Module: pm

hand_back — Hand a task back

The ONE door ending a session's work on a task: next lands as steps/gates on it, a child only with task:true; PRINT rendered VERBATIM — contract: docs {topic:"tasks"}.

Module: pm

spot — Spot something out of scope

File something spotted but not done here as a child of the bound task or the rolling 'Found during implementation' epic; print the url — contract: docs {topic:"tasks"}.

Module: qa

read_task_ref — Read a task attachment under a token budget

Load ONE attachment progressively: raw under budget tokens, distilled above it or with question; read the refs index (meta.tokens, meta.hint) first — contract: docs {topic:"tasks"}.

Module: pm · Read-only.

ask_task — Ask Eve a question about a task or project

Ask Eve ONE question about a task (id: cited answer) or a whole project (project: answer + task urls); writes nothing; AI credits; 501 = no backend, don't retry.

Module: pm · Read-only.

promote_meeting — Promote a diary meeting card to a meeting task

Turn ONE meeting card on the signed-in user's diary day board into a meeting task in a project (toWorkspace/toProject name the destination; the project must exist), copying recording and transcript as file refs; owner only; idempotent. Address later calls to THAT workspace.

Module: rare

meeting_notes — Ask Eve for a meeting's notes, decisions and action items

Run Eve's meeting flow over a meeting task's transcript: a versioned notes ref, a summary distill, the decisions checklist, every action item as a PENDING intake draft (no task without a human verdict); board:true composes the meeting board. 409 without a transcript; 501 without an AI backend — do not retry.

Module: rare

qa_board — The qa task's testing board

Resolve (creating on first need) the board a qa task owns — a Plan section with the journeys diagram plus one section per journey; idempotent; answers {board, diagram, task}.

Module: qa

publish_run — Publish a test run onto the feature's QA record

Turn a runner manifest into the feature's QA record in one idempotent pass: qa task, journeys, verdicts, board, refs, failing cases; screenshots via vitrinka qa run publish.

Module: rare

edit_journey_node — Edit a journey through its diagram node

Edit a node of a living journeys diagram — which IS editing the journey task: writes its title and/or steps through the task engine and redraws the card; refused unless the card is a journeys diagram and the journey its qa task's child; other fields: update {kind: "task"} {fields}.

Module: rare

compose_final — Compose an epic's final artifact

Compose or rebuild the epic's feature board from what it carries plus one "<title> — final" page attached as a versioned final ref; a re-run removes only its own cards.

Module: pm

compose_brief — Compose an epic's feature brief

Compose or rebuild the epic's feature brief from its brainstorm board: rebuilds the Plan chapter and returns the skeleton; first run uploads version 1 — contract: docs {topic:"brief"}.

Module: pm

bulk_update_tasks — Bulk-update tasks

Apply ONE patch to up to 200 tasks atomically (state, status, type, priority, assignee, sprint, milestone, parent, dueAt, estimate, project); zero values clear — contract: docs {topic:"tasks"}.

Module: pm

rank_task — Rank a task

Move a task in the manual rank order: before/after name the tasks just above/below it; omit both to move it last; read the order with list {kind:"task", f:{order:"rank"}}.

Module: pm

list_intake — List intake drafts

Pending intake drafts and plan proposals — every project or one — newest first, each with its group (stale · plan · source kind), dedupe verdict and proposal; view summary: counts by project × group, no rows; a closed status reads one project's decided drafts.

Call as list {kind: "intake", …}

Module: pm · Read-only.

intake_verdict — Decide intake drafts

Resolve intake drafts — one id or ≤200 ids atomically. Admin/agent token, or the filer declining.

Module: pm

propose_tasks — Propose tasks (intake)

File task DRAFTS through the intake door for a human to accept — deduped against open tasks, each carrying its verdict; hidden until accepted — contract: docs {topic:"tasks"}.

Module: pm

search_tasks — Search tasks

Full-text search over everything a task carries (title, body, fields, refs, comments), relevance-ranked with snippets and matchedIn (a typo also searches its correction); epic narrows at any depth, within walks one task's tree; an unknown value answers the allowed ones; bounded to 50.

Call as search {kind: "task", …}

Module: pm · Read-only.

search_project — Search a project

ONE project-scoped search over boards (default), tasks or pages — FTS candidates reranked by title similarity; hits carry {kind, id, slug, title, subgroup, score, recent, pinned, url}; an empty q lists boards most recent first; task hits open through get_task.

Call as search {kind: "project", …}

Module: qa · Read-only.

create_rule — Create an automation rule

Create a project automation rule from a typed AST {trigger, conditions, actions} — vocabulary at GET /api/v1/rules/schema. Rules are created DISABLED: dry_run_rule it, then enable with enabled=true. Built-ins (stale-nudge, merged-pr-completes, morning-brief, …) ship enabled. Admin only.

Call as create {kind: "rule", …}

Module: pm

dry_run_rule — Dry-run a rule

Replay a rule over the last N ledger events (event triggers) or the live tasks (schedule triggers) and return what WOULD fire — ids, titles, actions — writing nothing; ast tests an edited document in the rule's slot; members stay inside the rule's project.

Module: rare · Read-only.

list_views — List saved views

List a project's saved views — each is a named filter document (the same shape ?f= takes).

Call as list {kind: "view", …}

Module: pm · Read-only.

my_work — My work

The caller's cross-project slice: assigned, created, mentioned (in comments) and overdue tasks — each bounded to 50, summary projection.

Module: pm · Read-only.

my_favorites — My favorites

The caller's bookmark tree — roots personal and workspace, nested folders, loose stars as rows {kind, id, key, title, url, project}, no thumbnails; read at pickup to see what the person keeps close; scope narrows to one root, folder (an id) to one subtree.

Module: rare · Read-only.

favorite — Star an entity

Star an entity through the ★ button's door — id-keyed kinds by entityId, a project by entityKey; scope defaults to the workspace's star scope; folder is an id or a NAME (created under the root when unknown); starring again re-files, never duplicates. Only what the user asked to keep close.

Module: rare

unfavorite — Unstar an entity

Remove a star from the caller's bookmark tree, addressed like favorite (entityId for id-keyed kinds, entityKey for a project; scope defaults to the workspace's star scope); a missing star is a no-op; the entity is untouched.

Module: rare

A typed relationship from one task to another: blocks | relates | duplicates | supersedes | custom (custom needs a label ≤ 120 bytes; supersedes marks a revision); at most 256 links per task.

Call as create {kind: "task_link", …}

Module: pm

Remove one relationship by its link id.

Call as delete {kind: "task_link", …}

Module: pm

delete_task — Delete a task

Soft-delete a task and trash its board projections in one transaction. A parent with live subtasks is refused (409) — reparent or delete them first.

Call as delete {kind: "task", …}

Module: pm

get_brief — The project brief

The project home as an agent reads it: now (overdue · yours in motion · blocked), next with a why each, blocked, since (changes since you last looked), people with live runs, the sprint ledger, Eve's narration, pending proposals — narrow with since and limit.

Call as get {kind: "brief", …}

Module: pm · Read-only.

list_proposals — List Eve's plan proposals

A project's pending plan proposals (the brief's short list): intake drafts carrying a typed proposal {op: split | reorder | estimate | close | merge, target, reason}; the complete paged read is list {kind: "intake", group: "plan"} (and "stale"); nothing changes until proposal_verdict.

Call as list {kind: "proposal", …}

Module: pm · Read-only.

proposal_verdict — Accept or decline a plan proposal

Resolve one of Eve's plan proposals: accept applies it through the engine doors and closes the draft; decline is an intake decline. Admin/agent token, or its filer to decline.

Module: pm

Review

request_review — Request AI review pass

Compatibility name for the judge pipeline: start a version-pinned review pass, optionally scoped to a section or journey. Findings are audited and await explicit filing. Prefer review_judge + review_judgments. 409 = pass running; 422 = no reviewable image cards.

Module: rare

review_brief — The review brief

The team's review rubric as one prompt block: the preamble, one block per enabled rule (built-in ▸ workspace ▸ project), an optional persona seat — what a review pass receives.

Module: qa · Read-only.

review_plan — Plan a review run

Plan a review over boards; sheets: get_card_image {run, sheet}; {run}: receipt; {run, sight}: echo sheet 1's code (docs review).

Module: rare

review_stats — Review verdict statistics

Review outcomes per rule and agent/model (filed, accepted, dismissed, staged, dismissRate) plus bounded audit samples; usage receipts are separate; check jobsScanned/truncated first.

Module: rare · Read-only.

review_judge — Judge captured screens

Queue Eve's screenshot judge on a board, a set (project/branchSlug/selector: its one board) or an eve review_plan run; immediate unless batch; verdicts in review_judgments; a run stages its failures.

Module: rare

review_job — Read or act on a review job

Read, retry or export one review job; file a judgment or a human's feedback (by zero-based index); post-fix audits are review_verify.

Module: rare

review_judge_settings — Read or update judge routing

Read project judge routing or update it as an admin (read first, keep untouched values): model judges, auditModel audits independently, ruleModels override per rule; no combined score; provider batch is explicit.

Module: rare

review_judgments — Read review judgments

A board's compact version-pinned judge jobs, per-rule triage and audit dimensions, insufficient-evidence and failed jobs included; no pixels.

Module: qa · Read-only.

review_verify — Verify a review finding

Link a newer capture to a failed judgment to queue its post-fix audit; answers the audit job.

Module: qa

Projects and memory

list_projects — List projects

The workspace's project registry: name, status (active | system), product flag, counts (tasks, epics, boards, sets, sessions), lastActivity; every other tool names a project by its project slug.

Call as list {kind: "project", …}

Module: pm · Read-only.

get_project_settings — Get project settings

Read project settings before updating.

Call as get {kind: "project_settings", …}

Module: pm · Read-only.

update_project_settings — Update project settings

Set domains, apps, historyTheme, types or commits. Read first: an omitted section stays, a supplied one is replaced whole ([] or {} clears it). Empty historyTheme restores the house look.

Call as update {kind: "project_settings", …}

Module: pm

get_project_memory — Get project memory

A project's memory: ranked island rows (complete/omitted/next mark the rest) and the legacy document until absorbed. ALWAYS read first.

Call as get {kind: "project_memory", …}

Module: pm · Read-only.

save_project_memory — Save project memory

Overwrite the legacy memory document (markdown, ≤64 KiB); once absorbed by an island: 409 legacy_put, kept as a proposal.

Module: pm

transfer_project — Transfer a project to another workspace

Copy a project into another workspace you own (OWNER of both; agent tokens refused): dryRun first; idempotent; a colliding board slug or set key is 409 unless merge; source kept.

Module: rare

merge_project — Merge a project into another project of the same workspace

Merge one project INTO another of the workspace (tasks with history, boards, sets, sessions, reports, releases, memory); the source stays an alias for old links. No dryRun IS a dry run — read the report; applying is an owner-person's call (agent → 403).

Module: rare

Templates

save_template — Save board template

Save a reusable board template (upsert by name) from a compose-shaped body ({{slot}} placeholders become params) or board + section (a live subtree); compose_board {template, params} instantiates, get_templates lists.

Module: rare

get_templates — List board templates

The board template library: built-in skeletons plus saved registry templates with {{param}} slots. No argument → the index; name → that template; all:true → everything.

Module: core · Read-only.

Preferences

set_preferences — Set user preferences

Read or change the operator's PERSONAL UI preferences (appearance scales, uiFont, wirePanelWidth, behavior toggles): no arguments reads values plus spec; {"prefs": {key: value}} merge-patches — numbers clamp, unknown keys reject the patch (422), changes apply live.

Module: rare

Artifacts

docs — Docs

This deploy's layered reference: element kinds, board card kinds, kit components, guides and the kind contracts. No topic → the index; one topic → its page; "family:topic" disambiguates.

Module: core · Read-only.

artifact_docs — Artifact docs

Alias of docs, kept for compatibility — the same unified layered reference. Prefer docs.

Module: core · Read-only.

read_element — Read element context

Read one element with its content revision: a paginated outline with JSON Pointer paths by default, exact values with paths, or view=full.

Module: core · Read-only.

edit_element — Edit element content

Apply 1–100 ordered JSON Pointer edits (add · replace · remove) to an AI-layer element; the revision is checked (409 on conflict); returns the new revision.

Module: core

Ledger and analytics

query — Query the ledger

Run ONE read-only SELECT over the workspace ledger and facts (agent_calls, ai_usage, boards, board_cards, sets, project_settings, tasks, task_events, task_labels); 1000 rows, 5 s, ? params; owner only.

Module: core · Read-only.

resolve_url — Resolve an app URL

Turn a pasted vitrinka URL (task, project, board, card page) into the entity it names in any workspace you belong to: kind, workspace, title, canonical url, foreign; 404 if unseen.

Module: core · Read-only.

On this page

Generic verbslist — List a kindget — Read a kindcreate — Create one of a kindupdate — Update a kinddelete — Delete one of a kindsearch — Search the workspaceBoardslist_boards — List boardscreate_board — Create boardset_board_meta — Update board metadatacompose_board — Compose board contentupdate_cards — Update board cardsarrange — Arrange board cardsscrape_board — Read board digestlist_sections — List board sectionshighlight — Highlight board regionboard_working — Show working statusget_capsule — Get work capsulelist_tags — List tagsshare_board — Mint a share linkundo — Undo your last batchimport — Import a truth sourcerefresh — Refresh a living cardSets and screenshotslist_sets — List artifact setsget_set — Get artifact setsearch_shots — Search screenshotsrename_set — Rename artifact setupdate_set — Update set metadatalist_components — List UI componentsget_component — Get UI componentWork queuewait_for_work — Wait for annotation worklist_work — List work itemsget_annotation — Get annotationset_status — Set annotation statusreply — Reply to annotationattach_after — Attach after-shotget_card_image — Get card imageannotate — Annotate screens (agent findings)agent_verdict — Release or dismiss staged findingsQuestionsask_board — Ask a board questionget_questions — Get board questionsretract_questions — Retract open questionsupdate_question — Update open questionanswer_ask — Answer an info requestupdate_brainstorm — Cancel, reopen or finish a brainstormSessionsget_session — Get session digestupdate_session — Update a sessionTasks, sprints and milestonescreate_task — Create a taskupdate_task — Update a tasklist_tasks — List taskssummarize_tasks — Summarize tasksget_task — Get a taskget_work_time — Read work timeget_work_evidence — Read work evidenceget_work_forecasts — Read work forecast historycreate_sprint — Create a sprintupdate_sprint — Update a sprintlist_sprints — List sprintslist_categories — List categoriescreate_category — Create a categoryupdate_category — Update a categoryget_session_scope — Read a session scopeupdate_session_scope — Bind a session scopecreate_scope_resolution — Resolve a task's scopeget_scope_readiness — Read scope readinessget_now — Read Nowget_copilot — Read the project copilotget_cockpit — Read a sprint cockpitlist_sprint_members — List sprint memberscreate_sprint_start — Start a sprintcreate_sprint_transition_preview — Preview a sprint transitioncreate_sprint_transition — Apply a sprint transitioncreate_release_candidate — Create a release candidateget_release_candidate — Read a release candidatelist_release_candidates — Page candidates for sprint idlist_candidate_evidences — Page original evidence for candidate idcreate_candidate_evidence — Record original candidate evidencelist_shipments — List shipmentsget_history_chapter — Read a history chapterupdate_history_chapter — Update a history chaptercreate_history_edition — Create a history editionget_overview — Read the project boardcreate_consolidation_preview — Preview a consolidationcreate_consolidation — Apply a consolidationcreate_milestone — Create a milestoneupdate_milestone — Update a milestonelist_milestones — List milestonesripe_todos — Ripe todoscomplete_todo — Complete a todomark_deploy — Mark a deploycreate_agenda — Plan a task on a daylist_agenda — List an agendaupdate_agenda — Move or tick an agenda itemdelete_agenda — Remove an agenda itemlist_states — List project stateslist_fields — List custom fieldscreate_field — Define a custom fieldupdate_field — Update a custom fielddelete_field — Delete a custom fieldlist_labels — List labelslabel_task — Add or remove labels on a taskcreate_comment — Comment on a tasklist_comments — List task commentsadd_task_ref — Attach a ref to a taskupload_task_file — Upload a text file as task evidencehand_back — Hand a task backspot — Spot something out of scoperead_task_ref — Read a task attachment under a token budgetask_task — Ask Eve a question about a task or projectpromote_meeting — Promote a diary meeting card to a meeting taskmeeting_notes — Ask Eve for a meeting's notes, decisions and action itemsqa_board — The qa task's testing boardpublish_run — Publish a test run onto the feature's QA recordedit_journey_node — Edit a journey through its diagram nodecompose_final — Compose an epic's final artifactcompose_brief — Compose an epic's feature briefbulk_update_tasks — Bulk-update tasksrank_task — Rank a tasklist_intake — List intake draftsintake_verdict — Decide intake draftspropose_tasks — Propose tasks (intake)search_tasks — Search taskssearch_project — Search a projectcreate_rule — Create an automation ruledry_run_rule — Dry-run a rulelist_views — List saved viewsmy_work — My workmy_favorites — My favoritesfavorite — Star an entityunfavorite — Unstar an entitycreate_task_link — Link two tasksdelete_task_link — Delete a task linkdelete_task — Delete a taskget_brief — The project brieflist_proposals — List Eve's plan proposalsproposal_verdict — Accept or decline a plan proposalReviewrequest_review — Request AI review passreview_brief — The review briefreview_plan — Plan a review runreview_stats — Review verdict statisticsreview_judge — Judge captured screensreview_job — Read or act on a review jobreview_judge_settings — Read or update judge routingreview_judgments — Read review judgmentsreview_verify — Verify a review findingProjects and memorylist_projects — List projectsget_project_settings — Get project settingsupdate_project_settings — Update project settingsget_project_memory — Get project memorysave_project_memory — Save project memorytransfer_project — Transfer a project to another workspacemerge_project — Merge a project into another project of the same workspaceTemplatessave_template — Save board templateget_templates — List board templatesPreferencesset_preferences — Set user preferencesArtifactsdocs — Docsartifact_docs — Artifact docsread_element — Read element contextedit_element — Edit element contentLedger and analyticsquery — Query the ledgerLinksresolve_url — Resolve an app URL