本文へ移動
cccskills
無料GitHub で公開

wayfinder

Chart a too-big effort as a shared map of decision tickets on the Gaia headquarters issue tracker, then resolve them one at a time until the way to the destination is clear. Use when someone says: "this is too big for one session", "chart a map", "wayfinder map", "plan this effort", "what do we need to decide first", "open a wayfinder", "work the map", "what's on the frontier", or /wayfinder. Covers any gaia-research org repo — gaia-skill-tree, gaia-research, gaia-skill-heaven and beyond — but every map and every ticket lives on ONE tracker: gaia-research/gaia-skill-tree. This is cartography (planning an effort as decisions), NOT triage of an existing backlog — for that use /gaia-triage.

インストール方法を見る

含まれるファイル(1)

  • SKILL.md15.2 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

wayfinder (Gaia)

This is the Gaia expression of Matt Pocock's wayfinder skill. Upstream is deliberately tracker-agnostic: it says "the issue tracker should have been provided to you… consult the tracker doc's 'Wayfinding operations' section for how THIS repo expresses them."

This file is that document. Upstream owns the method; this file pins down the mechanics — where maps live, how tickets are created and nested, how blocking is expressed, how the frontier is queried, how a ticket is claimed, how a resolution is recorded. Read the upstream SKILL.md for the method (mattpocock/skills → engineering/wayfinder); read this for how Gaia does it.

Wayfinder is cartography: planning an effort too big for one agent session as a map of decision tickets, worked one at a time until nothing is left to decide. It is not backlog hygiene and not issue resolution — see Not this skill.


1. Headquarters — one tracker, many repos

Every map and every ticket lives on the gaia-research/gaia-skill-tree issue tracker, regardless of which repository the resulting code lands in. There is no second map tracker, and a map is never split across repos.

export GAIA_HQ=gaia-research/gaia-skill-tree      # headquarters — all wayfinder issues

Why: a map's whole value is that one issue holds the low-resolution view of an entire effort. Efforts here routinely cross repo boundaries — a Skill Heaven benchmark decision made in gaia-research changes door code in gaia-skill-heaven and registry vocabulary in gaia-skill-tree. A map fragmented across three trackers is not a map.

Target-repo tagging

A ticket in HQ can point at work landing anywhere in the gaia-research org. Say where, on the ticket body, as the first line:

**Target repo:** `gaia-research/gaia-skill-heaven`

Use a repo's full owner/name. Multiple targets are allowed (one line, comma-separated); n/a is valid for a pure-decision ticket that lands no code anywhere. Minimum supported scope is the big three:

Target repoWhat lands there
gaia-research/gaia-skill-treeregistry, CLI, site, curation, HQ itself
gaia-research/gaia-researchresearch lab, benchmarks, ledger, reports, Next.js site
gaia-research/gaia-skill-heavenproduct monorepo — engine + per-harness doors

