5.7 KiB
Generated Artifact Policy
SF keeps operational generated artifacts out of the project root unless a human explicitly promotes them into durable project documentation.
Default Locations
.sf/stores SF-local operational state, generated harness notes, scaffold manifests, runtime caches, locks, temporary agent files, and generated orientation caches such as.sf/repo-map/.docs/plans/,docs/specs/, anddocs/adr/store promoted or generated human-facing exports for review and git history.docs/generated/stores explicitly promoted generated documentation when a project wants a generated artifact in version control.- Generated docs may change by design. Git keeps their human-facing history;
SF-owned operational history belongs in
.sf/SQLite when runtime replay, ledgers, memory, or drift analysis matter. - Root files such as
AGENTS.md,ARCHITECTURE.md, and.siftignoreare allowed only when they are part of the versioned scaffold contract.
Resource Layers
SF follows the same separation as Copilot-style agent customization:
| Layer | Path | Git ownership | Purpose |
|---|---|---|---|
| Bundled SF resources | src/resources/skills/, src/resources/workflow-skills/, src/resources/agent-overlays/, src/resources/extensions/sf/prompts/, src/resources/extensions/sf/ |
tracked source | Product-shipped defaults. Change these to change SF itself. Workflow skills are hidden system patterns, not a general skill catalog. |
| Repo agent overlay | .agents/ |
tracked project policy | Project-owned prompts, policies, and optional user skill overrides. Same-name skills override non-locked bundled skills. |
| Repo instructions | AGENTS.md, CLAUDE.md, .github/copilot-instructions.md, .github/instructions/*.instructions.md |
tracked project policy | Agent-facing repo guidance. Keep short, durable, and non-runtime. |
| Runtime generated context | .sf/repo-map/, .sf/traces/, .sf/backups/, .sf/metrics.db* |
gitignored | Local cache, observability, recovery, and orientation. Safe to delete/regenerate. |
| Promoted generated docs | docs/generated/ |
tracked after review | Durable generated docs that humans chose to version. |
.sf/repo-map/ is not a source of truth. It is a generated context cache for
agent orientation. If a repo-map page becomes valuable as documentation, promote
it to docs/generated/repo-map/ or rewrite it into normal docs/.
Prompt and Instruction Layers
Prompt resources follow the same split:
- Built-in prompts:
src/resources/extensions/sf/prompts/and other bundled resource directories. These ship with SF and should be edited only when changing product behavior. - Built-in repo defaults:
src/resources/agent-overlays/contains product defaults that SF ships, including default repo prompts and default policies. - Repo prompts and instructions:
.agents/prompts/, rootAGENTS.md, rootCLAUDE.md, and compatible tool files such as.github/copilot-instructions.md..agents/prompts/is for repo-owned overrides only; root instruction files remain durable human-readable pointers. - Path-specific instructions: use repo instruction files when behavior should apply only to part of the tree. Keep them stable and reviewable.
- Generated context:
.sf/repo-map/and other.sf/runtime outputs are not prompt source. They may be injected as context when fresh, but they are ignored and regenerable.
Do not promote generated .sf context by copying it into prompt overlays
verbatim. Summarize the durable rule, link the canonical source, and keep the
overlay short enough to be loaded every run.
SF .agents Overlay
Until the external .agents specs settle, this repo uses
sf-agents-overlay/v1:
.agents/manifest.yamlis the repo-owned machine index for optional prompt, policy, mode, adapter, and project skill overrides..agents/prompts/,.agents/policies/,.agents/modes/,.agents/adapters/,.agents/scopes/, and.agents/profiles/are empty by default. Defaults live insrc/resources/..agents/skills/<name>/SKILL.mdis the canonical skill payload and follows the Agent Skills specification..agents/skills/is empty by default. SF product-owned user skills live undersrc/resources/skills/; automatic workflow guidance lives undersrc/resources/workflow-skills/as hidden system pattern skills.- SF self-learning is per repo: runtime evidence and candidate variants belong
in
.sf/ SQLite first, reviewed repo-specific improvements are proposed as.agents/overrides, and bundled defaults undersrc/resources/change only when the improvement is product-wide. .agents/skills/<name>/skill.yamlis optional compatibility metadata for projection tools. It may point atSKILL.md, but it must not replace it as the instruction source..agents/state/state.yamlis local convenience state and must remain gitignored..sf/remains SF runtime state. Structured SF state stays DB-first.
Harness
Generated harness material belongs under .sf/harness/.
Top-level harness/ is not created by SF by default. If a project intentionally
owns a top-level harness, SF leaves it alone unless the files still carry
pending sf-doc markers proving they are old SF-generated residue.
Doctor Cleanup
/sf doctor --fix may remove root-level generated residue only when all of the
following are true:
- the file is under a legacy SF-generated path such as
harness/specs/; - the file has an
sf-docmarker; - the marker template matches the file path;
- the marker state is
pending; - the current body hash still matches the marker hash.
Anything edited, completed, unmarked, or project-owned is reported conservatively or left untouched.