Files
pi-map/openspec/changes/archive/2026-06-11-project-map-prompt-injection/proposal.md
T

3.7 KiB

Proposal: Project Map Prompt Injection

Status

Field Value
Phase Proposal
Based on Grill Me checkpoint + runtime/doc inspection
Next Spec

Problem

pi-project-map currently provides strong generated artifacts and tool surfaces, but weak automatic runtime guidance.

Today the repo has:

  • a one-time before_agent_start hint,
  • a session_start dirty-state UI notification,
  • tool metadata and docs,
  • generated .pi-map.md / .pi-map.index.md artifacts.

But it lacks a clear spec for:

  1. when maps/indexes should be injected automatically,
  2. how much should be injected under a context budget,
  3. how reinjection should avoid wasting prompt space,
  4. how visible that guidance should be to the user,
  5. how strong enforcement should be,
  6. how to validate this behavior with integration tests.

Proposed change

Adopt a runtime prompt-injection policy for project-map that:

  • always injects the root pair after init,
  • expands outward under a hybrid context budget cap,
  • avoids redundant reinjection by scanning the actual outgoing context,
  • keeps retrieval guidance separate from this spec,
  • exposes four configurable guidance modes (off, advisory, strong, strict),
  • uses mixed visibility: user-visible startup hints, agent-visible artifact injection,
  • requires extensive integration tests for reinjection and context-scanning behavior.

In scope

  • Define pre-init startup hint behavior
  • Define post-init automatic root-pair preload behavior
  • Define hybrid budget defaults and config shape
  • Define outgoing-context scanning for reinjection avoidance
  • Define visibility model for hints vs injected artifacts
  • Define configurable guidance-strength modes and default
  • Define relevant-turn reinjection triggers for strong
  • Define strict-mode bypass-justification behavior at the spec level
  • Define validation and integration-test expectations
  • Define implementation slices for runtime hooks/config/tests/docs

Out of scope

  • Redesign retrieval ranking or project_map_context
  • Merge retrieval behavior into this policy spec
  • Redesign paired artifact contents
  • Introduce vector stores, Engram, or external retrieval backends
  • Guarantee provider-agnostic perfect token counting beyond best-effort budgeting

Decisions from grilling

Topic Decision
Change slug project-map-prompt-injection
Scope split Retrieval remains a separate spec
Pre-init Inject only a lightweight project_map_init hint
Fake/synthetic maps before init No
Guaranteed minimum Always inject root .pi-map.index.md + root .pi-map.md
Budget model Hybrid cap
Budget config Relative percentage + optional absolute cap; smaller wins
Budget default 15% of context window, capped at 100k tokens
Reinjection avoidance Canonical marker scanning in actual outgoing context
Visibility Mixed
Mode set off, advisory, strong, strict
Default mode strong
strong triggers Relevant turns only
Validation Extensive integration tests required

Success criteria

  • The spec clearly defines what is injected before and after init
  • The spec clearly defines how much is injected and how budgets are applied
  • The spec clearly defines when reinjection checks happen and how duplicates are avoided
  • The spec clearly defines mode semantics and the default mode
  • The spec clearly separates runtime injection policy from retrieval behavior
  • The implementation plan can be executed in narrow, reviewable slices
  • The validation section makes integration coverage a first-class requirement