Any other gaia-research/* repo is fair game; the convention is deliberately open-ended, and nothing beyond the string needs to change to extend it.

Cross-repo linking is by URL, not by number. #1648 inside an HQ issue resolves to HQ. When referring to an issue or PR in another repo, write the full gaia-research/<repo>#<n> form or a full URL — a bare number silently points at the wrong repo.


2. Wayfinding operations (the tracker contract)

This is the section upstream defers to. Everything here is verified against the live map Wayfinder map: Trust Magnitude recalibration backlog (post-Yggdrasil III) (#1636), which is the reference implementation. Read it before charting your first map.

2.1 Create the map

One issue, labelled wayfinder:map, titled Wayfinder map: <destination in a phrase>.

gh issue create --repo "$GAIA_HQ" \
  --title "Wayfinder map: <destination in a phrase>" \
  --label "wayfinder:map" \
  --body-file map-body.md

Use --body-file with real newlines (repo convention — escaped \n in --body produces a mangled issue). Verify after creating:

gh issue view <n> --repo "$GAIA_HQ" --json body --jq .body

The body uses upstream's five sections exactly, in this order — ## Destination, ## Notes, ## Decisions so far, ## Not yet specified, ## Out of scope — and ends with the pointer line:

---

Frontier tickets are linked below as they're created (see this issue's timeline / linked issues).

The map is an index: Decisions so far gists each closed ticket in one line and links it; the detail lives in the ticket, never restated on the map. #1636's Notes section shows the local register — it carries measured numbers, named root causes, and founder rulings, because those are what every session working that map must load first.

2.2 Create a child ticket

Two passes: create, then nest. Titles are sentences that state the decision, not nouns (Determine cause of garrytan/gstack suite-component uniform undercount (16 skills, -3.67 each), not gstack undercount).

gh issue create --repo "$GAIA_HQ" \
  --title "<the decision, stated>" \
  --label "wayfinder:research" \
  --body-file ticket-body.md

Ticket body:

**Target repo:** `gaia-research/<repo>`

Part of #<map> (Wayfinder map).

**Blocked by:** #<n>, #<m>          <!-- omit the line entirely when unblocked -->

## Question this ticket answers
<the decision or investigation, stated so a fresh session can act on it cold>

## How to resolve
<the concrete route: commands, files, who to ask>

## Not this ticket
<the adjacent thing a reader will assume is in scope and isn't>

## Question this ticket answers is upstream's ## Question; on a task ticket, title it ## Decision this ticket resolves (as #1648 does) — a task ticket earns its place by unblocking a decision, and naming the decision keeps that honest.

2.3 Nest it under the map (hierarchy)

Hierarchy is GitHub native sub-issues. Verified working on #1636 — 6 sub-issues, 6/6 closed, sub_issues_summary reported by the API. Do not use task-list checkboxes for hierarchy; they do not produce the parent/child relation.

Sub-issues take the child's issue id, not its number:

# resolve the child's id, then attach it to the map
CHILD_ID=$(gh api repos/$GAIA_HQ/issues/<child-number> --jq .id)
gh api --method POST repos/$GAIA_HQ/issues/<map-number>/sub_issues -f sub_issue_id=$CHILD_ID

Agents on the GitHub MCP server use sub_issue_write with method: "add" (issue_number = the map, sub_issue_id = the child's id, again not its number).

2.4 Blocking — body convention, not a native edge

Use the body convention. Verified, and it is a fallback, not a preference.

Upstream prefers a tracker's native dependency relationship because it renders the frontier visually. We do not have a usable one here:

  • The GitHub MCP toolset these agents run on exposes sub-issue writes and nothing for issue dependencies — there is no blocked-by verb to call.
  • gh ships no gh issue dependency command; reaching the REST dependency endpoints means hand-rolled gh api calls that the org's app installation does not currently answer.
  • The live map #1636 wires no native blocking edges; its ordering is carried in prose.

So blocking is a line in the ticket body:

**Blocked by:** #1643, #1600

Rules: HQ-relative #<n> (blockers are always HQ tickets — a blocker in another repo means that work needs its own HQ ticket); one line, comma-separated; omit the line entirely when nothing blocks — an empty or none value makes the frontier query below unreliable. When a blocker closes, the blocked ticket does not update itself; the session that closes the blocker edits the line, dropping the closed number, and deletes the line when it empties.

Re-check this before trusting it. If GitHub issue dependencies become reachable from gh or the MCP server, they supersede the convention and this section should be rewritten rather than kept alongside:

gh api repos/$GAIA_HQ/issues/1636/dependencies/blocked_by   # 404/403 ⇒ convention still stands
gh issue --help | grep -i depend                            # empty ⇒ convention still stands

2.5 The frontier query

The frontier is the open, unblocked, unclaimed children of the map. Because blocking is a body convention, the query is two steps: ask GitHub for open unassigned children, then filter on the Blocked by: line.

MAP=1636
gh api repos/$GAIA_HQ/issues/$MAP/sub_issues --jq \
  '.[] | select(.state=="open") | select(.assignee==null) | "\(.number)\t\(.title)"' |
while IFS=$'\t' read -r n title; do
  blockers=$(gh issue view "$n" --repo "$GAIA_HQ" --json body --jq \
    '.body | capture("(?m)^\\*\\*Blocked by:\\*\\* (?<b>.*)$").b // ""')
  open_blockers=0
  for b in $(echo "$blockers" | grep -o '[0-9]\+'); do
    [ "$(gh issue view "$b" --repo "$GAIA_HQ" --json state --jq .state)" = "OPEN" ] &&
      open_blockers=$((open_blockers+1))
  done
  [ "$open_blockers" -eq 0 ] && printf 'FRONTIER  #%s  %s\n' "$n" "$title"
done

Take the first frontier ticket in order unless the user named one.

2.6 Claiming

Assign the ticket to yourself before any work — the assignee is the claim, and an open unassigned child is by definition unclaimed. Concurrent sessions work the same map.

gh issue edit <n> --repo "$GAIA_HQ" --add-assignee "@me"

Claim first, then read. A session that reads for ten minutes and then claims has raced.

2.7 Resolution

Four steps, in this order:

# 1. post the answer as a resolution comment
gh issue comment <n> --repo "$GAIA_HQ" --body-file resolution.md

# 2. close the ticket
gh issue close <n> --repo "$GAIA_HQ" --reason completed

# 3. append a one-line context pointer to the map's "Decisions so far"
gh issue edit <map> --repo "$GAIA_HQ" --body-file updated-map.md

# 4. drop this number from any "Blocked by:" line that names it

The map line takes the shape #1636 uses — name, number, gist, and where the work landed:

- **#1643 (closed):** Fixed the role-stripping regression — `role` no longer stripped from `buildMergedSkillMap()`. Landed in #1647 → `dev/yggdrasil-iii-newmeta` (`ff9ba51`). → #1648.

Refer to tickets by name in everything a human reads (narration, comments, the map's prose). A wall of #42, #43, #44 is illegible. The number rides inside the name; it never stands in for it.

Then graduate any fog the answer sharpened into fresh tickets, clearing each graduated patch from Not yet specified. If the answer shows a ticket sits past the destination, close it and add one line to Out of scope — it never appears in Decisions so far, which records only the route actually walked.

2.8 Labels

LabelMeaning
wayfinder:mapThe map issue itself. Exactly one per effort.
wayfinder:researchAFK — read docs/APIs/local resources to surface a fact a decision waits on.
wayfinder:prototypeHITL — build a cheap rough artifact to react to.
wayfinder:grillingHITL — conversation. The default ticket type.
wayfinder:taskManual work that must happen before a decision can be made.

Every ticket carries exactly one wayfinder:<type> label. Stack ordinary repo labels on top freely — #1637 is tech-debt + wayfinder:task, #1643 is tech-debt + wayfinder:task + trust-model. Priority (P0–P4) is optional on a map ticket and means what /gaia-triage says it means.

All six are declared in .github/labels.yml. Never create a wayfinder label ad hoc — labels-sync.yml reconciles from that file with skip-delete: false on every push to main, so an undeclared label is deleted off live issues at the next sync.


3. Charting and working a map

Upstream owns this; the short version, with the Gaia-specific hooks.

Chart the map (one session, resolves nothing)

  1. Name the destination. /grilling + domain modelling. The destination fixes the scope, so it is settled first.
  2. Map the frontier breadth-first. If no fog surfaces — the whole journey fits one session — stop and say so; you don't need a map.
  3. Create the map on HQ (§2.1): Destination and Notes filled, Decisions-so-far empty, fog sketched into Not yet specified.
  4. Create the tickets you can specify now (§2.2), nest them (§2.3), then wire Blocked by: lines in a second pass — issues need numbers before they can name each other.
  5. Fire research subagents for each wayfinder:research ticket, in parallel.
  6. Stop. Charting hand-resolves nothing.

Work through the map

  1. Load the map — the low-res view, not every ticket body.
  2. Run the frontier query (§2.5), take the first ticket, claim it (§2.6).
  3. Resolve it. Zoom into closed tickets on demand; call the skills the map's ## Notes names.
  4. Record the resolution (§2.7).
  5. Graduate fog; rule out-of-scope work out of scope.

Never resolve more than one ticket per session, except research tickets, which parallelise.

Fog or ticket? The test is whether you can state the question precisely now, not whether you can answer it now. Sharp-but-blocked ⇒ ticket. Not yet sharp ⇒ fog.


4. Gaia house rules that bind a map

  • Decisions of record live in gaia-research/founder/RATIFICATION.md, not on the map. A ticket whose resolution changes a ratified decision does not edit RATIFICATION.md by itself: the delta rides the implementing PR (D9), and the resolution comment says so.
  • Programmatic-first. A wayfinder:task ticket that mutates the registry resolves through gaia dev verbs. Hand-editing registry/nodes/ is forbidden; so is hand-editing a trustMagnitude number. #1636's Notes say this out loud, and that is the pattern to copy.
  • A map is not a sprint. gaia-skill-tree's sprint-completeness rule bans closing a sprint by filing its own remainder as follow-ups. A map is the opposite artifact: it is supposed to keep graduating fog into new tickets. Do not use a map to launder a sprint's unfinished work — if it was in the sprint's scope, it stays in the sprint.
  • Founder rulings settle scope. #1636 records one inline ("no separate Wayfinder ticket for this batch, #1600 stays the tracker"). Record rulings on the map where they change scope; that is what keeps the next session from re-litigating.
  • Frontend work stays human-gated. A map ticket cannot merge a gated frontend PR. Resolving the decision is in scope; merging is not.

Not this skill

You want toUse
Plan an effort too big for one session as decisionsthis skill
Sort, size, prioritize, link, and assign an existing backlog/gaia-triage
Take one triaged issue end-to-end to a merged PR/gaia-issue-resolver
Rank registry skills needing review/gaia-meta-audit

Wayfinder charts unknowns. Triage sorts knowns. Keep them apart: a map that fills with already-specified build slices has stopped being a map.

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

ci-churn

無料

Measure CI churn cost for a pull request: how many commits and how many CI-compute seconds were burned on avoidable "fix the CI" push rounds. Use when you want to understand the efficiency cost of a PR's iteration cycle, get actionable pre-push check suggestions, or include a churn summary in a pipeline report. Triggers: "ci churn", "how much CI did we burn", "avoidable commits", "ci efficiency", "wasted CI time", "churn report", "/ci-churn". Called automatically by /fp-drift at pipeline close.

日本語の概要は準備中です。原文の説明を表示しています。

gaia-research/gaia-skill-tree232026年10月13日 更新

Produce the rendered evidence a human-gated frontend PR owes its reviewer: capture each changed surface (plus the before state for anything modified, plus mobile width), then generate one self-contained local HTML page the founder can open and review without checking anything out. Use when a PR is gated by the "Frontend changes are HUMAN-GATED" section of CLAUDE.md, or when the user says "/design-gate", "screenshot evidence for this PR", "prep this for founder review", "build the design evidence page", "what does this look like before and after". The page comes from a template script, not hand-written markup. Output is session-local and never committed. Do NOT use for non-gated changes: typo/grammar/factual fixes in an unchanged block, dead link targets, alt/ARIA fixes with no visual change, cache-bust bumps, or refactors with no rendered diff.

日本語の概要は準備中です。原文の説明を表示しています。

gaia-research/gaia-skill-tree232026年10月13日 更新

One-fix-at-a-time, approval-gated design fix recovery. Given a checklist of fixes (handover doc, CHECKLIST.md, or inline list), applies each individually, presents a diff, and waits for an explicit APPROVE / REJECT / NO CHANGES decision before committing. Trigger phrases: /design-iteration, "go through the checklist one by one", "fix these one at a time", "bucket recovery", "design fix pass".

日本語の概要は準備中です。原文の説明を表示しています。

gaia-research/gaia-skill-tree232026年10月13日 更新

Playbook for correcting a named skill's star level to match its computed Trust Magnitude grade, with an independent post-calibration verification pass and a CLI-logged timeline event (never hand-written). Use when: recalibrating a skill's level, fixing a stale or drifted star rating, running a batch of `gaia dev calibrate` corrections, or confirming a past calibration actually landed. Triggers: "calibrate <skill>", "recalibrate the trust magnitude backlog", "promote/demote <skill> to N stars", "why is <skill> still N stars", "verify a calibration actually landed", "Hall of Heroes ranking is wrong".

日本語の概要は準備中です。原文の説明を表示しています。

gaia-research/gaia-skill-tree232026年10月13日 更新

Close out a completed EPIC / sprint end-to-end: author a fact-verified meta-post announcing what shipped, archive the EPIC's handovers, snapshot orchestrator memory, gate the integration→main merge on CI-green + explicit human go, drive the version bump (merge-commit conventions that auto-sync classifies), and verify the release reached the registry/PyPI. Use when the user says "close out EPIC <n>", "wrap up the sprint", "ship the meta shift", "/epic-close", or asks to finalize an integration branch that is ready to merge to main. Generalizes the EPIC 1002 (Yggdrasil II) close-out. This skill orchestrates — it authors founder docs directly (superadmin) and delegates code/regen to workers; it NEVER merges to main without the human gate.

日本語の概要は準備中です。原文の説明を表示しています。

gaia-research/gaia-skill-tree232026年10月13日 更新

Run this skill for Phase 3 of the evidence verification pipeline — the adversarial audit step. Use when you need to check the evidence data lake for bad data before ingestion: dead links, wrong URL formats (tree/ vs blob/), subjective wording ("elite", "high-quality"), stale migration notes, benchmark catalog misuse/vendor-claim leakage, or skills whose star evidence conflicts with classified evidence level. Triggers on phrases like: "audit the data lake", "adversarial check", "ev-adversarial-audit", "check for noise in evidence", "flag bad evidence", "run the audit phase", "quality check the by-type files", or any reference to Phase 3 of the pipeline.

日本語の概要は準備中です。原文の説明を表示しています。

gaia-research/gaia-skill-tree232026年10月13日 更新

gaia-research のスキルをすべて見る

このスキルの問題を報告する