The manual

Everything the product answers without a support ticket: how work docks, how it is found, how it is charted, and how your agents drive it.

Getting started

Register and sneck charts your first org in the wizard: name it, invite the crew, and the board opens with sample data already docked - real columns, real issues, nothing to configure before you can feel the product. The sample data removes itself in one click when real work arrives (Remove sample data in the board's first-run strip - the marker is honest, a reserved label OR the sample project, so editing the seeded issues never blinds it).

The + in the topbar (or the c key) opens the composer: every option settable at create - status, priority, assignee, team, project, cycle, estimate, labels, due date, and the template picker. It stays open across creates for rapid entry.

Importers bring the past along: Jira and Linear exports land through the import page, preserving titles, descriptions, labels, and status.

The query grammar

One query language runs the search box, the filters, the saved views, and the API: fq. Type it by hand or compose it with the Filters dropdowns - both write the same query, and the URL carries it.

key aliases values comparators compiles to
assignee assignees me, none or a member's name, email, or uuid = assignees
blocked - `true` or `false` blocked = any unresolved blocked-by dependency (done and canceled resolve) = dependency set (informational - never blocks)
component components component name or uuid resolved via context; a name matching several projects' components matches them all = components (as uuids)
cycle - current or a cycle's name or uuid = cycle_id
due - a date (2026-10-31), `overdue`, or `week` the date literals resolve at apply time (today's clock) = due_date (the overdue/week literals expand)
estimate - 0, 1, 2, 3, 5, 8, 13, 21, 40 the closed scale = != > >= < <= estimates (eq) / estimate_min + estimate_max (ranges)
has - assignee, label, project = any-label / any-assignee sets; has:project errors
is - active, backlog, done sugar for status (active = todo,in_progress) = statuses (expanded at parse time)
label labels label names resolved against your org's labels = labels (as uuids)
priority priorities 0, 1, 2, 3 integers 0..3 (0 none .. 3 urgent) = != > >= < <= priorities (comparators expand to ranges)
project - project name or uuid one project per query (the slot is a scalar) = project_id
status statuses backlog, todo, in_progress, done, canceled case-insensitive = statuses
team - team name, key, or uuid several teams OR (repeat the key or comma-join) = teams (uuids, ANY-of)
type types story, bug, task, epic case-insensitive = types
version - version name or uuid the fix version (released or not) = fix_version_id
<field_key> - any ACTIVE custom field key (risk, tags…) per type: option, string, integer, YYYY-MM-DD = (all); number fields also take > >= < <= custom_fields (per-type clause)

Refs and prefixes

Issues wear human refs, not bare numbers: PREFIX-NUMBER. Each team can carry its own prefix (the Jira-project pattern) - ENG-7 and SNECK-7 are different issues in the same org, each numbering its own scope from 1. Move an issue between teams and it is renumbered into the destination scope; refs are scope-stable, not row-stable.

Every surface speaks the full ref: URLs, deep-links, mentions, and commit-message references (Fixes ENG-7 links the issue from a connected forge). Bare numbers are retired - under per-scope sequences they name no one issue.

Sprints (cycles)

Cycles are sneck's sprints: fixed boxes per team, one active at a time, with a carry-over policy that runs at close - none leaves unfinished work in the closed box, carry moves it into the next cycle (opening one for it), backlog returns it to the backlog with status kept.

The cadence can run itself: recurring mode opens the next box back-to-back when one closes, whatever the policy does with the issues - the boxes keep a rhythm; the policy governs the cargo. The cycle pages chart burn-up and burn-down from the same honest trail, and each team's rolling velocity rides the work page.

Agents and MCP

sneck is agent-native: an MCP server (the same one this tracker's own backlog is worked through) exposes the verb set - create, update, comment, label, cycle, project, and time-logging among them - addressed by full refs. Mint a scoped token at /settings/mcp: read-only tokens observe, write tokens file lanes.

The machine-readable contract is llms.txt - the same verb list, drift-checked by the test suite.

Keyboard

The work surfaces are keyboard-first - the same inventory the in-app ? overlay shows:

Global

⌘KCtrl-Kk Open the command palette - board, list, roadmap, insights
c Focus the new-issue input (board)
n Focus the new-issue input - where the palette's New issue lands (board)
? Show this shortcut list

Command palette

↑↓ Move through the results
↵ Open the highlighted issue or run the command
esc Close the palette

Triage

jk Move the dock's cursor - focus follows the row
x Select the focused row for the bulk bar
a Archive the focused row
s Chart the focused row - status to To do
p Cycle the focused row's priority
↵ Open the focused row as a full page

List

jk Move the list's cursor - focus follows the row
x Select the focused row for the bulk bar
a Archive the focused row - restore it in the archived view
↵ Open the focused row's detail modal

Issue cards

↵ Open the focused card - Tab reaches cards, sub-issue rows included (board)

Overlays

esc Close the open issue detail, new project, notification, or bulk menu

Webhook events

Outbound webhooks subscribe to the event catalog - rendered here from the same source the receivers validate against:

event when it fires
issue
issue.created an issue is created
issue.updated any issue field edit (estimate rides this)
issue.status_changed a status transition (rides on top of issue.updated)
issue.deleted an issue is hard-deleted (archive is the default exit)
issue.archived an issue leaves the working set (opt-in subscription)
issue.unarchived an issue returns to the working set
issue.cloned a clone is created from a source issue
issue.merged a duplicate is merged away (fires on both rows)
comment
comment.created a comment is posted
comment.updated a comment's body is edited (mentions never re-fire on edits)
comment.deleted a comment is deleted
doc_comment
doc_comment.created a comment is posted on a doc
doc_comment.updated a doc comment's body is edited (mentions never re-fire on edits)
doc_comment.deleted a doc comment is deleted
project
project.created a project is created
project.updated any project edit
project.deleted a project is hard-deleted (its issues survive unprojected)
project_update
project_update.created a status post / health report lands on a project
project_update.deleted a status post is deleted
cycle
cycle.started a team's next cycle opens (manual or the carry policy)
cycle.closed a cycle is closed (unfinished cargo returns to the dock)
member
member.invited an invite is issued or superseded (never the token)
member.joined an invite is accepted
label
label.created a label is created
digest
digest.ready the periodic org summary