2026 Q2 Skills: Context, Caching, and the Sandbox Lens
Table of Contents
- 1. Thesis
- 2. What a skill is in 2026
- 3. Skills through the sandbox lens (first-class)
- 4. Skill structure in practice (the contract you ship)
- 5. Caching and context: why skill composition is affordable
- 6. Evals: making a skill provide good context
- 7. Deployment, rollout, testing
- 8. Claims (REPL-evaluated)
- 8.1. Skills are named prompt templates with tool scopes
- 8.2. SKILL.md is the cross-harness skill convention
- 8.3. Prompt caching is opt-in, 1h TTL, with cache-reuse flags
- 8.4. All six surveyed CLI agents support MCP
- 8.5. MCP authorization is optional and excludes stdio
- 8.6. Capability is structural; the secret-custody empty cell is unoccupied
- 8.7. Skill inputs are tainted by construction
- 8.8. OpenAI eval-skills: four success categories + layered harness
- 8.9. gh skill provides a search/preview/install/publish/update lifecycle
- 8.10. Footprint declaration has no standard schema
- 8.11.
allowed-toolsis a settled least-privilege mechanism - 8.12. Deeper
references/nesting buys progressive-disclosure depth
- 9. Meta-skills: skills that take skills as input
- 10. Open questions
- 11. References
1. Thesis
A skill is "an organized collection of prompts and instructions for an LLM" (OpenAI n.d.). That framing is correct but incomplete. The moment a skill runs, it spends capability: it executes code, reads and writes files, reaches the network, and uses credentials. The right first-class frame for a 2026 skill is therefore not the prompt — it is the sandbox.
Agent control in 2026 spans three registers:
- Probabilistic — prompts, system instructions, alignment (what the model is trained to do).
- Explicit-deterministic — hooks, permission classifiers, wire-level policy (what the harness enforces).
- Implicit-deterministic — a skill's tool-scope, an MCP server's surface, a schema (what the design permits at all).
Skills live in (3). A skill with a restricted tool list cannot exfiltrate a file not because a policy refused it but because the action was never on the menu. That is a sandbox boundary expressed as authoring convention.
2. What a skill is in 2026
Re-checked 2026-10-08 against live sources. `gh api repos/anthropics/skills` confirms the repo is public, unarchived, actively pushed (supports the Anthropic-origin claim). `gh api repos/anthropics/claude-code/contents/CHANGELOG.md` + WebFetch of cli.github.com/manual/gh_skill confirm the gh skill subcommand list (search/preview/install/publish/update) and surfaced a detail the prose was missing: the page itself states the command is "in preview and subject to change without notice," and locally installed gh 2.83.2 returns "unknown command" for it -- added to body text.
The SKILL.md convention (Anthropic-originated) is the closest thing to a
cross-harness standard, read by Claude Code, Copilot CLI, and OpenCode
(CLI coding agents, 2026 Q2). OpenAI Codex ships skills as bundled, reusable behaviours
(e.g. a setup-demo-app skill) (OpenAI n.d.). GitHub ships gh skill
— a search/preview/install/publish/update lifecycle for skills sourced from
repositories, shipped as a preview command ("subject to change without notice")
not yet present in a stable gh release (GitHub n.d.). The unit is converging;
the governance is not.
3. Skills through the sandbox lens (first-class)
The reference decomposition: "sandbox" names at least four isolations — compute boundary, filesystem custody, network egress, secret custody — and "capability is structural; safety is declarative" (Agent sandbox architectures). Splitting filesystem into read and write gives the five axes the operator actually reasons about. Every skill can be scored on them:
| Axis | The question | Skill-level control (implicit) | Harness control (explicit) |
|---|---|---|---|
| compute | can it execute code? | is =Bash=/exec in the tool list? | sandbox/jail, rctl |
| fs-read | what can it read? | Read=/=Grep scope |
mount RO, Seatbelt file-read* |
| fs-write | what can it mutate? | Edit=/=Write present? |
mount RW set, worktree isolation |
| egress | what hosts can it reach? | =WebFetch=/MCP tools present? | egress proxy / pf allowlist |
| credential | what secrets does it touch? | does a tool require a key? | egress-proxy injection; key never in env |
The central observation: a skill's tool-list restriction is a sandbox policy written in the skill, one register earlier than the harness. But it is the weakest of the three registers — it constrains what the model is offered, not what the process can do. The corpus reference axiom holds: filesystem AND network isolation are both required, and the compute boundary alone is "a launchpad" (Agent sandbox architectures). So a skill's tool-scope is necessary context hygiene, never the security boundary.
Two failure modes the sandbox notes make concrete, both relevant to skills:
- The credential axis is the asymmetric risk. The secret-custody "empty cell" — a locally-run agent that materialises secrets only at approved-host egress — is unoccupied as a product, and the documented containment incidents land exactly there (Agent sandbox architectures, Containment mapping). A skill that calls an authenticated API inherits this: if the credential is readable, a prompt-injected skill exfiltrates it.
- Skill inputs are tainted. "If a third party could have written any part of it, it's tainted" (Tainted data in LLM pipelines). A skill that reads logs, issues, or tool output is reading attacker-writable text; its tool-scope is the only thing bounding the blast radius when that text is interpreted as instructions.
The permission story that closes the gap is three-layer — identity to session scope
to wire-level — and the MCP authorization gap is real: the MCP spec makes auth
optional and excludes stdio transports (the common dev case), so most skills
reaching MCP tools run with session-wide grants and no per-operation scope
(Agent permission guardrails).
4. Skill structure in practice (the contract you ship)
Field observations from porting a populated agent directory into a vetted skill repo. REPL-evaluated against the corpus (wal-sh.site.org/read-all + slurp): the central claims that "sandbox is necessary but not sufficient" and "personal agents carry an exfiltration risk in a shared bundle" are CORPUS-GROUNDED -- 2026-agent-sandbox-systems carries "launchpad" / "both isolations" / "exfiltrat" -- and inherit the verified [[#claim-sandbox-axiom]] and [[#claim-taint]]. The nine-surface decomposition, sub-agent-team naming, the distribution to egress table, the SKILL.md footprint-manifest convention, the populated-setup triage buckets, and the 2025 to 2026 refinement layer are ATTRIBUTED to the authoring exercise (no primary corpus source); treat as practitioner observation, not established fact.
The sandbox lens is one of nine surfaces a skill is in contract with when it ships. In practice — observed by porting a populated agent directory into a vetted skill repo — the surfaces line up like this:
- Invocation. The
descriptionfrontmatter is the only thing the model sees pre-invocation; trigger logic does not live in the body. - Permissions.
allowed-toolsas least-privilege (marked (Experimental) in the spec — see disputed), matched to what the body actually does. - Sandbox. Compute / fs-read / fs-write / egress / credential — the five-axis decomposition this note is built around.
- MCP. Server-independence is a design constraint: a vendored skill works without the MCP server reachable; MCP tools are accelerants that degrade gracefully.
- Hooks. No silent dependency on
settings.jsonautomation; any required hook is documented and optional. - Skills composition. Anatomy is
SKILL.md+ optionalscripts/(deterministic code),references/(depth docs loaded on demand — one level only, see disputed),assets/(output templates),agents/(sub-agent definitions); bodies stay under ~500 lines. - Memory. Recalled memory is background context, not user instructions. A memory naming a file is a claim, not a guarantee — verify before acting; write only on explicit intent.
- Providers. Hard provider/model assumptions are stated; otherwise the skill reads as portable across Claude / LiteLLM-fronted providers / local Ollama.
- Remote. Headless by default; the distribution channel is named so reviewers can score the right egress profile.
Two independent authoring tracks landed on this same decomposition in the same week — the surfaces appear to be approximately stable.
4.1. Sub-agent teams as a skill anatomy
When a framework has multiple roles — a builder, a reviewer, an
arbiter, a probe — the skill is the team, not each role. The
SKILL.md is the team manifest (voice, composition recipes, when
each role speaks); agents/ holds the role prompts. The bundle is
the unit shipped, cached, and triggered.
This produces an authoring choice: a framework with role labels can ship under generic labels ("agent / reviewer / arbiter") or under human names ("Aidan / Vera / Themis"-style), or both. Two skills, two trigger surfaces, same underlying framework. Generic reads like telemetry; named reads like narrative. The cost is a duplicated description; the benefit is that the invocation surface fits the work mode.
When two distinct role taxonomies overlap on a shared essence, naming the shared role identically is the bridge across them.
4.2. Distribution channels carry the sandbox profile
The same SKILL.md gets a different egress entry depending on how
it's shipped:
| Channel | Resolution | Egress at runtime |
|---|---|---|
| Vendored real files | filesystem path | none (zero MCP) |
| MCP-served | tool dispatch | egress to MCP server |
| Fetched-then-local | install-time download | egress at install |
A skill scored egress: none as vendored may score
egress: mcp-server when served, because the server itself sits in
its runtime sandbox profile.
4.3. A working pattern for SKILL.md as footprint manifest
A skill may carry an explicit footprint in custom frontmatter —
declared filesystem reads/writes, allowed egress, named process
access. No standard schema exists yet — but see the disputed
finding on footprint declaration: the spec does define an optional
compatibility field covering network access. A harness reading these keys could
derive a sandbox profile and refuse the wrong-shaped invocation —
authoring-time declaration, not yet harness-enforced. (See
10.)
4.4. The pre-condition: arriving from a populated setup
The ecosystem describes 2026 skills as if greenfield. In practice
users arrive with ~/.claude/agents/ populated by a year of
accumulation — tens to a hundred files, ranging from framework
primitives through role personas to one-off project agents. The
port is its own problem, and the triage is itself a sandbox
decision:
| Bucket | Heuristic | Destination |
|---|---|---|
| Cluster | 3+ share a coherent theme | Multi-role skill |
| Promote | Stands alone, one clear trigger | Single-role skill |
| Backup + delete | Personal / project / model-bound | Private archive |
| Drop | Stale / superseded | (gone) |
Personal agents (named after collaborators, tied to a specific project, bound to a specific external model) carry an exfiltration risk in a shared bundle they don't carry in a private archive.
4.5. A 2025 to 2026 refinement layer is portable across frameworks
Pre-skill multi-agent frameworks tend to have a 2025 vocabulary
(FIFO backchannels, broadcast-status pipes, capability asymmetry as
convention) and a 2026 refinement (NDJSON+TTL gossip, OTLP
telemetry, an explicit safe/unsafe tool partition, a zero-egress
invariant). The pattern is portable: when porting an old framework
into a 2026 skill, identify the refinement layer first; keep the
old prompt body as the legacy implementation; add the SKILL.md
instruction to substitute the modern primitive when invoking. The
skill becomes a portable description of the framework across both
vocabularies.
5. Caching and context: why skill composition is affordable
Checked both version numbers against the live CHANGELOG at raw.githubusercontent.com/anthropics/claude-code/main/CHANGELOG.md on 2026-10-08. ENABLE_PROMPT_CACHING_1H (2.1.108) was correct. --exclude-dynamic-system-prompt-sections was misattributed to 2.1.114 (that release note is unrelated -- a permission-dialog crash fix); the CHANGELOG places it under 2.1.98 ("Added --exclude-dynamic-system-prompt-sections flag to print mode for improved cross-user prompt caching"). Corrected in body text below.
Skills are prompt-cache-aware primitives — named templates with tool scopes that
expand at call time (Claude Code features, 2026 Q2). Three corpus facts make composition
cheap: prompt caching is opt-in with a 1-hour TTL
(ENABLE_PROMPT_CACHING_1H, 2.1.108) and dynamic system-prompt sections can be
excluded for cache reuse (--exclude-dynamic-system-prompt-sections, 2.1.98)
(Claude Code workshop); the CLAUDE.md hierarchy is itself a cache strategy
(global-static / repo / session-dynamic) (Agentic workflow); and
context compression outperforms full-context agents on long-horizon tool use
(Morning Brief, 2026-06-10). The open question the corpus poses and does not answer:
at 1M context, is curated memory still necessary, or does it become the signal in a
sea of raw context?
6. Evals: making a skill provide good context
The unit of progress is the eval. OpenAI's framing defines success in four
categories — outcome (did the task complete), process (right tools, right
order), style (conventions), efficiency (no wasted tokens/commands) — and keeps
the must-pass list small (OpenAI n.d.). The harness is layered:
deterministic checks against JSONL traces (codex exec --json — "did it run
npm install?"), model-assisted rubric grading with a structured --output-schema,
and small prompt sets (10–20 cases) spanning explicit invocation, implicit
triggering, contextual variation, and negative controls (OpenAI n.d.).
Read through this note's lens, "good context" for a skill is the minimal context that passes the must-pass checks — which is also the minimal sandbox surface. The efficiency goal and the implicit-guardrail goal point the same way: a skill that needs fewer tools and less context is both cheaper and safer.
7. Deployment, rollout, testing
gh skill gives skills a software lifecycle: search (discover), preview (test
before install), install (deploy from a repo namespace), publish --dry-run
(validate before release), update (bulk upgrade) (GitHub n.d.). preview and
--dry-run are the testing/rollout seams — the place an eval suite (above) should
gate. A skill rollout is then: eval locally to gh skill preview to publish
--dry-run → publish → update across the fleet.
The lifecycle is not channel-neutral. The three distribution channels above
(vendored / MCP-served / fetched-then-local) impose different rollout
properties — vendored skills update with the repo, MCP-served skills update
when the server does, gh skill update is explicit. Eval gates are
identical; rollback semantics are not.
8. Claims (REPL-evaluated)
Verdicts produced 2026-06-24. correct = the cited term/claim was found in the
cited corpus note by REPL (wal-sh.site.org/read-all + slurp + substring);
attributed = sourced from a fetched primary document, not independently executed.
Three disputed verdicts were added 2026-10-29 from a re-check against primary
sources, and are the last three claims below. disputed here means a primary
source contradicts the claim as written without settling what should replace it;
each :FINDING: records what was fetched and what it said. The claims they
dispute are flagged inline at the point they are made rather than silently
rewritten.
8.1. Skills are named prompt templates with tool scopes
REPL confirmed "prompt template" and "tool scope" in
2026-q2-claude-code-features.
8.2. SKILL.md is the cross-harness skill convention
REPL confirmed "SKILL.md" in 2026-q2-cli-coding-agents.
8.3. Prompt caching is opt-in, 1h TTL, with cache-reuse flags
source is claude-code-workshop-2026 (has ENABLE_PROMPT_CACHING_1H + --exclude-dynamic-system-prompt-sections), NOT 2026-q2-claude-code-features as first staged
REPL found ENABLE_PROMPT_CACHING_1H and --exclude-dynamic-system-prompt-sections
in claude-code-workshop-2026; absent from 2026-q2-claude-code-features. Citation
corrected accordingly. (claude-code-workshop-2026)
8.4. All six surveyed CLI agents support MCP
REPL confirmed "all six" and "MCP" in 2026-q2-cli-coding-agents.
8.5. MCP authorization is optional and excludes stdio
REPL confirmed "stdio", "OAuth 2.1", "optional" in
2026-agent-permission-guardrails.
8.6. Capability is structural; the secret-custody empty cell is unoccupied
REPL confirmed "secret custody", "egress proxy", "structural", "empty cell",
"compute boundary" in 2026-agent-sandbox-systems.
8.7. Skill inputs are tainted by construction
REPL confirmed "tainted", "prompt injection", "domain" in
tainted-data-llm-pipelines.
8.8. OpenAI eval-skills: four success categories + layered harness
Primary source: developers.openai.com/blog/eval-skills — outcome/process/style/ efficiency; deterministic JSONL-trace checks + rubric grading + 10–20 case sets. Not independently executed. (OpenAI n.d.)
8.9. gh skill provides a search/preview/install/publish/update lifecycle
Primary source: cli.github.com/manual/gh_skill (preview). Subcommands install,
list, preview, search, publish (--dry-run), update. Preview only; not run
locally. (GitHub n.d.)
8.10. Footprint declaration has no standard schema
The note claims "No standard schema exists yet" for declaring a skill's filesystem, egress and process footprint. The Agent Skills specification does define optional frontmatter that covers part of this: a =compatibility= field documented as indicating "environment requirements (intended product, system packages, network access, etc.)", plus a free-form =metadata= map of string keys to string values. So a standard field for declaring network access does exist. What does not exist is a schema with the granularity the note describes --- named filesystem reads and writes, specific egress hosts, named process access --- nor any harness enforcement of it. Recorded as disputed rather than corrected because the claim is wrong as written but right in substance: the gap is granularity and enforcement, not the total absence of a field.
Checked against (Agent Skills n.d.) on 2026-10-29. The spec is no longer in
the anthropics/skills repository: spec/agent-skills-spec.md there is an
87-byte pointer to agentskills.io/specification, which is the normative document.
8.11. allowed-tools is a settled least-privilege mechanism
The skill-structure contract treats =allowed-tools= as a dependable least-privilege control. The Agent Skills specification marks it "(Experimental)" --- verbatim: "allowed-tools No Space-separated string of pre-approved tools the skill may use. (Experimental)". Building a least-privilege story on an explicitly experimental field is weaker than the note implies. This strengthens rather than undermines the note's own thesis that the unit is converging while the governance is not.
Checked against (Agent Skills n.d.) on 2026-10-29.
8.12. Deeper references/ nesting buys progressive-disclosure depth
The skills-composition anatomy presents =references/= as depth docs loaded on demand, implying that more routing depth buys more. The first controlled study of the pattern finds the opposite past one level: across three agent harnesses and three model families on InfiniteBench, "A second, deeper routing level never helps and sometimes breaks accuracy outright, so one level is enough". The same study also qualifies the first level --- the gain is near zero when a strong harness already divides and retrieves on its own, and only becomes decisive once the corpus outgrows direct navigation. Disputed, not corrected: the note never states a depth recommendation numerically, so the contradiction is with its implication rather than a literal claim.
Checked against (He et al. 2026) on 2026-10-29.
9. Meta-skills: skills that take skills as input
Checked the "three meta-skills exist" claim directly against disk on 2026-10-08. research-audit is present under this repo's .claude/skills/research-audit/SKILL.md with the described read-only tone/annotation scope. skills-guardrail is not in this repo's .claude/skills/ but is present under ~/.claude/skills/skills-guardrail (deployed from the private aygp-dr/skills repo per AGENTS.md), matching the claimed audit/enforce-resource-constraints scope. /skill-doctor was not found as a project- or user-level SKILL.md on this box; consistent with the body text treating it as a Claude Code report/command rather than a vendored skill bundle, not re-verified further here.
The unit of design is the set rather than the skill: a skill that contradicts or duplicates another corrupts the shared vocabulary every agent in the repo assumes. A meta-skill is a skill whose argument is other skills. Four kinds, by what they check:
- Eval — does the skill still work? Invoke it, or dry-run its commands, and confirm the described outcome. Catches drift from the code it documents (a renamed target, a moved path).
- Audit — coverage and freshness. Which boundaries have no skill; which skills cite files or URLs that no longer exist; which overlap.
- Consistency — contract conformance: frontmatter shape, a usage block,
rationale present. Mechanical; a linter for
SKILL.md. - Tone — house-style conformance over the skill corpus rather than the prose corpus.
An earlier draft (2026-06-01) recorded two facts that no longer hold. It
described the local contract as plain markdown with no YAML frontmatter; the
skills in this repo now open with YAML frontmatter carrying name,
description, and user_invocable (see research-audit/SKILL.md), which is
the SKILL.md convention above. It also stated that no meta-skill existed.
Three do. skills-guardrail audits and enforces resource constraints on
skills (egress, process, filesystem access): the sandbox lens applied to the
skill corpus, and the audit kind above. research-audit is a read-only tone
and annotation check over published notes. /skill-doctor reports on a
skill's structure and triggering: the consistency and eval kinds. What
remains open is a tone check over .claude/skills/** itself.
The tension the taxonomy resolves is between messy creation and a curated set. Skills should be cheap to write; friction kills the habit, and an unwritten skill is procedural memory lost. The cost of mess is paid not at creation but in composition: drift, overlap, contradiction, staleness. The resolution is not gatekeeping the write path. It is a messy write path and an audited read path, with meta-skills reconciling the set on a cadence.
10. Open questions
- Is a skill's tool-scope observable as a sandbox profile — can a harness derive
the compute/fs/egress/credential footprint from a
SKILL.mdand refuse it? Partial answer: where authors carryfs-access=/=egress=/=process-accesskeys in custom frontmatter, the footprint is already declared; the gap is harness adoption of a standard schema. - Does 1M context enable a new class of whole-repo skills, or just make existing skills cheaper?
- Where does eval "efficiency" (minimal context) and security (minimal surface) diverge, if ever?
- When the same framework ships under both generic-label and human-name invocation surfaces, does triggering quality degrade (description collision), or does the disambiguation by conversational register hold?
11. References
Core external links:
- anthropics/skills — the SKILL.md convention.
- Antithesis: Agent Skills (2026).
- OpenAI: Evaluating agent skills.
- gh skill — deploy / rollout / test lifecycle.
Internal:
- Agent sandbox systems — the four-isolation decomposition.
- Containment mapping.
- Agent permission guardrails.
- Annotation systems — the verdict methodology.