Skip to content

docs(glossary): customization vocabulary for agents and skills - #6383

Open
ascerra wants to merge 8 commits into
docs/adr-0091-always-on-skillsfrom
docs/glossary-customization-vocab
Open

docs(glossary): customization vocabulary for agents and skills#6383
ascerra wants to merge 8 commits into
docs/adr-0091-always-on-skillsfrom
docs/glossary-customization-vocab

Conversation

@ascerra

@ascerra ascerra commented Aug 19, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Adds a Customization vocabulary index and A–Z terms so “customized agent” discussions map to real capabilities (configured default / derived / custom, additive vs skill override, script override, BYOA).
  • Stacked on ADR 0091 so Always-on / On-demand skill links resolve.

Dependency / merge order

Depends on: #6378 (docs(adr): add ADR 0091 always-on harness skills)

Merge after #6378 merges. This PR is opened as a draft against the 0091 branch. After #6378 lands on main, retarget this PR to main (or rebase) and undraft.

Test plan

@github-actions

github-actions Bot commented Aug 19, 2026

Copy link
Copy Markdown

Site preview

Preview: https://069e43fe-site.fullsend-ai.workers.dev

Commit: 9988a55322fafad1986c3ff5974d4469ff6dbd94

@fullsend-ai-review

fullsend-ai-review Bot commented Aug 19, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 4:11 PM UTC · Completed 4:28 PM UTC

Commit: c6ab34e · View workflow run →

@fullsend-ai-review

fullsend-ai-review Bot commented Aug 19, 2026

Copy link
Copy Markdown

Review

Findings

Critical

  • [ADR numbering collision] docs/ADRs/0092-always-on-harness-skills.md:1 — ADR 0092 already exists on main as docs/ADRs/0092-openai-wif-credential-delivery.md. This PR creates a second file with the same number. Nineteen files across the codebase (workflow files, architecture.md, pi.md, Go source) reference ADR 0092 pointing to the OpenAI WIF ADR. Every cross-reference this PR adds to ADR 0092 (in glossary.md, architecture.md, codebase-context.md, ADR 0024, and customizing-with-skills.md) links to 0092-always-on-harness-skills.md, which would coexist with the other file. The base branch was likely created before ADR 0092 was merged on main.
    Remediation: Renumber the new ADR to 0093 (or the next available number after checking the highest ADR on main). Update all references in this PR's changed files.

Low

  • [stale-reference] docs/agents/topics/escalation-ladder.md:111 — Example base: URL references fullsend-ai/fullsend/<sha>/internal/scaffold/fullsend-repo/harness/code.yaml. The scaffold harness directory has been extracted to fullsend-ai/agents (ADR 0058). This PR updates the sibling file default-vs-custom.md to reference fullsend-ai/agents, making this example inconsistent. Pre-existing issue not introduced by this PR.
    Remediation: Update the example URL to use fullsend-ai/agents/<sha>/harness/code.yaml.

  • [naming-convention] docs/glossary.md:287 — Script Override uses Details: as its reference-line prefix instead of the established See prefix used by every other glossary entry with a reference line.
    Remediation: Change Details: to See for consistency.


Next steps:

  • /fs-fix — agent addresses review findings automatically
  • /fs-fix <your instruction> — agent fixes with your specific guidance
  • Push commits directly — review re-runs automatically on push
  • /fs-fix-stop — disable automatic fix runs for this PR
Previous run

Review

Findings

Low

  • [broken-forward-reference] docs/glossary.md — Four references to ADRs/0092-always-on-harness-skills.md are added, but ADR 0092 does not exist on the main branch. The PR is stacked on PR docs(adr): add ADR 0092 always-on harness skills #6378 (base branch: docs/adr-0091-always-on-skills), which should introduce that ADR. If docs(adr): add ADR 0092 always-on harness skills #6378 does not merge first, these links will be broken. The ADR numbering is correct (ADR 0091 on main is "per-agent-runtime-model-effort").

  • [code-organization] docs/glossary.md:7 — The new ## Customization vocabulary heading uses the same ## level as single-letter alphabetical groupings (## A, ## B, etc.). The --- separator provides a visual boundary, so this is cosmetic. A bold paragraph header would keep ## reserved for the alphabetical index.

  • [naming-convention] docs/glossary.md:284 — Script Override uses Details: as its reference-line prefix instead of the established See prefix used by every other glossary entry with a reference line.

  • [naming-convention] docs/glossary.md — Three new entries (AGENTS.md, Customized Agent, On-demand Skill) omit the trailing See [...] reference line that the majority of glossary entries use. Pre-existing entries (Evergreen, Rework Rate) also omit it, so this is not a strict rule.


Labels: PR modifies glossary and agent classification documentation under docs/

Previous run (2)

Review

Findings

Low

  • [stale-reference] docs/agents/topics/escalation-ladder.md:80 — Lines 80–81 parenthetically list "(harness, scripts, skills, agent definitions)" under fullsend-ai/fullsend, but harness files and agent definitions now live in fullsend-ai/agents. Pre-existing issue not introduced by this PR; made more visible by glossary updates.

  • [stale-reference] docs/agents/topics/escalation-ladder.md:111 — The base: URL example points to fullsend-ai/fullsend/<sha>/internal/scaffold/fullsend-repo/harness/code.yaml. Other user-facing docs already use fullsend-ai/agents/<sha>/harness/code.yaml. Pre-existing issue not introduced by this PR.

  • [broken-forward-reference] docs/glossary.md — Four references to ADRs/0091-always-on-harness-skills.md are added, but ADR 0091 does not exist on the main branch. The PR is stacked on PR docs(adr): add ADR 0092 always-on harness skills #6378 (base branch: docs/adr-0091-always-on-skills), which structurally enforces merge ordering. Verify docs(adr): add ADR 0092 always-on harness skills #6378 merges first.

  • [code-organization] docs/glossary.md:7 — The new ## Customization vocabulary heading uses the same ## level as single-letter alphabetical groupings (## A, ## B, etc.). The --- separator provides a visual boundary, so this is cosmetic. A bold paragraph header would keep ## reserved for the alphabetical index.

  • [naming-convention] docs/glossary.md — Three new entries (AGENTS.md, Customized Agent, On-demand Skill) omit the trailing See [...] reference line that the majority of glossary entries use. Script Override uses inline references instead of a separate See line.


Labels: PR modifies glossary and agent classification documentation under docs/

Previous run (3)

Review

Findings

