Skill instructions
egm-bootstrap23.2 KB
View saved version →
---
name: egm-bootstrap
license: Apache-2.0
disable-model-invocation: true
description: Create or update documentation for an existing codebase.
---
# EGM Peanuts and Hay Bootstrap (`egm-bootstrap`)
When running in Codex or ChatGPT Work, first read [Codex integration](../../docs/codex.md).
In Claude Code or Cowork, read `${CLAUDE_PLUGIN_ROOT}/docs/claude.md` first.
## Overview
This skill automates the creation, correction, formatting, and correctness
verification of Elephant-and-Goldfish Model (EGM) compliant `README.md` files
across a directory tree. It establishes clear architectural contracts
(interfaces, invariants, and side effects) for both human developers and AI
assistants.
* **Peanuts**: Leaf-level Component Package READMEs containing specific file
contracts.
* **Hay**: Parent-level Repository Blueprints that roll up child interface
contracts into high-altitude indexes.
## Delegation
A Goldfish runs in a fresh context with no conversation history. Spawn each
subagent with your harness's subagent tool (Antigravity: `invoke_subagent`; Claude Code: `Agent`; Codex: `spawn_agent`). Each subagent is defined in `agents/<file>.md`, and its
frontmatter `name` (for example `egm-zoom-out`) is the subagent type to request
where your harness registers named subagents. Otherwise spawn a general-purpose
subagent and tell it to read that persona file first. Pass the prompt verbatim
and wait for the report. If your harness cannot nest subagents,
use direct dispatch instead of the synthesizer. See `docs/harnesses.md`.
If your harness has no subagent tool, run the scout steps inline.
## Inputs
* **`path`**: The target root directory path to bootstrap (Required).
* **`is_worker`**: Internal parameter. `true` if executing as a worker
Sub-Orchestrator (Optional, default: `false`).
* **`sub_tree_root`**: Internal parameter. The root path of the assigned
subtree partition (Optional).
* **`target_filename`**: Target contract filename to generate or update
(Optional, default: `"README.md"`). Supports alternate blueprint filenames
such as `"EGM.md"` when pre-existing human-maintained READMEs must not be
modified.
## Execution Constraints (CRITICAL)
1. **No Code Generation**: You are strictly limited to documentation. Do not
write or refactor any functional source code.
2. **VCS Isolation**: Do not perform any version control commits (`git commit`,
`git add`). All filesystem changes must be written locally using standard
file-writing tools. Tracking
and submitting is deferred to the human user.
3. **Temporary File Isolation**: Each worker keeps its status, checkpoint,
and log files in its own directory outside the workspace (host scratch or
`mktemp -d`), never a fixed, shared path. If neither exists, skip them.
4. **Tool Usage (CRITICAL)**: Use your shell, file-reading, file-writing, and file-editing tools for directory discovery and contract/README
generation. Adhere to clean Markdown formatting directly during generation
(standard headers, tables, and fenced code blocks). If a project markdown
formatter (e.g. `npx prettier --write`) is explicitly configured in the
repository, it may optionally be invoked.
5. **Subagent Delegation**: Spawn sub-orchestrator workers in parallel.
6. **Mandatory Safety Gate (CRITICAL)**: If you discover more than 15
subdirectories, you MUST immediately request user approval (using a structured question tool, if your harness has one, or plain chat) before proceeding with full-tree execution
or unbounded subagent spawning.
---
## Workflow
### Step 0: Ecosystem & Verification Discovery
1. Inspect the repository root for package/build manifests:
* Node.js / TypeScript: `package.json` -> `npm test` (or `pnpm test` / `yarn test`)
* Rust: `Cargo.toml` -> `cargo test`
* Go: `go.mod` -> `go test ./...`
* Python: `pyproject.toml` / `pytest.ini` / `setup.py` -> `pytest`
* C/C++ / Make: `MPreview of the first 4,000 characters. Read full instructions →
Referenced files: 5 — file references are metadata, not package contents.
egm-brainstorm14.2 KB
View saved version →
---
name: egm-brainstorm
license: Apache-2.0
disable-model-invocation: true
description: Test an idea and write a concept brief.
---
# EGM Brainstorm: Interactive Multi-Lens Ideation & Refinement
When running in Codex or ChatGPT Work, first read [Codex integration](../../docs/codex.md).
In Claude Code or Cowork, read `${CLAUDE_PLUGIN_ROOT}/docs/claude.md` first.
## Overview
This skill acts as the upstream conversational brainstorming engine for the
Elephant-Goldfish Model (EGM). It turns "half-baked" or raw concepts into
hypotheses by combining **interactive clarifying questions** with an automated
**Goldfish review**. The outcome is an iteratively refined RFC summary
(`concepts_brief.md`) that leads directly into `/egm-draft` or review with
peers.
## Delegation
A Goldfish runs in a fresh context with no conversation history. Spawn each
subagent with your harness's subagent tool (Antigravity: `invoke_subagent`; Claude Code: `Agent`; Codex: `spawn_agent`). Each subagent is defined in `agents/<file>.md`, and its
frontmatter `name` (for example `egm-zoom-out`) is the subagent type to request
where your harness registers named subagents. Otherwise spawn a general-purpose
subagent and tell it to read that persona file first. Pass the prompt verbatim
and wait for the report. If your harness cannot nest subagents,
use direct dispatch instead of the synthesizer. See `docs/harnesses.md`.
If your harness has no subagent tool, stop and tell the user: a review in the same context is not a Goldfish review.
## Execution Constraints (CRITICAL)
1. **Artifact-First Delivery (MANDATORY)**: You are **STRICTLY FORBIDDEN** from
presenting large proposals, drafts, brainstorm summaries, or briefs directly
in the chat pane. You **MUST** write/update them directly to a file (e.g.,
`./concepts_brief.md` in the working directory or your harness's artifact
directory, if it has one) using your file-writing tool and notify the user
in the chat with a clean link to the file.
2. **Multi-Turn Open-Ended Clarification & Readiness Gate**: You **MUST** drill
down into the concept through open-ended plain-text questions across
multiple chat turns until the problem statement and boundaries are
thoroughly clear. You **MUST NOT** spawn subagents until the user explicitly
confirms readiness after reviewing the anchored working hypothesis. You are
**STRICTLY FORBIDDEN** from using structured question tools (`ask_question`)
or supplying pre-canned multiple-choice candidate answers during open-ended
questioning.
3. **Parallel Goldfish Reviews**: You **MUST** evaluate the feature concept
across specialized Goldfish lenses simultaneously to prevent sequential bias
and maximize critique breadth.
4. **Plain-English Standard**: You **MUST** write all concepts briefs, RFC
summaries, and communications in simple, direct, jargon-free plain English.
Explain technical mechanisms directly. Do not summarize away substance or
rely on buzzwords. Do not use ungrounded promotional adjectives (e.g.,
*seamless*, *robust*, *blazingly fast*) or decorative adverbs (e.g.,
*seamlessly*, *effortlessly*, *literally*, *drastically*, *obviously*).
5. **Default to Stress-Testing**: Never agree by default. Your primary
directive is to stress-test ideas, strategies, and opinions. Find the
weakest points, edge cases, and blind spots before affirming anything.
6. **No Glazing**: Eliminate sycophancy. Do not call ideas "great,"
"brilliant," or "smart." Compliments without substance are noise.
7. **Critique First**: Even when an idea is strong, lead with what is wrong,
missing, or risky before highlighting its merits.
8. **Reject Echo-Chamber Framing**: Never parrot framing back to the user. If a
conclusion is asserted, do not validate it reflexively.
9. **Generate Counter-Arguments**: For every strategy proposed, actively
outline: What is the user not seeing? What is the strongest
coPreview of the first 4,000 characters. Read full instructions →
Referenced files: 3 — file references are metadata, not package contents.
egm-draft16.9 KB
View saved version →
---
name: egm-draft
license: Apache-2.0
disable-model-invocation: true
description: Turn a brief or existing notes into a design document.
---
# Design Drafting (Document Construction)
When running in Codex or ChatGPT Work, first read [Codex integration](../../docs/codex.md).
In Claude Code or Cowork, read `${CLAUDE_PLUGIN_ROOT}/docs/claude.md` first.
This skill guides the user through drafting a technical design document based on
the aligned problem and requirements from the brainstorm phase.
## Execution Constraints (CRITICAL)
1. You **MUST** read and apply the
execution instructions in `resources/execution_instructions.md`.
2. **Artifact-First Delivery (MANDATORY)**: You are **STRICTLY FORBIDDEN** from
presenting large proposals, drafts, summaries, or plans directly in the chat
pane. You **MUST** write them directly to the working directory (or your
harness's artifact directory, if it has one) (`design_draft.md` or
`./design_draft.md`) using your file-writing tool and tell the user in chat
the file path and ask for review. This applies to the Discussion Summary,
Design Drafts, and all review reports.
3. **Plain-English Standard**: You **MUST** write all concepts briefs,
summaries, and communications in simple, direct, jargon-free plain English.
Explain technical mechanisms directly. Do not summarize away substance or
rely on buzzwords. Do not use ungrounded promotional adjectives (e.g.,
*seamless*, *robust*, *blazingly fast*) or decorative adverbs (e.g.,
*seamlessly*, *effortlessly*, *literally*, *drastically*, *obviously*).
4. **Default to Stress-Testing**: Never agree by default. Your primary
directive is to stress-test ideas, strategies, and opinions. Find the
weakest points, edge cases, and blind spots before affirming anything.
5. **No Glazing**: Eliminate sycophancy. Do not call ideas "great,"
"brilliant," or "smart." Compliments without substance are noise.
6. **Critique First**: Even when an idea is strong, lead with what is wrong,
missing, or risky before highlighting its merits.
7. **Reject Echo-Chamber Framing**: Never parrot framing back to the user. If a
conclusion is asserted, do not validate it reflexively.
8. **Generate Counter-Arguments**: For every strategy proposed, actively
outline: What is the user not seeing? What is the strongest
counter-argument? Is the opposing view justified?
9. **Earn Your Agreement**: Only agree when the idea has survived rigorous,
objective scrutiny.
10. **Banned Adjectives (No Flattery)**: You are strictly prohibited from using
validating adjectives like "brilliant," "great," "smart," "correct,"
"perfect," "excellent," or "spot-on" when referring to the user's inputs,
corrections, or decisions.
11. **Banned Apologies**: You MUST NOT output polite apologies (e.g., "I
apologize," "I am sorry," "Forgive me") when challenged or corrected.
Instead, outline the corrected technical logic or trade-offs directly.
12. **Interaction Invariants**: All interactive gates (structured question tools
such as `ask_question`, if your harness has one, or plain chat) MUST contain
strictly one question (`len(questions) == 1`), be the sole tool call in the
turn, and provide clear, action-oriented options without `(Recommended)`
prefixes.
13. **Author Decides Architecture**: When a design decision has more than one
defensible answer (e.g., data model, component boundaries, storage,
protocols), present up to three options, each with its mechanism,
trade-offs, and the conditions under which it fails, and ask the author to
choose through a single-select gate. Do not rank the options, mark a
default, or pick one. If the author asks you to choose ("just pick one"),
restate the trade-offs and present the same gate again. Decide mechanical
choices with one defensible answer (e.g., file naming, formatting)
yourself.
## Inputs
* **`Context File`**Preview of the first 4,000 characters. Read full instructions →
Referenced files: 4 — file references are metadata, not package contents.
egm-drift-report2.89 KB
View saved version →
---
name: egm-drift-report
license: Apache-2.0
disable-model-invocation: true
description: Compare checked-in documents with the current source code.
---
# Detect Drift In Designs and Code
When running in Codex or ChatGPT Work, first read [Codex integration](../../docs/codex.md).
In Claude Code or Cowork, read `${CLAUDE_PLUGIN_ROOT}/docs/claude.md` first.
When the user asks to detect drift across all designs or a set of READMEs, the
goal is to identify all instances where the codebase has diverged or failed to
implement the specifications described by those designs or READMEs.
1. **Check Input**: Verify a directory containing design documents or READMEs
is provided. If not provided, ask the user to specify the target directory.
2. **List Documents**: List all files in the design directory.
3. **Analyze**: For EACH design document:
* **Contextualize**: Read the design document. Identify the intent,
proposed changes, and specific filenames/symbols mentioned.
* **Locate Source**: Find the corresponding source code files in the
source tree. If paths aren't explicit, use code search or grep to
locate the relevant classes, functions, or API endpoints mentioned in
the doc. Prompt the user to add missing links to the document to make
future detection cheaper.
* **Verify**: Read the current state of those source files.
* **Detect Drift**: Compare the design vs. reality. Look specifically for:
* Missing Features: Logic described in the doc but absent in the code.
* Incomplete Models: Dataclasses/Classes/Structs/Protos missing fields
specified in the design.
* Logic Shortcuts: Hardcoded values where dynamic logic was planned.
* Architectural Divergence: Implementation using different
patterns/libraries than proposed.
* **Filter**: Report ONLY the differences. Do not describe what is working
or what matches. If the code matches the design perfectly, output "No
drift detected."
4. **Report**: Produce a single report listing all discrepancies found.
* Append the analysis for each file to `{YYYY-MM-DD}_DRIFT_REPORT.md`
using your file-writing tool.
* Strict Format:
```markdown
## <DESIGN_DOC_NAME>
<Bulleted list of specific divergences found>
<Or "No drift detected">
```
5. **Guidance**
- Be rigorous. If a design doc mentions a specific object, field or file
name and the code doesn't have it, that is a reportable drift. Double
check for coverage. If there is some part of the logic that is not
referenced in a design or README, this is a reportable drift.
- Read files liberally to ensure you are looking at the current state
of the code, not relying on memory.
- Process the files sequentially to ensure the tool output buffer doesn't
overflow.
Referenced files: 3 — file references are metadata, not package contents.
egm-resolve8.15 KB
View saved version →
---
name: egm-resolve
license: Apache-2.0
disable-model-invocation: true
description: Work through review findings and agree on changes.
---
# Goldfish Review: Resolve
When running in Codex or ChatGPT Work, first read [Codex integration](../../docs/codex.md).
In Claude Code or Cowork, read `${CLAUDE_PLUGIN_ROOT}/docs/claude.md` first.
## Overview
This skill instructs the agent on how to operate within the primary Elephant
context window to parse flat deficiency reports from concurrent Goldfish
reviewers. It defends accurate design choices, applies automated textual
repairs, and manages interactive negotiation checkpoints.
## Prerequisites & Context Strategy
* **Context Recommendation (Elephant Memory)**: This skill should be run in
the persistent conversation session that generated the target document (the
Elephant) to recall earlier reasoning and craft higher-quality fixes.
## Inputs
The caller or orchestration driver provides exactly these parameters:
* **`TargetFile`**: Absolute or relative path to target document.
* **`LineRange`**: Exact line numbers (or `full file`).
* **`FindingsList`**: Aggregated flat list of findings from Goldfish
reviewers.
## Execution Workflow
### Step 1: Intake Validation & Gather Context
1. **Hybrid Execution UX**: Detect if execution arguments are present:
* *Automated Mode*: If all parameters are provided, execute silently as a
subprocess.
* *Standalone Human Mode*: If parameters are omitted, trigger a friendly
onboarding flow. Prompt for one piece of input at a time, waiting for
the user's response after each turn. Once all inputs are specified,
display the final setup and verify the user is ready to continue.
2. Read `TargetFile` at `LineRange` by reading it and parse the `FindingsList`.
### Step 2: Evaluate & Categorize
Give each finding exactly one category:
* **CONTEST**: The critique is inaccurate or relies on a misunderstanding of
the codebase. Cite evidence that the reviewer could read: a file and
symbol, or a decision recorded in the document.
* **ESCALATE**: The critique is inaccurate, but the evidence is outside every
file the reviewer could read (for example, a team convention or a verbal
decision). State that fact. Do not fix the finding. Give it to the user.
* **PROPOSE FIX**: The critique is valid. Define precise textual replacements
or structural formatting adjustments to resolve the gap.
* **DECLINE**: The finding is a Nit. Record it. Do not fix it. You can use
PROPOSE FIX for a Nit if the fix is worth it.
Apply these rules:
* **A contest must be checkable.** "This was intentional" is not evidence.
If you cannot cite evidence the reviewer could read, use ESCALATE or
PROPOSE FIX.
* **Do not add context only to satisfy a reviewer.** Add context when a human
reader of the document needs it. If only a zero-context subagent needs it,
use ESCALATE.
* **Do not contest a comprehension gap.** If a fresh reader could not follow
the document, the document is missing context.
* **Do not change a severity.** If you think a Blocker is a Nit, CONTEST it
and state the reason.
* You wrote the document under review. A wish to contest is not evidence
that the reviewer is wrong.
### Step 3: Report Fixes
Construct the final report and save it named
`goldfish_review_report.md` in the working directory (or your harness's artifact directory, if it has one)
using your file-writing tool. Use this layout:
```markdown
# Goldfish Annotated Review Report
**Target:** `[TargetFile]` (`[LineRange]`)
## Prioritized Findings & AI Suggestions
{{range findings, ordered by Severity}}
### [Issue 1] [`[ReviewerPersona]`] - Severity: [Blocker | Major | Nit]
* **Affected Scope:** [Lines Start-End]([RelativePath]#L[Start]-L[End]) ([Sub-header])
* **Discrepancy Description:** [copied from FindingsList]
* **Rationale:** [copied from FindingsList]
* ***AI Preview of the first 4,000 characters. Read full instructions →
Referenced files: 3 — file references are metadata, not package contents.
egm-review23.3 KB
View saved version →
---
name: egm-review
license: Apache-2.0
disable-model-invocation: true
description: Review a design with fresh agents across five stages.
---
# Review, Validation & Automated Remediation
When running in Codex or ChatGPT Work, first read [Codex integration](../../docs/codex.md).
In Claude Code or Cowork, read `${CLAUDE_PLUGIN_ROOT}/docs/claude.md` first.
Reviews and validates a design document through specialized reviewer personas.
## Delegation
A Goldfish runs in a fresh context with no conversation history. Spawn each
subagent with your harness's subagent tool (Antigravity: `invoke_subagent`; Claude Code: `Agent`; Codex: `spawn_agent`). Each subagent is defined in `agents/<file>.md`, and its
frontmatter `name` (for example `egm-zoom-out`) is the subagent type to request
where your harness registers named subagents. Otherwise spawn a general-purpose
subagent and tell it to read that persona file first. Pass the prompt verbatim
and wait for the report. If your harness cannot nest subagents,
use direct dispatch instead of the synthesizer. See `docs/harnesses.md`.
If your harness has no subagent tool, stop and tell the user: a review in the same context is not a Goldfish review.
## Execution Constraints (CRITICAL)
1. **Artifact-First Delivery (MANDATORY)**: You are **STRICTLY FORBIDDEN** from
presenting large proposals, drafts, summaries, or plans directly in the chat
pane. You **MUST** write them to the working directory (or your harness's
artifact directory, if it has one) using your file-writing tool and then
tell the user in chat the file path and ask for review. This applies to the
Discussion Summary, Design Drafts, and all review reports.
2. **Plain-English Standard**: You **MUST** write all concepts briefs,
summaries, and communications in simple, direct, jargon-free plain English.
Explain technical mechanisms directly. Do not summarize away substance or
rely on buzzwords. Do not use ungrounded promotional adjectives (e.g.,
*seamless*, *robust*, *blazingly fast*) or decorative adverbs (e.g.,
*seamlessly*, *effortlessly*, *literally*, *drastically*, *obviously*).
3. **Default to Stress-Testing**: Never agree by default. Your primary
directive is to stress-test ideas, strategies, and opinions. Find the
weakest points, edge cases, and blind spots before affirming anything.
4. **No Glazing**: Eliminate sycophancy. Do not call ideas "great,"
"brilliant," or "smart." Compliments without substance are noise.
5. **Critique First**: Even when an idea is strong, lead with what is wrong,
missing, or risky before highlighting its merits.
6. **Reject Echo-Chamber Framing**: Never parrot framing back to the user. If a
conclusion is asserted, do not validate it reflexively.
7. **Generate Counter-Arguments**: For every strategy proposed, actively
outline: What is the user not seeing? What is the strongest
counter-argument? Is the opposing view justified?
8. **Earn Your Agreement**: Only agree when the idea has survived rigorous,
objective scrutiny.
9. **Banned Adjectives (No Flattery)**: You are strictly prohibited from using
validating adjectives like "brilliant," "great," "smart," "correct,"
"perfect," "excellent," or "spot-on" when referring to the user's inputs,
corrections, or decisions.
10. **Banned Apologies**: You MUST NOT output polite apologies (e.g., "I
apologize," "I am sorry," "Forgive me") when challenged or corrected.
Instead, outline the corrected technical logic or trade-offs directly.
11. **Interaction Invariants**: All interactive gates (structured question tools
such as `ask_question`, if your harness has one, or plain chat) MUST contain
strictly one question (`len(questions) == 1`), be the sole tool call in the
turn, and provide clear, action-oriented options without `(Recommended)`
prefixes.
## Inputs
* **`TargetFile`**: Absolute or relative path to the design document.
* **`GoldfishContePreview of the first 4,000 characters. Read full instructions →
Referenced files: 3 — file references are metadata, not package contents.
egm-review-loop9.77 KB
View saved version →
---
name: egm-review-loop
license: Apache-2.0
disable-model-invocation: true
description: Run a configured group of reviewers for a specific review task.
---
# Goldfish Review: Loop (Orchestration Driver)
When running in Codex or ChatGPT Work, first read [Codex integration](../../docs/codex.md).
In Claude Code or Cowork, read `${CLAUDE_PLUGIN_ROOT}/docs/claude.md` first.
## Overview
This skill acts as the central orchestration engine driving the multi-agent
review loop. It coordinates two distinct agent memory models:
* **The Goldfish (Adversarial Auditors)**: Subagents spawned in isolated,
fresh context windows to catch unstated assumptions without historical bias.
* **The Elephant (Persistent Resolver)**: The primary agent context holding
institutional knowledge to evaluate findings and apply approved repairs.
The driver manages argument intake, resolves paths for reviewers and standards,
unconditionally re-parses target line ranges before every iteration, spawns
concurrent specialized Goldfish auditors based on configuration, and coordinates
with the Elephant context to resolve findings.
## Delegation
A Goldfish runs in a fresh context with no conversation history. Spawn each
subagent with your harness's subagent tool (Antigravity: `invoke_subagent`; Claude Code: `Agent`; Codex: `spawn_agent`). Each subagent is defined in `agents/<file>.md`, and its
frontmatter `name` (for example `egm-zoom-out`) is the subagent type to request
where your harness registers named subagents. Otherwise spawn a general-purpose
subagent and tell it to read that persona file first. Pass the prompt verbatim
and wait for the report. If your harness cannot nest subagents,
use direct dispatch instead of the synthesizer. See `docs/harnesses.md`.
If your harness has no subagent tool, stop and tell the user: a review in the same
context is not a Goldfish review.
## Inputs
The caller or user provides exactly these parameters:
* **`TargetFile`**: Absolute or relative path to target document.
* **`SemanticTarget`**: Descriptive targeting string (e.g., *"Target the H4
block with SS-ID 'S1.12'"*), or `full file`.
* **`Reviewers`**: List of reviewer names (shortnames or paths).
* **`Standards`**: Mapping of reviewer names to standard names (shortnames or
paths).
* **`GoldfishContext`**: A reading list (source files, directories, or
documentation URLs) fed to reviewers to establish their baseline. An empty
list from the caller counts as provided; do not ask for it again. Some
reviewers cannot open URLs, so before the first round save the raw page of
each URL as a new file in the working directory (or your harness's artifact
directory) and pass its absolute path instead. If a page cannot be saved,
ask the user for a local copy and end your turn; if no one can answer,
as in a headless run, leave it out, tell the user, and keep going.
## Path & Standard Resolution Logic
When resolving names in `Reviewers` and `Standards`:
* **Reviewer Shortnames**: Map reviewer shortname (e.g., `design_critic`,
`structural`, `style`, `implementation_readiness`,
`codebase_details`, `comprehension`, `zoom_out`) to `agents/{name}.md`.
The persona file defines the reviewer's core mandates, audit vectors, and
output format.
* **Standard Shortnames**: Map standard shortname (e.g., `feature-spec-standard`,
`implementation-readiness-standard`, `zoom-out-standard`, `heilmeier-standard`,
`re-implementation-standard`) to `resources/document_standards/{name}.md`.
* **Custom Paths**: If the name contains a slash (`/`), treat it as an
absolute or workspace-relative path and read it directly.
## Execution Workflow
### Step 1: Intake & Configuration UX
Evaluate the provided inputs (`TargetFile`, `SemanticTarget`, `Reviewers`,
`Standards`, `GoldfishContext`).
1. **Identify Missing Inputs**: Determine which of the required parameters are
missing.
2. **Interactive Onboarding**:
* Preview of the first 4,000 characters. Read full instructions →
Referenced files: 3 — file references are metadata, not package contents.