Skip to content
Back to skills

Orient

ASecurity

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...

  • 10 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 1, 2026
documentationgogit

Works with

  • mcp

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned September 1, 2026

npx -y skills add nrdxp/predicate --skill orient --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Orient?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Orient
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/nrdxp-orient/badge)](https://www.skillsdirectory.com/skills/nrdxp-orient)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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.

Files in this skill

  • SKILL.md14.4 KB
  • tracker_freshness.ncl2.7 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…