Medium

  • [internal-consistency] docs/glossary.md — The Repo Skill entry states: "bootstrap uploads skills into one sandbox skills directory and fails fast on duplicate basenames." The Skill Override entry repeats this: "Do not rely on a same-named repo skill; duplicate basenames fail fast at bootstrap." However, docs/guides/user/customizing-with-skills.md (lines 88–91 and 105–107) states the opposite behavior: repo skills with matching names are "silently ignored" / "shadowed — the agent never sees it." These are contradictory behavioral claims about what happens when a repo skill name collides with a built-in skill. Determine the actual runtime behavior and align both documents.

  • [stale-reference] docs/agents/topics/escalation-ladder.md:80 — Lines 80–83 parenthetically list "(harness, scripts, skills, agent definitions)" under fullsend-ai/fullsend, but this PR's glossary updates assert that harness files and agent definitions now live in fullsend-ai/agents. The existing text already mentions both repos, but the parenthetical on the fullsend line is now inaccurate. Pre-existing issue made more visible by this PR.

  • [stale-reference] docs/agents/topics/escalation-ladder.md:111 — The base: URL example points to fullsend-ai/fullsend/<sha>/internal/scaffold/fullsend-repo/harness/code.yaml. Other user-facing docs (bring-your-own-agent.md, code.md, fix.md) already use the new path fullsend-ai/agents/<sha>/harness/code.yaml. Pre-existing issue; consider updating opportunistically.

Low

  • [broken-forward-reference] docs/glossary.md — Four references to ADRs/0091-always-on-harness-skills.md are added, but ADR 0091 does not exist on the main branch. The PR is stacked on PR docs(adr): add ADR 0092 always-on harness skills #6378 (base branch: docs/adr-0091-always-on-skills), which structurally enforces merge ordering. Verify docs(adr): add ADR 0092 always-on harness skills #6378 merges first.

  • [code-organization] docs/glossary.md:7 — The new ## Customization vocabulary heading uses the same ## level as single-letter alphabetical groupings (## A, ## B, etc.). The --- separator provides a visual boundary, so this is cosmetic. Consider a bold paragraph header to keep ## reserved for alphabetical sections.

  • [naming-convention] docs/glossary.md — Three entries (On-demand Skill, AGENTS.md, Customized Agent) omit the trailing See [...] reference line that most glossary entries use. Script Override uses Details: instead of See. The convention is not universal (Evergreen and Rework Rate also omit it), but consistency would improve.

Previous run (4)

Review

Findings

Medium

  • [internal-consistency] docs/glossary.md — The Repo Skill entry states: "bootstrap uploads skills into one sandbox skills directory and fails fast on duplicate basenames." The Skill Override entry repeats this: "Do not rely on a same-named repo skill; duplicate basenames fail fast at bootstrap." However, docs/guides/user/customizing-with-skills.md (lines 88–91 and 105–107) states the opposite behavior: repo skills with matching names are "silently ignored" / "shadowed — the agent never sees it." These are contradictory behavioral claims about what happens when a repo skill name collides with a built-in skill. Align the glossary with the guide (or vice versa) — if the runtime silently shadows, change the glossary entries; if "fail fast" is the intended new behavior (e.g., from ADR 0091), update the guide.

Low

  • [code-organization] docs/glossary.md:7 — The new ## Customization vocabulary heading uses the same ## level reserved for single-letter alphabetical groupings (## A, ## B, etc.) throughout the rest of the glossary. The section sits above the --- separator, which provides a natural visual boundary, so this is cosmetic rather than structural. Consider demoting to a bold paragraph header or callout block to keep ## exclusively for alphabetical sections.

  • [naming-convention] docs/glossary.md — The ### On-demand Skill, ### AGENTS.md, ### Customized Agent, and ### Script Override entries omit the trailing See [...] reference line that most other glossary entries use. Adding standalone See lines would improve consistency with the established pattern (though the convention is not universal — existing entries like Evergreen and Rework Rate also omit it).

  • [broken-forward-reference] docs/glossary.md — Four references to ADRs/0091-always-on-harness-skills.md are added, but ADR 0091 does not exist on the main branch. The PR is stacked on PR docs(adr): add ADR 0092 always-on harness skills #6378 (base branch: docs/adr-0091-always-on-skills), which structurally enforces merge ordering and reduces the risk of broken links. Verify docs(adr): add ADR 0092 always-on harness skills #6378 merges first.

  • [stale-reference] docs/agents/topics/escalation-ladder.md:111 — The Level 3 example URL still points to fullsend-ai/fullsend for a harness file. This PR updates the glossary and default-vs-custom.md to assert that harness files live in fullsend-ai/agents, making the escalation-ladder example inconsistent. This is a pre-existing issue made more visible by this PR.


Next steps:

  • /fs-fix — agent addresses review findings automatically
  • /fs-fix <your instruction> — agent fixes with your specific guidance
  • Push commits directly — review re-runs automatically on push
  • /fs-fix-stop — disable automatic fix runs for this PR
Previous run (5)

Review

Findings

Low

Info

  • [provenance-warning] — Prior review context discarded: provenance validation failed (unverifiable-wrong-app). This review treats all findings as first-time assessments.
Previous run (6)

Review

Findings

Low

  • [edge-case-correctness] docs/glossary.md:107 — The Configured Default Agent entry lists "skill overrides that do not replace identity fields" as an allowed path. The qualifier "that do not replace identity fields" is technically redundant — skill overrides by definition replace skills, not identity fields (agent:, scripts, slug). The phrasing could imply skill overrides that DO replace identity fields exist, which would be contradictory. Consider simplifying to just "skill overrides."

  • [internal-consistency] docs/glossary.md:249 — The Repo Skill entry explains shadowing via "built-ins are installed at a higher-precedence config layer than repo skills, so the built-in wins on collision." While accurate in outcome (built-in wins), the underlying mechanism is that repo skills don't participate in base composition's dedup-by-basename merge — not that they lose a precedence contest. For a glossary entry, the outcome-level description is adequate but could be more precise.

  • [cross-reference] docs/glossary.md:249 — The Repo Skill entry uses bold on "not" (**not** a skill override). This negative-bold pattern is atypical for the glossary, where bold is reserved for status markers (**Removed.**) and field names rather than negation emphasis.

fullsend-ai-review[bot]

This comment was marked as outdated.

@fullsend-ai-review fullsend-ai-review Bot added the requires-manual-review Review requires human judgment label Aug 19, 2026
@ascerra
ascerra marked this pull request as ready for review August 21, 2026 18:54
@ascerra
ascerra requested a review from a team as a code owner August 21, 2026 18:55
@ascerra

ascerra commented Aug 21, 2026

Copy link
Copy Markdown
Contributor Author

/fs-fix

@qodo-code-review

Copy link
Copy Markdown

PR Summary by Qodo

docs(glossary): add customization vocabulary for agents, skills, and scripts

📝 Documentation ✨ Enhancement 🕐 20-40 Minutes

Grey Divider

AI Description

• Add a “Customization vocabulary” index to disambiguate “customized agent” discussions.
• Define precise terms for agent identity (default/configured/derived/custom) and modification
 types.
• Document skill load modes (always-on vs on-demand) and clarify skill/script override semantics.
Diagram

