# Legal Wayfinder

> Decision-map decomposition for legal matters too big or too foggy for one session. Charts a map (destination, decisions so far, fog, out-of-scope) plus decision tickets under bcc-output/YYYY-MM-DD-<slug>/wayfinder/, then works tickets one at a time until the route to the deliverable is clear, then hands off to execution. Trigger when: charting a big legal matter (/legal-chart), working the next decision ticket (/legal-way), or a briefing is too foggy for a static execution plan. Do NOT trigger for: normal matters that fit /briefing or /legal-5step, quality-gate loops (legal-goal / legal-loop), or single-question research.

- Skill: `fedec65/legal-wayfinder` (Agent Skill)
- Install (CLI): `npx skillmds@latest add fedec65/legal-wayfinder`
- Raw SKILL.md: https://api.skillmd.com/api/skills/fedec65/legal-wayfinder/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Research & Search
- Author: fedec65 (https://skillmd.com/u/fedec65)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/fedec65/legal-wayfinder

---


# Legal Wayfinder — Decision Maps for Big Legal Matters

A big legal matter arrives wrapped in fog: the route from intake to deliverable is not
visible yet. Wayfinding finds that route by resolving **decisions** — not by executing
work slices. The map is the plan; execution happens only after handoff.

**Plan, don't do.** Every ticket resolves a decision. Supporting memos and prototypes are
linked as assets, but no client deliverable is drafted inside the map. A matter may
override this in the map's **Notes** (carrying execution into the map); absent that,
produce decisions, not deliverables.

**Refer by name.** In everything the attorney reads, refer to a ticket by its title,
never a bare id. Ids ride inside the linked name: `[Limitation period open?](tickets/t01-limitation-period-open.md)`.

## Storage

Everything lives inside the matter folder — never in memory keys, never synced anywhere:

```
bcc-output/YYYY-MM-DD-<slug>/wayfinder/
  map.md
  tickets/
    t01-limitation-period-open.md
    t02-forum-choice-zh-or-federal.md
  assets/          ← research memos, prototype outlines linked from tickets
```

## The Map (`map.md`)

```markdown
---
matter: <slug>
status: charting | working | ready-for-handoff | handed-off
privacy-mode: strict | balanced | cloud
classifier: ollama | none
jurisdiction: federal | <canton>
language: DE | FR | IT | EN
---

## Destination
<1–2 lines: the deliverable this matter is finding its way to. Fixes scope;
every session orients to it before choosing a ticket.>

## Notes
<skills to consult (swiss-legal-research, privacy-routing, swiss-citation-formats),
standing preferences. Per-matter execution override is expressed here if needed.>

## Decisions so far
<!-- index, one line per resolved ticket: gist + link; never restate the detail -->

## Not yet specified
<!-- fog: in-scope questions you can sense but cannot phrase sharply yet -->

## Out of scope
<!-- work consciously ruled beyond the destination + why; never graduates -->
```

The map is an **index, not a store**: a decision lives in exactly one place — its
ticket. The map gists and links.

## Tickets (`tickets/tXX-<slug>.md`)

```markdown
---
id: t01
title: Limitation period open?
type: research
status: open
blocked-by: []
claimed-in: ""
---

## Question
<the decision this ticket resolves, sized to one agent session>

## Resolution
<filled on close: the decision + evidence; assets linked, never pasted>
```

### Ticket types

| Type | Mode | Resolves | Rules |
|------|------|----------|-------|
| `research` | AFK | A fact a decision waits on (precedent, statute, deadline) | Researcher agent + MCP servers; memo in `assets/`; R1 (citations only via `swiss-caselaw:cite`) and R2 (verbatim quotations) enforced |
| `grilling` | HITL | Client facts, priorities, risk appetite | Conversation with the attorney, one question at a time. **Never answer for the human** — an agent that answers its own grilling questions has broken the ticket |
| `prototype` | HITL | "How should it look/behave" | Cheap concrete artifact to react to — outline of the Klageschrift, rough clause structure — linked from `assets/` |
| `task` | HITL or AFK | Work that unblocks a decision (gather contract file, obtain court records) | Precise checklist for attorney/client, or driven alone where possible; resolution records what was done and resulting facts later tickets depend on |

## Frontier and claiming

The **frontier** is every ticket with `status: open`, empty `claimed-in`, and all
`blocked-by` tickets `status: resolved` or `ruled-out`. `/legal-way` picks the lowest-numbered frontier
ticket unless the attorney names one. Claim by setting `claimed-in` to a session stamp
(ISO date + time) **before any work**; refuse a ticket already claimed. One ticket per
`/legal-way` invocation — research tickets are the only exception (they may be batched
or fired in parallel by `/legal-chart`).

## Fog of war

The map is deliberately incomplete. Beyond the live tickets lies fog — questions you can
sense but cannot phrase sharply yet because they hang on open decisions. The test:

- **Ticket** when the question is already sharp — even if blocked.
- **Not yet specified** when it is not yet phrasable that sharply. Never pre-slice fog
  into ticket-sized pieces; one patch may graduate into several tickets, or none.

Resolving a ticket graduates whatever it made sharp: create new tickets (create-then-wire
blocking edges in a second pass), and clear each graduated patch from **Not yet
specified** so it lives only as its ticket.

## Out of scope

Fog gathers only toward the destination; work beyond it is out of scope and never
graduates. When a live ticket turns out to sit past the destination, set it
`status: ruled-out` (not resolved) and add one line to **Out of scope**: gist + why +
link. It stays out of **Decisions so far** — a scope boundary is not a step on the route.

## Edge cases

- **Outgrown ticket**: if resolving a ticket sprawls beyond one session's worth, split
  it — create the successor tickets plus any fresh fog, and close the original
  `resolved` with a pointer to its children in the Resolution.
- **Stale research**: a research resolution in fast-moving law may note
  `revalidate: true`. Re-open it only by creating a fresh ticket referencing the old
  one — never by editing a recorded resolution.

## Privacy (Anwaltsgeheimnis)

The map's `privacy-mode` governs every ticket; the PreToolUse hook keeps guarding writes
regardless. `classifier` is probed once at chart time (`ollama_check_status`) — never
re-probed per ticket. Degradation follows the `privacy-routing` decision matrix:

| Content | classifier: ollama | classifier: none |
|---------|--------------------|------------------|
| PUBLIC | cloud preferred | cloud OK |
| CONFIDENTIAL | local preferred | anonymize → cloud + warning |
| PRIVILEGED / undeterminable (strict) | local required | no automated clear: stay local-only, or ask the attorney directly before any cloud call |

A research ticket touching privileged facts with no classifier does not hard-fail the
map: convert to conversation — ask the attorney to reformulate the question in anonymous
terms, then proceed as CONFIDENTIAL. Fail closed; never "just send it".

## Handoff

Hand off only when every ticket is `resolved` or `ruled-out` and the fog is empty.
A claimed ticket still counts as open — in-flight work in another session blocks
handoff. When `/legal-way` reaches that state, set
`status: ready-for-handoff` and — instead of stopping — emit a **handoff pack**:
destination + Decisions so far + linked assets, shaped to feed the orchestrator's
Briefing-Sourced Execution protocol. Route to `/legal-5step` or the orchestrator. With
`--gate`, pre-build a `/legal-goal` record so execution runs under the worker–evaluator
loop from day one. Set `status: handed-off` once the pack is delivered.

## Honest termination

Never present an unresolved map as clear. If the map is dead — fog non-empty, nothing
graduatable, no open tickets — surface it to the attorney: the destination needs
redrawing or external input is missing (which is itself a `task` ticket).

## Plugin Scope Constraint

For all wayfinding tasks, use **exclusively** BetterCallClaude agents, skills, and MCP
servers. Do not delegate legal work to generic or external skills, agents, or tools
outside this plugin.

