Project-orientation workflow (/orient): installs predicate's enforcement into a target project, maps its structure and goal, and authors the persistent conditioning layer (AGENTS.md goal-hierarchy) so every subsequent walk is anchored and gated. Trigger when: - Onboarding a new project into predicate for the first time. - Refreshing an existing project's AGENTS.md hierarchy against the current state of the repository (re-run = refresh). - Prompt contains: /orient, orient workflow, onboard pro...
Scanned 9/1/2026
Install to Claude Code
npx -y skills add nrdxp/predicate --skill orient --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Orient?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/nrdxp-orient)More formats (shields.io, HTML) on the badges page.
---
name: orient
description: |
Project-orientation workflow (/orient): installs predicate's enforcement
into a target project, maps its structure and goal, and authors the
persistent conditioning layer (AGENTS.md goal-hierarchy) so every
subsequent walk is anchored and gated.
Trigger when:
- Onboarding a new project into predicate for the first time.
- Refreshing an existing project's AGENTS.md hierarchy against the
current state of the repository (re-run = refresh).
- Prompt contains: /orient, orient workflow, onboard project, project
orientation, AGENTS.md hierarchy, persistent conditioning layer.
---
# Orient: Project Orientation Workflow
Predicate is **project-centric**: `/orient` is its first contact with a
project. It engages *this* repository concretely — installs predicate's
enforcement, maps the repo, learns its goal, and authors the **persistent
conditioning layer** (the AGENTS.md goal-hierarchy) so every subsequent
walk is anchored and gated. Not an idealized formula imposed from outside;
a boundary fitted to the actual project.
**Quickstart:** install predicate into your harness → target a project →
run `/orient`.
---
## Phases (state machine; halts at the two human seams)
The eight phases execute in order. Two are **human seams** — the walk
halts and awaits human input before continuing. The others are
mechanical or agent-automated.
### Phase 0 — BOUND *(compose `/boundary` — do not rush)*
Before touching the repo, invoke [`/boundary`](../boundary/SKILL.md) to
draft an IBC for the orientation work itself: what is this project, what
is known vs unknown going in, what is the desired end state of onboarding
it.
`/boundary` is also the **authority for the AGENTS.md contract** the
AUTHOR phase (phase 6) conforms to — composed here, not duplicated. The
required content (Goal, Requirements/Invariants/Constraints, Unknowns,
Operational entrypoint, Structure, Alignment-to-parent) and the soundness
invariants are defined in
[`/boundary §AGENTS.md`](../boundary/SKILL.md#agentsmd--the-project-scope-boundary).
### Phase 1 — ESTABLISH *(mechanical, automated — no human input)*
Run `bootstrap/install.sh init --project <dir>`: install git hooks into `.git/hooks` (untracked,
auditable, removable), initialize the `.ledger` sub-repository, wire
project config. Idempotent — safe to re-run on an already-oriented
project.
### Phase 2 — MAP *(domain — outward→structure; cheapest tier; hunt-to-dry)*
Fan out a multi-modal sweep over the repository:
- **Structure** — `git ls-files` for the file tree; directory layout.
- **Semantics** — what each component does; package/module roles.
- **History** — `git log` shape; maturity signals; areas of churn.
- **Docs** — stated purpose in READMEs, existing AGENTS.md files, or
architectural docs.
Scale to the repo: a small project needs one pass; a large one warrants
the full sweep. Stop when no new approach-relevant structure surfaces.
This phase carries no goal-fit judgment and routes to cheap agents.
### Phase 3 — SURVEY *(arsenal — outward→environment; cheapest tier)*
Enumerate predicate's own skills plus the host harness's installed
skills, tools, and MCP servers available to this project. Project each
for relevance to the discovered structure; do not enumerate exhaustively
into context.
### Phase 4 — ELICIT *(goal — HUMAN SEAM, halt)*
**This phase halts.** The walk does not proceed until the human confirms
the goal.
From the MAP, extract a candidate goal + requirements / invariants /
constraints / known-unknowns. Present the candidate to the human with:
- the extracted goal statement (desired end state, not status);
- the requirements, invariants, and constraints identified;
- the known-unknowns with signposts (what would resolve each);
- any conflicting signals in the docs or history that affect goal-fit.
**Halt and await confirmation.** Goal-fit is not self-attestable — an
agent is least calibrated exactly here; the human is the goal authority.
Do not proceed to NEST or AUTHOR until the goal is confirmed or corrected.
### Phase 5 — NEST *(structure decision)*
Decide which directories have a goal *genuinely distinct from and in
service of* the root goal, and therefore warrant their own AGENTS.md.
**Default: root only.** Add a component AGENTS.md only when a real
sub-goal exists. Every additional file is a staleness surface: it must be
kept true, linked correctly, and synced at every refresh. The
alignment-to-parent requirement (from the AGENTS.md contract) is the
defeater substrate — a component whose goal does not serve the root is
a structural fault.
### Phase 6 — AUTHOR *(draft against the contract — authority: `/boundary`)*
Draft the root AGENTS.md and any component files decided in NEST. Each
draft MUST conform to the AGENTS.md contract in
[`/boundary §AGENTS.md`](../boundary/SKILL.md#agentsmd--the-project-scope-boundary):
- **Self-contained entrypoint.** Every pointer resolves in-repo or
carries a URL. No assumed external knowledge.
- **Goal = desired end state**, not a status report. Marked WIP where
the end state is not yet reached.
- **Single source.** Reference authorities
([rules.md](../../rules.md), [ambient.md](../../ambient.md), specs);
never copy their text.
- **Agent-guiding only.** If removing a line changes no agent action,
cut it.
- **Unknowns are first-class**, treated like requirements, each with a
signpost.
- **Minimal surface area.** Every line is a liability kept true;
brevity is anti-drift.
Component AGENTS.md files MUST include the alignment-to-parent section
(how this component serves the root goal).
#### AGENTS.md as R/I/U Hierarchy — the P-TRACK persistent anchor
Each AGENTS.md (root and component) MUST include a **Requirements /
Invariants / Unknowns** hierarchy for the construct it governs (P-TRACK
I-T1–I-T2, primitives-spec.md §P-TRACK §"The AGENTS.md fusion"). This
makes AGENTS.md the *persistent anchor* that every subsequent walk
hydrates its live tracker from, rather than reconstructing from scratch.
**Required sections per construct AGENTS.md:**
```markdown
## Requirements
Each item: statement, grounding (source/evidence), signpost (what defeats it).
Pruned to the minimal bounding set — requirement bloat is drift surface.
## Invariants
Each item: statement, grounding, signpost (what would violate it).
Constraints that must hold throughout; distinguished from requirements by
"must hold" vs "must be satisfied."
## Unknowns
Each item: statement, grounding (why it is not yet resolved), signpost
(the observable that would resolve or invalidate it).
Treated first-class like requirements — filed with a signpost, never
merely noted.
## Spec Pointers
Pointers to full specification sources for this construct: doc paths,
ADR links, contract file paths. Kept minimal — one pointer per
authoritative source, never prose summaries of the specs themselves.
```
**Authoring discipline:**
- Items MUST carry `grounding` and `signpost` (mirrors the
`context_map.ncl` Item contract; `last_validated` is filled in by
the walk that hydrates, not the orient author).
- The Unknowns section tracks *known-unknowns* with signposts; when
a walk surfaces an *unknown-unknown*, it files it here (promoting
it to a known-unknown with a signpost) via the promotion combinator.
- Do not copy spec text into AGENTS.md — point to the spec. The pointer
is durable; the prose diverges and must be cut.
**Nest depth:** add an R/I/U hierarchy to a component AGENTS.md only
when the component has a genuinely distinct sub-goal (Phase 5 NEST
criterion). A root-only project has one R/I/U hierarchy in its root
AGENTS.md covering all constructs.
### Phase 7 — RECONCILE *(HUMAN SEAM — the sync gate)*
**This phase halts.** The persistent layer mutates only through this
reconciliation — never silently.
Present each draft AGENTS.md to the human. The human reconciles
(the volatile draft → persistent sync). On approval, land files at their
target paths (root `/AGENTS.md`; component `<dir>/AGENTS.md`).
**Unanswered questions** from the known-unknown registry that were not
resolved during ELICIT are re-presented here for prioritization, so a
topic-change does not lose them.
---
## Re-run = Refresh (anti-rot)
On an already-oriented project, `/orient` is the **sync/refresh** pass.
Run it whenever the AGENTS.md hierarchy may have drifted from reality.
The refresh pass re-executes the same eight phases but MAP and SURVEY are
diff-scoped (what changed since the last orientation). ELICIT surfaces
**drift candidates**: stale claims, dead links, a parent goal a child no
longer serves (a defeater), requirements that became constraints or vice
versa.
RECONCILE on a refresh presents only the changed sections, not the full
file. **Surfaced-but-unanswered known-unknowns from prior orientations
are re-presented** so they are never silently dropped.
---
## Hydration Protocol — live tracker hydrates from AGENTS.md
When a walk begins on an **oriented project** (AGENTS.md hierarchy
exists), it MUST hydrate its live `context_map` tracker from the
relevant construct's AGENTS.md, not from scratch. (P-TRACK I-T1–I-T2;
primitives-spec.md §P-TRACK §"The AGENTS.md fusion".)
**Hydration steps:**
1. **Locate the governing construct AGENTS.md.** For a root-scoped task:
the root `AGENTS.md`. For a component-scoped task: the component
`AGENTS.md` (if it exists) plus the root for alignment.
2. **Read the R/I/U sections.** Extract each item from the
Requirements, Invariants, and Unknowns sections.
3. **Populate the context-map items.** For each extracted item, set:
- `id`: a stable identifier (e.g. `R1`, `I2`, `U3`)
- `statement`: the item text
- `kind`: `'requirement`, `'invariant`, or `'unknown`
- `grounding`: the grounding from AGENTS.md (or the AGENTS.md
pointer itself if none is recorded: `"AGENTS.md#requirements"`)
- `last_validated`: today's date (ISO 8601) — the hydration date
- `signpost`: the signpost from AGENTS.md
- `hydration_source`: `"<path>#<section>"` (e.g. `"AGENTS.md#requirements"`)
— records that this item came from the persistent anchor
4. **Export and verify.** The populated context-map MUST pass
`nickel export` against `context_map.ncl` (`ContextMap` contract)
before the walk proceeds.
5. **Start from scratch only when unoriented.** An unoriented project
(no AGENTS.md) initializes an empty context-map and populates it
during the walk. This is the fallback, not the default.
**Hydration is the first step of every walk** on an oriented project,
before any task work. A walk that skips hydration and starts from scratch
on an oriented project violates I-T1 (absence = all-unknown-unknown). The
`tracker_fresh.sh` gate enforces this: a stale `last_validated` on a
`hydration_source` item signals the anchor has drifted.
---
## Reorientation — ongoing disposition, triggered by staleness
**Reorientation is not a scheduled re-run; it is a disposition triggered
by staleness.** (P-TRACK I-T3; primitives-spec.md §P-TRACK §"reorientation
as an ONGOING disposition".)
A staleness trigger fires when:
- The `tracker_fresh.sh` gate reports `STALE` on any context-map item
(a `last_validated` is behind the HEAD commit date).
- A landed change **contradicts a tracked R/I** in the context-map —
a requirement is now wrong, an invariant is now broken, or a
known-unknown has been resolved. This is premise-freshness lifted to
the persistent tracker.
- A walk surfaces an **unknown-unknown** that, once filed, contradicts
an existing Requirement or Invariant in AGENTS.md.
**On a staleness trigger:**
1. Run `tracker_fresh.sh <context-map-instance.ncl>` to identify stale
items and their `hydration_source` pointers.
2. For each stale `hydration_source`: read the corresponding AGENTS.md
section and compare against the current state.
3. If drift is **tactical** (the item's signpost has not fired; the
item is still valid, just needs its `last_validated` updated):
update `last_validated` in the context-map and continue.
4. If drift is **strategic** (the item's signpost HAS fired — a
requirement is contradicted by reality, or an unknown is resolved):
this is a **Strategic Escalation** (ambient.md §Planning Invariants).
Emit an ESCALATION block, update the live tracker and the AGENTS.md
persistent anchor via `/orient` refresh, and halt for human review.
**Reorientation scope.** A tactical re-validation (step 3) does not
require re-running the full eight-phase workflow — it is a targeted
tracker update. A strategic reorientation (step 4) re-runs at minimum
MAP (diff-scoped) and ELICIT, and presents the corrected R/I/U sections
at RECONCILE for human confirmation before writing back to AGENTS.md.
**Staleness is not an error.** A stale item is a signal, not a failure.
The failure is ignoring the signal — carrying a stale, unverified
requirement forward into task work (rules.md §7: reconstruct, don't
recall).
---
## Tier Economy
| Phase | Tier | Rationale |
| :--- | :--- | :--- |
| 0 BOUND | Architect | Bounding judgment; goal-fit stakes highest here |
| 1 ESTABLISH | Mechanical | Pure bootstrap execution; no judgment |
| 2 MAP | Cheap agents | Structure survey; no goal-fit judgment |
| 3 SURVEY | Cheap agents | Enumeration and relevance projection |
| 4 ELICIT | Architect + Human | Goal-fit is not self-attestable; human seam |
| 5 NEST | Architect | Structural coupling judgment |
| 6 AUTHOR | Architect | Contract-conformant draft |
| 7 RECONCILE | Human | Persistent layer mutates only here |
---
## See Also
- [`/boundary`](../boundary/SKILL.md) — the authority for the IBC
sufficiency conditions (phase 0) and the AGENTS.md contract (phase 6).
- [`/campaign`](../campaign/SKILL.md) — for multi-workstream orchestration
after orientation is complete.
- [`rules.md`](../../rules.md) — the governing Prime Invariants every
AGENTS.md references.
- [`ambient.md`](../../ambient.md) — the always-on principles the
AGENTS.md hierarchy anchors to.
- [`ledger/gate/tracker_fresh.sh`](../../ledger/gate/tracker_fresh.sh) —
the freshness gate; checks whether context-map `last_validated` fields
are current against HEAD. Fresh→0, Stale→1.
- [`ledger/contracts/context_map.ncl`](../../ledger/contracts/context_map.ncl) —
the live tracker carrier contract; `hydration_source` field records the
AGENTS.md anchor a hydrated item came from.
- [`skills/orient/tracker_freshness.ncl`](./tracker_freshness.ncl) —
the Nickel functional core: `is_fresh` and `stale_items` predicates.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!