graph TD
  G["docs/glossary.md"] --> CV(["Customization vocab"])
  CV --> AI(["Agent identity"])
  AI --> DVC["Default vs custom doc"]
  CV --> SK(["Skills terms"])
  SK --> CS["Skills guide"] --> ADR91[("ADR 0091")]
  CV --> SC(["Scripts terms"])
  SC --> ADR24[("ADR 0024")] --> ADR17[("ADR 0017")]
  CV --> BY(["BYOA concept"])
  BY --> BYDOC["BYOA guide"] --> ADR58[("ADR 0058")]

  subgraph Legend
    direction LR
    _c([Concept]) ~~~ _d["Doc"] ~~~ _a[(ADR)]
  end
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Dedicated “Customization taxonomy” doc (non-glossary)
  • ➕ Allows longer narrative explanations and examples without bloating the glossary
  • ➕ Can evolve into a single canonical page referenced by other docs
  • ➖ Adds another entry point; readers may still need quick glossary definitions
  • ➖ Requires maintaining two places (taxonomy doc + glossary anchors) unless glossary becomes a stub
2. Put taxonomy into default-vs-custom page and keep glossary minimal
  • ➕ Keeps definitions close to the primary conceptual guide
  • ➕ Reduces cross-link surface area inside the glossary
  • ➖ Harder to discover for readers who start at the glossary for terminology
  • ➖ Glossary loses its role as the shared vocabulary index
3. Use a formal ADR for terminology decisions
  • ➕ Clear decision record and rationale for naming and boundaries
  • ➕ Easier to reference as “project decision” in debates
  • ➖ Heavier-weight process for vocabulary changes
  • ➖ Still need glossary entries for quick lookup

Recommendation: Current approach (glossary-first taxonomy index + anchored terms + links to canonical guides/ADRs) is the best default because it optimizes for discoverability and shared language in discussions. If the glossary grows too large, consider extracting the index narrative into a dedicated taxonomy page while keeping the glossary definitions and anchors as the stable reference surface.

Files changed (1) +111 / -14

Documentation (1) +111 / -14
glossary.mdAdd customization vocabulary index and new agent/skill/script terms +111/-14

Add customization vocabulary index and new agent/skill/script terms

• Introduces a new “Customization vocabulary” section that classifies agent identity (default/configured/derived/custom) and distinguishes additive vs override skills plus script overrides. Adds new glossary entries (e.g., Additive Skill, Built-in Skill, Repo Skill, Always-on/On-demand Skill, Extension Point, BYOA, Pre/Post-script) and refines existing definitions to align with base composition and ADR references (notably ADR 0091). Repositions the Slash Command entry within the glossary ordering.

docs/glossary.md

@fullsend-ai-coder

fullsend-ai-coder Bot commented Aug 21, 2026

Copy link
Copy Markdown
Contributor

🤖 Finished Fix · ✅ Success · Started 6:56 PM UTC · Completed 7:01 PM UTC

Commit: c6ab34e · View workflow run →

@fullsend-ai-review

fullsend-ai-review Bot commented Aug 21, 2026

Copy link
Copy Markdown

🤖 Review · ⚠️ Cancelled · Started 6:56 PM UTC · Ended 7:02 PM UTC

Commit: c6ab34e · View workflow run →

fullsend-ai-coder Bot added a commit that referenced this pull request Aug 21, 2026
- Remove redundant qualifier "that do not replace identity fields" from
  Configured Default Agent (skill overrides inherently do not touch
  identity fields)
