On this page
Harness Lore
The per-harness skill behavior the profiles encode.
Everything below was established empirically, and it is the kind of
knowledge this tool exists to own once. Each profile field cites the
harness version it was established on, and profile.LastValidated (shown
by skillxp harnesses, compared by skillxp doctor) records the release
the whole profile was last re-confirmed on.
Discovery and activation
- Project-level skill directories:
.claude/skills(claude-code),.codex/skills(codex),.agents/skills(antigravity),.github/skills(copilot, which also reads.agents/skillsand.claude/skills). User scope:~/.copilot/skills(copilot),~/.gemini/config/skills(antigravity), and the sameskillsfolder under the config home for claude-code and codex. - claude-code needs
--allowedTools Skillfor activation; antigravity needs permission bypass for itsview_filepull; codex’s read-only sandbox suffices; copilot needs no flag at all (headless runs execute read-only tools unprompted and deny only writes, and theskilltool is one of them). - claude-code harness-pushes skill bodies into context (frontmatter
stripped); codex and antigravity model-pull via file reads
(frontmatter visible); copilot pushes through its
skilltool, whose result is a one-line confirmation while the body is delivered as a<skill-context>block and recorded, frontmatter stripped, as the text of askill.invokedrecord. Same spec, different vehicle, different author-facing result. - Copilot’s
<skill-context>block is more than tags: its opening lines state the skill’s base directory and list every file under the skill directory, recursively and unfiltered (nonstandard directories and files the body never mentions included), so the model learns of bundled files by name at activation. No other harness enumerates. The copilot profile parses in agentminutes’ delivered text form so the tags and the list are in the traced text; the drift probe stages a bundled file and holds copilot to listing it. - Copilot does not deduplicate reactivation. Activating a skill again
with its body unchanged delivers the block again but logs it by
reference (
skill.invoked_ref: content hash, no body), which agentminutes resolves to the earlier body, so the second delivery traces asharness-injectedlike the first. An edited body logs a fullskill.invokedinstead.
Transcripts and evidence
- Copilot records the system prompt on a session’s opening turn (a
resumed run records none), and its
<available_skills>block is the discovery listing (system.message). The delivered skill body is the text of theskill.invokedrecord (orskill.invoked_refon a repeat activation), byte-exact what the harness’s ownskill.context_delivered_refhashes as delivered and wrapped in the<skill-context>block it records, so a phrase traced from the body isharness-injectedevidence, as on claude-code, on every activation. - Antigravity transcripts record no injected context, so discovery
evidence there is behavioral inference. One
agy -pinvocation also writes two conversations (a warm-up plus the real one), so attribution matches the recorded human prompt. - Harnesses record symlink-resolved cwds; fixture paths are resolved
before comparison (macOS
/var/foldersvs/private/var/folders). - Echo locations that replay conversation content: codex
task_complete, antigravityuser_input_context/conversation_history/checkpoint. The trace report excludes them from loading evidence. Copilot has none: its only system record with text is the system prompt itself.
Sandboxes and auth
- Sandbox redirection: codex honors
CODEX_HOME; claude-code honorsCLAUDE_CONFIG_DIRfor config and transcripts but reads macOS credentials from the keychain (and migrates any.credentials.jsoninto it), so sandboxed auth must come fromCLAUDE_CODE_OAUTH_TOKENorANTHROPIC_API_KEY; antigravity keys everything offHOMEand re-initiates browser OAuth if auth state doesn’t transplant cleanly; copilot honorsCOPILOT_HOMEfor config, skills, and transcripts while its/logintoken stays in the macOS keychain, so a fresh home is still authenticated. - Copilot auto-updates on launch outside CI, so every copilot run pins
COPILOT_AUTO_UPDATE=falseto stay on the release the observation is attributed to. - Antigravity normally keeps its auth token in the macOS keychain (an item named “antigravity”), but falls back to a token file when no keychain is reachable, which is what makes HOME-swapped sandboxes possible at all.
- Antigravity ships builtin skills (
agy-customizations,permissioned-github) underantigravity-cli/builtin/skills/: bundled baseline, like the built-ins on every harness (copilot’s arecustomize-cloud-agentandgithub-pr-media). - Sandboxed fresh homes run with harness-default settings, including the default model, which may differ from the user’s configured one; observations stamp the model per run for exactly this reason.
Sessions
- Resume appends to the same transcript and session identity on every
harness (claude-code and copilot
--resumekeep the preset session ID; codex and antigravity grow the same file), so multi-turn sessions stay addressable by the opening turn’s ID.