Skip to content

Requirements: consider user prompt/instructions while working on a repo or workspace

Phase 1 of 3 (requirements → design → tasks). Ticket: issue #59. This phase should be reviewed and approved before moving to design.

Introduction

Teams carry conventions the-loop's structured config cannot model: coding and testing styles, naming rules, review etiquette, domain glossaries, "how we do things here" — usually already written down as a readme or markdown doc. Today the-loop reads only its own config and skill; the operator has no first-class way to say "also read this and follow it". Harness-native memory files (CLAUDE.md, Cursor rules) exist but are harness-specific and outside the-loop's contract.

This work item adds custom instructions: when a user initializes the-loop they can point to one or more instruction documents, per installation of the-loop, at configurable paths (inside or outside the repo). The harness reads them before working and honors them. This is supplementary to the existing external-tools registry (config.externalTools): that registers tools the harness may use; this registers guidance the harness must follow.

Requirements

Requirement 1 — instruction docs are configurable per installation

User story: As a user initializing the-loop, I want to point it at my custom instruction file(s) — readme or markdown — at paths I choose, so that each installation of the-loop carries my conventions without forking the plugin.

Acceptance criteria (EARS)

  1. The config schema SHALL gain a customInstructions section with an ordered docs list, each entry naming a path (repo-relative or absolute) and optional notes describing what the doc covers.
  2. The system SHALL accept paths outside the repository (absolute, per-machine), so an installation can layer org-wide docs the repo does not contain.
  3. WHEN a configured doc does not exist at its path THEN the system SHALL act per customInstructions.onMissing (warn (default) | error | ignore).

Requirement 2 — init establishes the docs with the user

User story: As a user running /the-loop:init, I want the onboarding to ask about custom instructions and propose candidates it detects, so that pointing the-loop at my conventions is part of setup, not something I discover later.

Acceptance criteria (EARS)

  1. The schema's x-onboarding.groups SHALL include a Custom instructions group at ask level confirm, so init raises it in the guided walkthrough (and routes it to needs-user handling only per the existing --defaults rules).
  2. WHEN init detects existing convention files (e.g. CONTRIBUTING.md, style guides under docs/) THEN it SHALL propose them as candidates — never auto-register them without the user's confirmation.

Requirement 3 — the loop reads and honors the docs while working

User story: As a user, I want the harness to actually follow my instructions during every phase of the loop, so that generated requirements, designs, code and tests match my team's styles.

Acceptance criteria (EARS)

  1. WHEN the loop starts working a work item (via work-on or a granular command) THEN the system SHALL read every doc in customInstructions.docs in list order, immediately after loading .the-loop/config.yaml.
  2. The system SHALL honor the instructions throughout the phases, and after a context clear SHALL re-read them like every other checked-in artifact (reference/context.md).
  3. The skill SHALL document the load order and when to re-read (phase-scoped, driven by each entry's notes) in a dedicated reference file the operating commands point to.

Requirement 4 — precedence is defined and gates cannot be instructed away

User story: As a user, I want a predictable answer to "who wins when my doc and the-loop disagree", so that custom instructions are useful without becoming a bypass of the loop's rigor.

Acceptance criteria (EARS)

  1. The structured config SHALL win where both speak: an instruction doc cannot silently override a .the-loop/config.yaml key — the mismatch is surfaced to the user.
  2. Custom instructions SHALL win over the-loop's own defaults for everything the config does not model (styles, conventions, domain guidance); within the list, later docs win over earlier ones.
  3. The system SHALL NOT let an instruction doc weaken the loop's hard gates (security gates, paper trail, phase/review gates, risk-tiered autonomy); such an instruction is ignored and the conflict logged (fail-closed).

Security considerations

  • Untrusted actors / trust boundaries: instruction docs are operator-configured installation input — the same trust level as .the-loop/config.yaml itself, NOT webhook/ticket/PR-comment content. The authorized-actor guard (decision-023) is unchanged: nothing in this feature lets ticket content register or edit instruction docs.
  • Abuse case — prompt injection via a doc changed in a work item's own diff: a PR could modify a registered instruction doc to weaken behavior on subsequent runs. Mitigation: Requirement 4.3 (gates cannot be instructed away, fail-closed) plus the normal review of the diff like any other file.
  • Fail-closed: on conflict with a gate the gate wins and the conflict is logged; onMissing: error is available for operators who want absence itself to halt.

Out of scope

  • Fetching instruction docs from URLs or remote stores — paths on the local filesystem only (minimalism; a remote doc can be checked in or synced by other means).
  • Replacing harness-native memory files (CLAUDE.md, Cursor rules) — they keep their own semantics; customInstructions is the harness-portable channel the-loop itself guarantees.
  • Structured/machine-readable instruction formats — the docs are prose markdown by design; anything structurable belongs in .the-loop/config.yaml.

Released under the MIT License.