- Replace imprecise "higher-precedence config layer" with accurate
  mechanism in Repo Skill (repo skills do not participate in base
  composition's dedup-by-basename merge)
- Remove atypical bold on "not" in Repo Skill entry to match glossary
  conventions

Addresses review feedback on #6383
@fullsend-ai-coder

Copy link
Copy Markdown
Contributor

🔧 Fix agent — iteration 1 (human-triggered)

Addressed all 3 low-severity review findings: removed a redundant qualifier in Configured Default Agent, corrected the mechanism description in Repo Skill from precedence-based to layer-isolation-based, and removed atypical bold emphasis in Repo Skill.

Fixed (3):

  1. Redundant qualifier in Configured Default Agent entry: Removed 'that do not replace identity fields' from the skill overrides mention in Configured Default Agent. Skill overrides by definition replace skills by basename, not identity fields (agent:, scripts, slug), so the qualifier was redundant and could imply a nonexistent variant.
  2. Imprecise mechanism description in Repo Skill entry: Replaced 'built-ins are installed at a higher-precedence config layer than repo skills' with 'repo skills do not participate in base composition's dedup-by-basename merge'. This accurately describes the layer isolation mechanism rather than implying a precedence contest.
  3. Atypical bold on 'not' in Repo Skill entry: Removed bold from 'not' (not → not) in 'That silent shadowing is not a skill override' to match the glossary convention where bold is reserved for status markers and field names.

Tests: passed

Next steps:

  • /fs-review — request a re-review of the changes
  • /fs-fix <your instruction> — run another fix pass with specific guidance
  • Push commits directly — review re-runs automatically on push
    Updated by fullsend fix agent

@qodo-code-review

qodo-code-review Bot commented Aug 21, 2026

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📜 Skill insights (0)

Grey Divider


Action required

1. Repo skill collision misdescribed ✓ Resolved 🐞 Bug ≡ Correctness
Description
The new “Repo Skill” entry says a repo skill that matches a built-in skill name is silently shadowed
(built-in wins), but the runtime uploads all skills into the same sandbox skills directory and fails
fast on duplicate basenames. This documentation mismatch will lead users to create colliding skills
expecting an override, but runs will error during bootstrap instead.
Code

docs/glossary.md[R249-250]

+A [skill](#skill) committed under the target repo (typically `.agents/skills/`, often symlinked as `.claude/skills`). Discovered for agents on that repo. Novel names are [additive](#additive-skill). A repo skill whose **name matches** a [built-in skill](#built-in-skill) is shadowed — built-ins are installed at a higher-precedence config layer than repo skills, so the built-in wins on collision. That silent shadowing is **not** a [skill override](#skill-override); use [base composition](#base-composition) (same basename on the child harness `skills:` list) or see that entry.
+See [Configuring with skills](guides/user/customizing-with-skills.md).
Relevance

●●● Strong

Recent reviews accepted corrections where documentation contradicted runtime behavior; this is a
concrete collision-semantics mismatch.

PR-#5945
PR-#6335

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The glossary claims silent shadowing on name collision, but the runtime creates one shared
configDir/skills directory, checks input.SkillDirs() for duplicate destination basenames, and
returns an error when two distinct skill paths share the same basename (so collisions fail rather
than being resolved in favor of built-ins).

docs/glossary.md[247-250]
internal/runtime/claude.go[43-71]
internal/runtime/claude.go[249-274]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
`docs/glossary.md` states that a repo skill whose name matches a built-in skill is "shadowed" (built-in wins). In the implementation, skills are uploaded into a single `CLAUDE_CONFIG_DIR/skills` directory and duplicate destination basenames cause bootstrap to return an error.

### Issue Context
This glossary is intended to be precise vocabulary; this specific claim currently contradicts the runtime’s collision handling and will mislead readers into creating configurations that fail at runtime.

### Fix Focus Areas
- docs/glossary.md[247-250]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. Unimplemented bootstrap paste noted ✓ Resolved 📜 Skill insight ≡ Correctness
Description
The glossary documents an unimplemented behavior (bootstrap paste path) without using the required
> **Planned:** callout format and without linking to a tracking issue. This can mislead readers
into treating planned functionality as current behavior and violates the documentation convention
for planned features.
Code

docs/glossary.md[74]

+A harness [skill](#skill) load mode decided in [ADR 0091](ADRs/0091-always-on-harness-skills.md): frontmatter `apply: always` means bootstrap pastes the `SKILL.md` body into the copied agent definition for that run so the model always sees it (no Skill-tool open required). Adding such a skill via `skills:` on a thin `base:` wrapper keeps a [configured default](#configured-default-agent); replacing `agent:` just to name the skill would make it [derived](#derived-agent). Contrast with [on-demand skill](#on-demand-skill). Until bootstrap implements the paste path, treat this as the decided contract rather than a guarantee of every running install.
Relevance

●●● Strong

Recent docs review accepted labeling unimplemented behavior as Planned; this finding matches an
explicit repository convention.

PR-#6398

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
PR Compliance ID 1062082 requires any mention of not-yet-implemented features to use a `>
**Planned:**` blockquote callout and include an issue link. The added glossary entry explicitly
states the behavior is not yet implemented (“Until bootstrap implements the paste path...”) but does
not use the required callout format nor provide an issue link.

docs/glossary.md[72-74]
Skill: writing-user-docs

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`docs/glossary.md` mentions not-yet-implemented behavior (“Until bootstrap implements the paste path...”) but does not use the required `> **Planned:**` blockquote callout format and does not include a link to a tracking issue.

## Issue Context
Compliance requires that planned/unimplemented features be clearly marked using the `> **Planned:**` callout and include a link to the relevant issue so readers can verify status and track delivery.

## Fix Focus Areas
- docs/glossary.md[72-74]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Context sources
✅ Compliance rules (platform): 58 rules

Grey Divider

Tip of the day
💡 Did you know, you can hide the parts of a finding you never read, like the evidence or the agent prompt

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

Comment thread docs/glossary.md Outdated
Comment thread docs/glossary.md Outdated
@fullsend-ai-review

fullsend-ai-review Bot commented Aug 21, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 7:03 PM UTC · Completed 7:19 PM UTC

Commit: cc965f3 · View workflow run →

fullsend-ai-review[bot]

This comment was marked as outdated.

@fullsend-ai-review fullsend-ai-review Bot added ready-for-merge All reviewers approved — ready to merge and removed requires-manual-review Review requires human judgment labels Aug 21, 2026

@waynesun09 waynesun09 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review findings from an automated pass (3 inline comments on docs/glossary.md plus one below on a linked doc that isn't part of this PR's diff).

[MEDIUM] AGENTS.md glossary entry funnels readers to a citation that misattributes the open standard
File: docs/guides/user/customizing-with-agents-md.md (line 13) — not touched by this PR's diff, so noted here rather than as an inline comment.

This PR adds a new, prominent AGENTS.md glossary entry (docs/glossary.md lines 68-70) that links to docs/guides/user/customizing-with-agents-md.md, which states "AGENTS.md is the open standard (https://agentskills.io/) that any agent tool can discover." Checking both sites: agentskills.io is entirely about the unrelated Agent Skills / SKILL.md format ("a lightweight, open format for extending AI agent capabilities... originally developed by Anthropic"), not AGENTS.md files. The actual AGENTS.md standard is at https://agents.md/ ("A simple, open format for guiding coding agents," now stewarded by the Agentic AI Foundation under the Linux Foundation). The linked guide conflates two unrelated open formats, and this PR's new glossary term makes that wrong citation more visible/consequential by pointing readers straight at it.

Suggestion: fix the citation in docs/guides/user/customizing-with-agents-md.md to point to https://agents.md/, keeping agentskills.io only where the topic is genuinely Agent Skills (as already done correctly in docs/guides/user/customizing-with-skills.md). Consider doing this in the same PR or a fast-follow since this PR is specifically the vocabulary/reference-hygiene pass touching this exact term.

Comment thread docs/glossary.md Outdated
Comment thread docs/glossary.md Outdated
Comment thread docs/glossary.md Outdated
@fullsend-ai-review

fullsend-ai-review Bot commented Aug 24, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 11:50 AM UTC · Completed 12:08 PM UTC

Commit: 8fd7bb0 · View workflow run →

Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $5.85

fullsend-ai-review[bot]

This comment was marked as outdated.

@fullsend-ai-review fullsend-ai-review Bot removed the ready-for-merge All reviewers approved — ready to merge label Aug 24, 2026
ascerra and others added 3 commits August 25, 2026 16:10
Record Option B: metadata.apply always fills a soft Skill-tool directive
with skill names (no SKILL.md body paste). Include playground activation
matrix evidence and update architecture plus skills guide.

Co-authored-by: Cursor <cursoragent@cursor.com>
Keep ADR 0091 evidence out of fullsend; link the public playground
HTML report instead of shipping the activation matrix in this PR.

Co-authored-by: Cursor <cursoragent@cursor.com>
0091 on main is now per-agent runtime/model/effort; renumber this ADR
and update cross-references accordingly.

Co-authored-by: Cursor <cursoragent@cursor.com>
@ascerra
ascerra force-pushed the docs/adr-0091-always-on-skills branch from c3ace2b to 94bd8d8 Compare August 25, 2026 20:11
ascerra and others added 4 commits August 25, 2026 17:26
Rebase customization vocabulary onto the current ADR 0091 base (keep
OTEL/Fail-Open entries). Point default harness lineage at
fullsend-ai/agents, drop the merge-dependency note and Identity
"ladder" wording, align always-on with ADR 0091 Option B, and document
repo-skill basename fail-fast.

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
- Rename "Agent identity" heading to "Agent classification" in the
  Customization vocabulary index to avoid overloading the existing
  Identity term (GitHub App installation sense) defined elsewhere
  in the glossary.
- Reword BYOA entry to replace "org/repo config" with "config.yaml
  registration and base: composition" per ADR 0058, dropping the
  deprecated per-org install mode framing (ADR 0044).

Addresses review feedback on #6383
…adowing

Fail-fast only applies to harness SkillDirs() uploads; same-named repo
skills are silently shadowed by personal-level built-ins (no bootstrap
error), matching customizing-with-skills skill-precedence.

Co-authored-by: Cursor <cursoragent@cursor.com>
…ill semantics

Rebase onto renumbered ADR base; update four always-on links from 0091 to
0092; qualify Skill-tool and repo-skill discovery as Claude Code behavior
and note pi ignores project .agents/skills under disabled project trust.

Co-authored-by: Cursor <cursoragent@cursor.com>
ascerra pushed a commit that referenced this pull request Aug 25, 2026
- Rename "Agent identity" heading to "Agent classification" in the
  Customization vocabulary index to avoid overloading the existing
  Identity term (GitHub App installation sense) defined elsewhere
  in the glossary.
- Reword BYOA entry to replace "org/repo config" with "config.yaml
  registration and base: composition" per ADR 0058, dropping the
  deprecated per-org install mode framing (ADR 0044).

Addresses review feedback on #6383
@ascerra
ascerra force-pushed the docs/glossary-customization-vocab branch from a701ed0 to 7fd71ee Compare August 25, 2026 21:42
@fullsend-ai-review

fullsend-ai-review Bot commented Aug 25, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 9:43 PM UTC · Completed 10:04 PM UTC

Commit: 7fd71ee · View workflow run →

Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $6.61

@fullsend-ai-review

fullsend-ai-review Bot commented Aug 25, 2026

Copy link
Copy Markdown

Risk Assessment: moderate (2/5)

Details

Docs-only change (7 files, 280 lines) from a known contributor with no protected/security/CI/dependency signals. Tier 2 elevated primarily because docs/architecture.md is an extreme churn hotspot (69 commits/30d, 12 authors/90d), but docs changes carry inherently lower deployment risk, keeping the composite at moderate.

Previous run

Risk Assessment: moderate (2/5)

Details

Low-risk docs-only change (2 files, 112 lines, no protected/security/CI/dependency signals, known contributor). Tier 2 elevates moderately due to glossary.md being a high-churn hotspot with many recent fix/revert commits and multiple authors.

fullsend-ai-review[bot]

This comment was marked as outdated.

@waynesun09 waynesun09 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review-only sweep at head 7fd71eef — 6 MEDIUM findings. Five are inline (3 on docs/glossary.md, 2 file-level on docs/agents/topics/default-vs-custom.md whose anchor lines fall outside this PR's single hunk). The sixth is PR metadata, so it lives here.


[MEDIUM] ready-for-merge + undrafted while the base is still the unmerged #6378 branch; body still claims draft status

Confirmed via the GitHub API at head 7fd71eef: draft: false, mergeable_state: "clean", labels include ready-for-merge, and base.ref is docs/adr-0091-always-on-skills — the head branch of #6378, which is still open (state: open, merged: false, mergeable_state: "blocked").

The PR body still reads: "This PR is opened as a draft against the 0091 branch ... After #6378 lands on main, retarget this PR to main (or rebase) and undraft". The stated gate no longer holds — the PR is already undrafted and labeled ready-for-merge while #6378 has not landed. Merging in this state lands the glossary changes onto #6378's branch, not main.

It also matters for link integrity: the four ADRs/0092-always-on-harness-skills.md links added by this PR (lines 21, 40, 72, 235) resolve only because the base branch supplies that file. #6378 adds it and is unmerged, so a retarget to main before #6378 lands would 404 all four. (The review bot's sticky comment flags the forward-reference risk; this finding is about the merge-readiness state that makes it live.)

No existing review thread covers this: r3855765706 covered the 0091→0092 renumber (fixed in 7fd71eef) and r3833070378 covered removing the in-doc merge-dependency blockquote (fixed in 8fd7bb04) — neither the draft/label state.

Suggestion: Either re-mark the PR as draft and remove the ready-for-merge label until #6378 is on main, or land #6378 first and then rebase this PR onto main. Either way, update the body so it describes the actual state (it currently claims a draft status the PR does not have), and tick or correct the three unchecked test-plan boxes — including "Confirm relative links" and the stale "ADR 0045/0064/0091" reference (the ADR is now 0092).

Comment thread docs/glossary.md Outdated

### Repo Skill

A [skill](#skill) committed under the target repo (typically `.agents/skills/`, often symlinked as `.claude/skills`). Under the Claude Code runtime, discovered for agents on that repo. Novel names are [additive](#additive-skill). A repo skill whose name matches a [built-in skill](#built-in-skill) is **shadowed**: built-ins upload to the personal-level config dir (`CLAUDE_CONFIG_DIR/skills/`), while repo skills stay at the project level (`.claude/skills/`); Claude Code's personal-over-project precedence silently ignores the repo copy — there is no bootstrap error. That silent shadowing is not a [skill override](#skill-override). Use a unique name, or replace intentionally via [base composition](#base-composition) (same basename on the child harness `skills:` list). With `runtime: pi`, project trust is disabled (`--no-approve` / `defaultProjectTrust: never`), so repo-committed skills under `.agents/skills` are not discovered at all — see [runtimes](runtimes.md).

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[MEDIUM] pi project-trust claim is cited to runtimes.md, which contains no such text — and whose skills row reads the opposite

This Repo Skill entry ends: "With runtime: pi, project trust is disabled (--no-approve / defaultProjectTrust: never), so repo-committed skills under .agents/skills are not discovered at all — see runtimes." The Always-on Skill entry (line 72) likewise cites runtimes.md for "(pi has no Skill tool — skills are prompt-driven via read of SKILL.md)".

I read docs/runtimes.md at head 7fd71eef in full: it contains no occurrence of --no-approve, defaultProjectTrust, project trust, .pi/, or the Skill tool. Its only skills row (the "Harness config keys per runtime" table) reads:

| skills | CLAUDE_CONFIG_DIR/skills/ | PI_CODING_AGENT_DIR/skills/, discovered natively |

So a reader following the citation lands on "discovered natively" — the opposite of what the glossary claims.

The claims themselves are true; only the citation is wrong. The evidence lives in docs/contributing/runtime-implementation.md, which states verbatim that --no-approve sets the project-trust override so the trust-gated project resources — .pi/{settings.json,extensions,skills,...} and .agents/skills — are ignored, and that defaultProjectTrust: never in global settings covers the no-flag case. Corroborated by internal/runtime/pi_bootstrap.go, pi_run.go, and pi_bootstrap_test.go (which also asserts enableSkillCommands: false).

This is new relative to thread r3855765727: that thread asked for the pi caveat plus a cross-link, and the fix commit 7fd71eef added the caveat pointed at the wrong page. (For what it's worth, that earlier comment's own "docs/runtimes.md:299" citation does not hold at head either — the file is far shorter than 299 lines. Apologies for sending you there.)

Suggestion: Repoint both citations (here and line 72) from runtimes.md to contributing/runtime-implementation.md, where the --no-approve / defaultProjectTrust: never / .agents/skills-ignored evidence actually lives. Additionally, amend the skills row in docs/runtimes.md's "Harness config keys per runtime" table so "discovered natively" carries the trust caveat — harness skills under PI_CODING_AGENT_DIR/skills/ are discovered; repo-committed .agents/skills are not, because project trust is disabled. Otherwise the two pages contradict each other.

Comment thread docs/glossary.md Outdated

### On-demand Skill

A [skill](#skill) load mode: uploaded and listed for the run, but under the Claude Code runtime the full body loads only when the model opens it (Skill tool). Default when frontmatter omits `metadata.apply` / `apply`, or sets `on-demand` ([ADR 0092](ADRs/0092-always-on-harness-skills.md)). Contrast with [always-on skill](#always-on-skill).

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[MEDIUM] Always-on / on-demand load modes are documented as shipped behavior, but nothing at this head implements metadata.apply

This On-demand Skill entry states as current fact: "Default when frontmatter omits metadata.apply / apply, or sets on-demand". Nothing parses those keys at this head.

internal/skill/skill.go defines the entire parsed frontmatter surface as SkillMeta{Name, Description, Dependencies, Policy} — no metadata, no apply — and it is the only frontmatter parser. Code searches for metadata.apply and for AlwaysOn / ALWAYS_ON across the repo return zero hits, so ADR 0092's mechanism is entirely unwired. This PR is docs-only (2 files), so the branch adds no implementation either. Issue #6380 is still open and its only linked closing PR is the docs-only #6378.

A glossary is read as a current-state reference, so a reader will set metadata.apply: always and get a silent no-op — YAML frontmatter that SkillMeta does not declare is simply discarded by the unmarshal, and nothing downstream reads it.

The sibling Always-on Skill entry (line 72) has the same defect ("after upload, bootstrap injects a short directive naming those skills"). I am not raising it as a separate finding because resolved thread r3832926231 already covered docs/glossary.md[72-74] with this same substance — but that thread's requested > **Planned:** callout was never added, only the #6380 link, so the fix should cover both entries.

Suggestion: Mark both entries as not-yet-implemented using the repo's existing convention, e.g. a leading blockquote:

> **Planned:** not yet wired in the runtime — see [ADR 0092](ADRs/0092-always-on-harness-skills.md) and [#6380](https://github.com/fullsend-ai/fullsend/issues/6380).

(the same **Planned:** form already used in customizing-with-skills.md). Convert to present tense in the PR that lands the bootstrap/frontmatter change.

Comment thread docs/glossary.md Outdated

### Built-in Skill

A [skill](#skill) that ships with a [default agent](#default-agent) (for example `code-implementation`, `code-review`, `issue-labels`). Listed in that agent's harness and documented under [Agents reference](agents/). Teams typically [add](#additive-skill) alongside built-ins; replacing one by basename via [base composition](#base-composition) or the historical overlay is a [skill override](#skill-override).

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[MEDIUM] Built-in Skill entry hardcodes agents-repo skill names, against main's runtime-discovery rule

This new entry names three skills inline: "A skill that ships with a default agent (for example code-implementation, code-review, issue-labels)".

main's AGENTS.md carries the rule: "When writing skills, documentation, or guides that reference the fullsend agent/skill/sub-agent inventory (agent names, skill names, harness configs, sub-agent rosters), use runtime discovery commands against fullsend-ai/agents rather than hardcoded tables or static listings. The agents repo evolves independently and hardcoded references go stale."

Two caveats that bound this, both verified:

  1. The rule is not present in AGENTS.md at this PR's head — the base branch predates it — so this bites on retarget to main, not today.
  2. All three names are accurate right now (fullsend-ai/agents skills/ currently holds agent-scaffolding, autonomy-readiness, code-implementation, code-review, docs-review, finding-agent-runs, fix-review, github-forge, gitlab-forge, issue-labels, jira-forge, merge-queue, pr-review, pr-risk-assessment, retro-analysis).

So this is a staleness-coupling / convention concern, not a factual error — hence MEDIUM rather than HIGH.

The Extension Point entry's customer-research (line 168) is deliberately not part of this finding: docs/agents/prioritize.md documents it as a user-supplied repo skill placed at .agents/skills/customer-research/, not agents-repo inventory, so the rule does not reach it.

Suggestion: Drop the three literal skill names and define built-in skill structurally instead — e.g. "a skill listed in a default agent's harness in fullsend-ai/agents" — pointing readers at the per-agent reference pages (which already carry a Source link to the agent's harness YAML) rather than naming instances. If a canonical inventory is wanted, it belongs in fullsend-ai/agents. Note the linked target guides/user/customizing-with-skills.md#built-in-skills reportedly carries a static table with the same coupling — worth a follow-up there.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[MEDIUM] Line 71: the new Repo Skill entry contradicts a table row in this file

(File-level comment — line 71 is pre-existing text outside this PR's single hunk, so there is no inline anchor.)

Line 71 of the "Classification by harness field" table still reads:

| Add repo-level skills in .agents/skills/ | Configured default | Repo skills are discovered automatically; no harness change needed. |

The new glossary Repo Skill entry (docs/glossary.md:263) establishes two exceptions to "discovered automatically" that this row now contradicts:

  1. A repo skill whose basename matches a built-in is silently shadowed by Claude Code's personal-over-project precedence.
  2. Under runtime: pi, project trust is disabled, so .agents/skills is not read at all.

Both are correct (see my comment on docs/glossary.md:263 for the primary sources). This PR edits this exact file at line 56, and the glossary points at it as the classification source of truth, so the two pages would ship disagreeing.

To be clear: the anchor line itself is not in the diff — it is pre-existing text that this PR's new claims newly contradict.

Suggestion: Amend the rationale cell in this same PR, e.g. "Discovered automatically under the Claude Code runtime; a basename matching a built-in skill is silently shadowed, and runtime: pi does not read .agents/skills (see Repo Skill in the glossary)."

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[MEDIUM] Line 7: bare "three tiers" persists, against tier-conventions.md and this PR's own "categories, not ordered steps" framing

(File-level comment — line 7 is pre-existing text outside this PR's single hunk, so there is no inline anchor.)

Line 7 reads "This document defines three tiers:".

docs/contributing/tier-conventions.md is explicit: "Always use a descriptive prefix to avoid ambiguity" and "Do not use bare 'Tier N' or 'tier' without a prefix", listing three unrelated in-repo meanings (credential delivery tier, intent authorization tier, configuration tier). AGENTS.md routes reviewers to that page for exactly this case ("Using the term 'tier' in code or docs").

Compounding it: this PR's new glossary index calls the same four classes "categories, not ordered steps" (docs/glossary.md:11), while the page the glossary names as its classification source calls them tiers — an ordered-sounding word. This PR already edits this file (line 56), so the fix is in scope.

As with the table-row comment, line 7 is pre-existing text not in the diff; it is the PR's new index wording that puts it out of step.

Suggestion: Replace "three tiers" with "three categories" (or "three classifications") to satisfy docs/contributing/tier-conventions.md and match the new glossary index's "categories, not ordered steps" wording.

@ascerra

ascerra commented Aug 29, 2026

Copy link
Copy Markdown
Contributor Author

/fs-fix address all review comments including those from waynesun09

@fullsend-ai-coder

fullsend-ai-coder Bot commented Aug 29, 2026

Copy link
Copy Markdown
Contributor

🤖 Finished Fix · ✅ Success · Started 6:30 PM UTC · Completed 6:43 PM UTC

Commit: 7fd71ee · View workflow run →

Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $4.96

- Demote ## Customization vocabulary to bold paragraph header with HTML
  anchor so ## stays reserved for alphabetical sections
- Add > **Planned:** callouts to Always-on Skill and On-demand Skill
  entries since metadata.apply is not yet wired in the runtime
- Repoint pi project-trust citations from runtimes.md to
  contributing/runtime-implementation.md where the evidence lives
- Remove hardcoded skill names from Built-in Skill entry; define
  structurally as "listed in a default agent's harness"
- Amend repo-skill table row in default-vs-custom.md to note shadowing
  caveat and pi trust limitation
- Replace bare "three tiers" with "three categories" in
  default-vs-custom.md per tier-conventions.md

Addresses review feedback on #6383
@fullsend-ai-coder

Copy link
Copy Markdown
Contributor

🔧 Fix agent — iteration 2 (human-triggered)

Validation retry: the previous iteration's code changes passed schema validation but failed the pre-commit gate because 6 commits on the PR branch contained Signed-off-by trailers. Used git filter-branch --msg-filter to strip all Signed-off-by lines from the 8 commits on the branch. No code changes were needed — only commit message cleanup.

Fixed (7):

  1. Demote Customization vocabulary to bold paragraph header (docs/glossary.md): Changed ## Customization vocabulary to a bold paragraph header with an HTML anchor so ## stays reserved for alphabetical sections.
  2. Add Planned callouts to Always-on Skill and On-demand Skill (docs/glossary.md): Added > Planned: callouts to Always-on Skill and On-demand Skill entries since metadata.apply is not yet wired in the runtime.
  3. Repoint pi project-trust citations (docs/glossary.md): Repointed pi project-trust citations from runtimes.md to contributing/runtime-implementation.md where the evidence lives.
  4. Remove hardcoded skill names from Built-in Skill entry (docs/glossary.md): Removed hardcoded skill names from Built-in Skill entry; defined structurally as 'listed in a default agent's harness'.
  5. Amend repo-skill table row in default-vs-custom.md (docs/agents/topics/default-vs-custom.md): Amended repo-skill table row to note shadowing caveat and pi trust limitation.
  6. Replace bare three tiers with three categories (docs/agents/topics/default-vs-custom.md): Replaced bare 'three tiers' with 'three categories' per tier-conventions.md.
  7. Strip Signed-off-by trailers from PR commits: Used git filter-branch to strip Signed-off-by trailers from all 6 commits on the PR branch that contained them, fixing the pre-commit gate validation failure.

Tests: passed

Decision points
  • Used git filter-branch --msg-filter to strip Signed-off-by trailers from all PR commits (alternatives: Interactive rebase to manually edit each commit message, Squash all commits into one; rationale: filter-branch is non-interactive, preserves commit authorship and history structure, and only modifies the commit messages to remove the trailers.)

Next steps:

  • /fs-review — request a re-review of the changes
  • /fs-fix <your instruction> — run another fix pass with specific guidance
  • Push commits directly — review re-runs automatically on push
    Updated by fullsend fix agent

@fullsend-ai-review

fullsend-ai-review Bot commented Aug 29, 2026

Copy link
Copy Markdown

🤖 Finished Review · ✅ Success · Started 6:45 PM UTC · Completed 7:26 PM UTC

Commit: 9988a55 · View workflow run →

Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $7.60

@fullsend-ai-review fullsend-ai-review Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See the review comment for full details.

@@ -0,0 +1,115 @@
---

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[critical] ADR numbering collision

ADR 0092 already exists on main as docs/ADRs/0092-openai-wif-credential-delivery.md. This PR creates a second file with the same number. 19 files across the codebase reference ADR 0092 pointing to the OpenAI WIF ADR. Every cross-reference this PR adds links to 0092-always-on-harness-skills.md, which would coexist with the other file.

Suggested fix: Renumber the new ADR to 0093 (or the next available number). Update all references in this PR's changed files.

Comment thread docs/glossary.md
An external process running alongside (but outside) the agent's sandbox that mediates access to resources the sandbox cannot natively constrain. Example: an ephemeral Git server that receives `git push` from the agent and forwards it only to the one branch the agent is authorized to write to. Unlike an MCP server (which the agent explicitly calls as a tool), a sidecar can be transparent — the agent may not know it's interacting with a mediator rather than the real service.
See [architecture.md](architecture.md) and [#101](https://github.com/fullsend-ai/fullsend/issues/101).

### Script Override

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[low] naming-convention

Script Override uses Details: as its reference-line prefix instead of the established See prefix used by every other glossary entry.

Suggested fix: Change Details: to See for consistency.

@waynesun09 waynesun09 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review-only sweep at head 9988a553 — 4 findings (1 CRITICAL, 2 HIGH, 1 MEDIUM), all inline. They share one root cause: the always-on skill design this PR documents (ADR 0092 / metadata.apply: always / placeholder directive) was reversed after the earlier review rounds. #6378 was closed unmerged ("we have decided to go with a slightly different strategy"), #6380 was closed and split into #6681 (inject every harness-listed skill into the agent definition's skills: frontmatter) and #6682 (future per-skill optional mode), and PR #6859 implements #6681 with no metadata.apply, placeholder, or directive. The ADR is inside this PR's own diff (same merge-base with main and with the stacked base), so the fix is to drop it and the cross-references rather than renumber it.

**Trade-offs:** Good safety net ([ADR 0022](0022-harness-level-output-schema-enforcement.md)).
Does not teach style or procedure.

## Decision

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[CRITICAL] PR carries a superseded ADR as status: Accepted plus four cross-references to a reversed decision

Verified at head 9988a553. This ADR is already inside this PR's own diff, not a retarget risk: the merge-base of the head with its base branch docs/adr-0091-always-on-skills (94bd8d8) and with main is the same commit edb57c2, so git diff origin/main...head and GitHub's file list both show docs/ADRs/0092-always-on-harness-skills.md (+115) with status: Accepted and **We choose Option B.** (metadata.apply: always + __FULLSEND_ALWAYS_ON_SKILLS__ placeholder + Skill-tool directive).

The decision it records was reversed: PR #6378 (the ADR PR this one claims to depend on) was CLOSED unmerged on 2026-08-28 with the comment "we have decided to go with a slightly different strategy"; issue #6380 was closed completed on 2026-08-27 and split into #6681 (inject every harness-listed skill into the agent definition's skills: frontmatter, explicitly "differs from PR #6378's strategy of using metadata.apply: always with a placeholder") and #6682 (future per-skill optional mode). PR #6859 (open) implements #6681 as InjectFrontmatterSkills in internal/runtime/frontmatter_skills.go; its diff contains no metadata.apply, no placeholder, no directive. The PR body's gate "merge after #6378 merges" can never be satisfied.

Four in-diff edits assert the dead decision as settled: docs/ADRs/0024-harness-definitions.md:788-791 ("is decided in ADR 0092"), docs/architecture.md:169-174 and :179, docs/problems/codebase-context.md:68.

The only existing thread on this file (bot, line 1) is about the number colliding with 0092-openai-wif-credential-delivery.md on main and proposes renumbering to 0093 — that remedy would merge the rejected design under a fresh number.

Two further ADR-internal defects are moot once it is dropped but worth recording: the Decision's prerequisite (placeholder in the agent file, Skill in every tools:) points at agents-repo commit 49a1e31, which sits on a diverged branch (ahead 1 / behind 202) and was never merged; and the Options section never evaluates native skills: frontmatter preload even though agents/triage.md and agents/retro.md on fullsend-ai/agents main already carry skills: lists — the mechanism #6859 actually uses.

Suggested fix: Remove docs/ADRs/0092-always-on-harness-skills.md from this PR (do not renumber it) and revert the three cross-reference hunks in docs/ADRs/0024-harness-definitions.md, docs/architecture.md, and docs/problems/codebase-context.md. Retarget to main (rebase over the 423 commits behind) and rewrite the glossary/guide skill-load-mode text against #6681/#6682 and #6859, or hold those entries until #6859 lands. Update the PR body to drop the #6378 dependency. If the team wants an ADR for the frontmatter-injection approach, it belongs in its own PR with the next free number.

Comment thread docs/glossary.md

### Always-on Skill

> **Planned:** The always-on load mode is decided but not yet wired in the runtime — see [ADR 0092](ADRs/0092-always-on-harness-skills.md) and [#6380](https://github.com/fullsend-ai/fullsend/issues/6380).

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[HIGH] Always-on / On-demand glossary entries describe the abandoned metadata.apply design and cite a closed issue as pending

Verified at head 9988a553. Both > **Planned:** callouts (lines 73 and 238) say the load mode is "decided but not yet wired in the runtime — see ADR 0092 and #6380". #6380 is closed completed with a different outcome (#6681/#6682), and what is being wired (#6859) is frontmatter skills: injection of every harness-listed skill, so the callouts now point readers at a reversed decision.

Line 75 states "frontmatter metadata.apply: always (legacy top-level apply: always also accepted) opts the skill into always-on" and "bootstrap will inject a short directive naming those skills so the model opens each with the Skill tool" — none of that is planned. Line 240 inverts the new default: it calls on-demand the "Default when frontmatter omits metadata.apply / apply, or sets on-demand", whereas under #6681/#6859 every harness-listed skill becomes always-on with no opt-out key, and the optional mode is a future per-skill setting (#6682). The Skills index bullet (line 22) and goals-table row (line 42) present the same pair as settled via ADR 0092.

Note on the existing thread: the resolved thread on the On-demand entry (original line 235, "documented as shipped behavior") requested exactly these Planned banners pointing at ADR 0092/#6380, and commit 9988a55 added them; that fix is now itself wrong because the decision changed after the thread was written, so re-adding the banner is not the remedy.

Suggested fix: Rewrite both entries: always-on = harness skills: entries are injected into the agent definition's skills: frontmatter at bootstrap and become the default for every harness-listed skill (#6681, implemented by #6859); on-demand/optional = a planned per-skill opt-out tracked in #6682 whose syntax is undecided. Drop the metadata.apply / apply: always / directive / "requires Skill in tools:" sentences, replace the #6380 and ADR 0092 links with #6681/#6682 (and #6859 once merged), and repoint the index bullet (line 22) and table row (line 42) the same way. Keep a Planned marker only until #6859 lands.

Skills can reference companion scripts and data files in the same directory,
giving agents the ability to dynamically gather information at runtime.

### Always-on vs on-demand

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[HIGH] User guide gives present-tense copy-paste instructions for the abandoned metadata.apply: always key with no Planned marker

Verified at head 9988a553. The new "Always-on vs on-demand" section (lines 63-90) is a full present-tense recipe: set metadata:\n apply: always in SKILL.md, "Bootstrap fills a soft always-use directive with that skill's name on the copied agent definition", "The model must open the skill with the Skill tool", "The agent's tools: must include Skill", linking ADR 0092 and the playground adr-0091-skill-activation-matrix.html. Lines 63-90 contain no Planned wording, although the same file already uses the > **Planned:** banner convention at lines 205-207 for #6158.

Nothing on this head or on main parses metadata.apply (confirmed by the resolved glossary thread: SkillMeta{Name, Description, Dependencies, Policy} is the only frontmatter parser), and the key was dropped from the plan entirely — #6681/#6859 make listing the skill in the harness the always-on signal with no frontmatter key. A user following this section gets a silent no-op today and, after #6859, a key that is still ignored.

No existing review comment touches this file. Because the design was reversed rather than merely unimplemented, gating the section as Planned would still document the wrong interface. The section does say "listed in the harness" (line 65), so the harness-only scoping is adequate and only needs sharpening on rewrite.

Suggested fix: Remove lines 63-90 from this PR. When #6859 merges, replace them with a short walkthrough of the shipped behavior: skills listed under harness skills: are injected into the agent definition's skills: frontmatter and preloaded on every run of that harness (harness-listed only; repo-discovered skills remain #237), with the per-skill optional mode noted as tracked in #6682. Do not instruct users to set metadata.apply or to edit tools: for this purpose.

Comment thread docs/architecture.md
property (source system, event type, etc.) rather than only the forge
platform. `forge:` is deprecated but remains functional
([ADR 0088](ADRs/0088-cel-guarded-overlays.md)).
- Always-on harness skills: skill frontmatter `metadata.apply: always`

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[MEDIUM] architecture.md living-doc bullet describes the reversed always-on design as current runtime behavior

Verified at head 9988a553. Lines 169-174 add to the current-state architecture list: "Always-on harness skills: skill frontmatter metadata.apply: always (default on-demand) causes bootstrap to name those skills in a soft always-use directive on the copied agent definition; the model opens each via the Skill tool ... (ADR 0092)", and line 179 amends an open question with "Always-on vs on-demand skill load mode for harness-listed skills is decided in ADR 0092".

The phrasing is present-tense with no Planned marker (the glossary entries in this same PR carry one), and the mechanism described was abandoned in favor of frontmatter skills: injection (#6681, PR #6859). architecture.md is the living current-state doc, so this both overstates implementation status and records the wrong decision. No existing review comment covers this file.

Suggested fix: Revert the lines 169-174 bullet and the line 179 amendment from this PR. Once #6859 merges, add a bullet stating that bootstrap injects harness-listed skills into the agent definition's skills: frontmatter (always-on by default), and keep the per-skill optional mode (#6682) and pi-runtime handling as open questions.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

component/docs User-facing documentation component/skills risk/moderate PR risk: moderate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants