skills/quest-convention/SKILL.md
Operational conventions for the quest system: when to use a quest versus a subquest versus a sidequest, when to scaffold a plan or research document, how to reorder priorities, when to add optional sections, when to conclude versus retire, the resuscitate pattern. Use when driving the quest tool, deciding kind, promoting or parking work, or organising a project as quests. Pairs with quest-format for the on-disk shape.
npx skillsauth add jitsusama/agentic-harness.pi quest-conventionInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
A quest is a campaign with a stable id, a title and a narrative arc. A subquest is a campaign whose spirit serves a parent quest. A sidequest is a small unit of work that came in from outside the planned arc, often from a Slack message or a GitHub issue.
The format skill teaches the shape; this skill teaches the choices.
parent: null. A project under
~/src/localhost/documents/projects/ becomes a top-level
quest; their parent is the workspace itself, which we
do not model.parent: <QEST-id>.
Useful for partitioning a large quest into independently
trackable strands. Subquests sit flat at the quests
root alongside their parent; the relationship lives in
front-matter, never in directory nesting.parent: null and sits alongside top-level quests; a
scoped sidequest (a PR review under an active quest,
say) carries the loaded quest's id as its parent so the
audit trail composes. Either form is valid.When in doubt, start as a sidequest and promote later. A sidequest that grows a north star becomes a quest by flipping its kind.
Priority is one of: driving, active, queued, bench,
someday. Each bucket is its own pool; the rank field
orders within the bucket.
The importance verbs (top, bottom, bump, sink,
before, after, renumber) operate on rank within the
sibling set: quests rank globally; subquests rank within
their parent; sidequests rank globally.
Use promote, demote, drive, park, defer to move
between buckets. Use top/bottom/bump/sink to
reorder within one.
Status is a coarse enum: active, paused, blocked,
concluded, retired. It is not where you write
narrative. The narrative lives in the Journey log: dated
bullets, newest first, recording what happened and why.
When asked "what is happening on QEST-X", the tool synthesises a paragraph from frontmatter plus recent Journey entries; you don't write status prose yourself.
Move the status field when the situation actually
changes (the work paused; you got blocked; you concluded
it). Otherwise leave it alone and write Journey entries.
The dominant creation pattern: "look at this Slack thread"
or "create a sidequest for this PR". The tool's
create action accepts a url parameter; the workflow:
Confirm the proposed scaffold before committing. Adjustments happen through prose; there is no form.
When the URL fetch fails, the tool falls back to seeding only the URL as an alias and prompts for the title and Summary.
Plans, research, briefs and reports live as documents under a quest. Scaffold one when:
A small quest does not need any documents. The README plus Journey is enough.
At most one document is focused per quest at a time. The focused document carries its own stage machine (think, draft, build, conclude, retire). Switching focus does not change a document's stage.
Code-write discipline triggers only when the focused
document is a plan in think or draft. Other document
kinds (research, brief, report) have no implementation
phase and never block code writes.
A common motion: a sidequest paused weeks ago, a new Slack ping brings it back. The steps:
quest find <hint> and quest load <id> to pick up the
old sidequest.quest drive (or promote) to push it back to driving
or active.quest alias-add for the new context (the Slack thread
or PR that resurfaced it).quest think kind:plan if the reactivation needs
structured work.Each step is a separate tool call today. A composite
resuscitate verb may land later if the workflow stays
awkward; current bet is that the pattern reads cleanly
enough as separate moves.
A retired quest can be resuscitated. A concluded quest can also be resuscitated, though usually a new quest is cleaner when the work re-opens with a new shape.
Both conclude and retire accept a scope parameter:
document acts on the focused document, quest acts on
the loaded quest. With no scope, the tool defaults to the
focused document when one is set, otherwise the loaded
quest. Retiring a quest needs a reason.
An Echo is an incoming reference: another quest's body
mentions yours by id, or by a URL the refs registry can
resolve back to one of your aliases. The show projection
splits Echoes by intent: Produced by lists every quest
whose body referred to yours with the → sigil, and
Referenced by lists every quest that mentioned you with
a bare id. Skip either section silently when its list is
empty.
The status action is an alias for show; both render
the loaded quest's full projection. When you type an
action name that no verb matches, the tool refuses with a
Levenshtein-based suggestion of the nearest canonical
verb (lst is told to try list; shw is told to try
show). When no close match exists the refusal points
you at the schema.
When quest find returns more than one match, ask the
user. Surface the top three (ranked by recency of
updated) with the quest's title and a one-line summary.
The user picks by number ("the second one") or by saying
the title. Avoid menus: everything stays prose.
Cast bullets are parsed for a role and a subject (the name or handle). The tool runs each subject through the people-resolver chain (built-in: Slack; downstream packages add their own resolvers, e.g. Vault). When a resolver returns an identity, the bullet is tagged with the identity id so cross-quest "who has Joel as an owner" queries can answer without fuzzy regex.
Unresolved subjects fall back according to the
fallback setting: silent keeps the bare name, warn
records it but flags the gap in tool results, ask
surfaces it for the agent to query the user. Default is
warn.
If you're working in a project that still uses the old
asks/issues/sidequests substrate under
~/src/localhost/documents/projects/, migration is a
collaborative one-shot effort the agent drives with you.
There is no permanent migrate tool. See the plan in
.pi/plans/PLAN-20260603-yo8-... for the mapping rules
and the per-project substeps.
development
Structure of a quest README and the documents that live under it: frontmatter shape, the four core and four optional body sections, emoji glyphs, ID format, alias notation, Cast bullets and Journey entries. Use when writing or editing a quest README, a plan, research, brief or report document under a quest. Pairs with quest-convention for choices like kind, promotion and reordering. Follow the prose-standard for voice.
development
Markdown structure rules: Title Case headings with their exceptions, the line-width target and its legitimate exceptions, reference-style links, fenced code blocks with language tags, tables and lists. Use when writing or editing any markdown file (README, AGENTS, docs, plans, skill files), or when adding a heading, link, table or code block. Owns markdown structure; pairs with prose-standard, which owns voice, grammar, spelling and punctuation.
tools
How to measure whether convention corrections keep recurring in the pi session logs, by category and by week. Use to record a baseline before the convention gates take effect and to re-run afterwards to confirm the recurring categories bend down. Pairs with the convention gates (pr-guardian, issue-guardian, commit-guardian, slack-integration) and the convention-context extension.
tools
How to drive the `subagent` tool: spawn N pi processes concurrently for persona sweeps (security/performance/ readability of the same artifact), multi-angle investigation (data flow vs lifecycle vs config of the same bug), or fleet brainstorming (N answers from N models). Use when the user asks to "examine from various angles", "get multiple perspectives", "fan out across personas", "parallel investigation", "have N models try this", or any request that benefits from divergent independent passes. Pairs with prose-standard for written voice and any domain skills the personas should inherit.