SCORPIOX CODE
Docs for SCORPIOX CODE @ 5fd054b

Skills in SCORPIOX CODE: On-Demand Architecture vs Other Harnesses

A skill in SCORPIOX CODE is a folder of instructions the agent loads only when it needs them. You write a skill once, and it stays out of the way until the agent decides it is relevant — or until your project tells the agent it is required. That is the whole idea: expertise on demand, not expertise in the prompt.

This page explains how the skills system works, how to use it, and — because the design choices are the point — how it differs fundamentally from the skills and context models in OpenCode, Claude Code, OpenAI Codex, Pi, and Hermes.

Source of truth: the skills subsystem at commit 5fd054b.


The one-sentence version

Most agent harnesses either shove context into the prompt and leave it there (context-file harnesses) or let the agent pull in a file when it wants to (progressive-disclosure harnesses). SCORPIOX CODE does the second thing *and adds a third layer the others do not have: a session-scoped required skills contract that actively nudges the agent to load the skills a project depends on.*


What a skill is

A skill is a directory containing a SKILL.md file. The file starts with YAML frontmatter and a body:

---
name: release-notes
description: Draft release notes from merged PRs. Use when preparing a tagged release.
---

## What this does
- Collects merged PRs since the last tag
- Groups changes by area
- Produces a copy-pasteable changelog section

## How
1. ...

Only two frontmatter fields drive discovery: name and description. The description is the single most important line you will ever write in a skill, because it is the only part the agent sees before it decides to load the whole thing. If the description does not say clearly what it does and when to use it, the agent will not reach for the skill.

The body is the full instruction set. It is not in the model's context until the skill is invoked. That is the core of the architecture.


Where skills live

SCORPIOX CODE scans skills in a fixed priority order. A higher-priority skill with the same name overrides a lower-priority one:

Location Scope Priority
./.claude/skills/<name>/SKILL.md Project Highest — wins over user and built-in
~/.claude/skills/<name>/SKILL.md User Overrides built-in
Additional skill paths Extra Set via the ADDITIONAL_SKILLS config (comma-separated paths)
Built-in skills System Shipped with SCORPIOX CODE; lowest priority

A few consequences fall out of this ordering:

You can inspect exactly what is loaded at any time with the /skills command, which opens a popup listing every discovered skill, its source (user / project / additional / built-in), and its description.


How the agent sees skills

This is where the design gets concrete, and where SCORPIOX CODE is deliberately different from a "dump everything in the prompt" approach.

At any point in a session, the agent's context contains only a list: each skill's name and one-line description. That is it. The body of every skill is not present. The list is assembled into the InvokeSkill tool's description so the agent always knows what is available, but the list is compact — names and short descriptions, not full instructions.

Two tools do the work:

Tool What it does Enabled
InvokeSkill Loads a skill by name and returns its full content for the agent to follow. Yes, by default
SearchSkills Grep-style search across skill names, descriptions, and content. Returns matches so you can discover a skill before invoking it. Auto

SearchSkills is the discovery path. If you have a large skill library, the agent can search it by keyword (it supports case-insensitive matching, regex, and whole-word flags) rather than being handed every description up front.

The list is filtered, not truncated

You control which skills are listed in the agent's context using the SKILL_LIST_* config. The important guarantee: filtering changes only what is listed, never what is usable. Every skill remains invokable and searchable no matter what you filter out of the list. When a filter hides skills, SCORPIOX CODE automatically turns on SearchSkills so the hidden ones stay discoverable, and it appends a hint to the tool description like (+3 more skills not listed — use SearchSkills to discover them).

This is a deliberate split between what the agent sees by default and what the agent can reach. You can keep the context tiny for a focused session while leaving the full library one search away.

Why the ordering of the list matters (a quiet win)

The list is rendered in a deterministic, sorted order, and the loader skips a rescan when the source directories have not changed. The reason is subtle but important: the skill list is part of the model's tool definition, and a shuffled list would rewrite that definition and bust the provider's prompt cache on every reload. Keeping the order byte-stable and the rescan guarded means adding, removing, or editing skills does not silently tank your cache-hit ratio. You do not think about this, but it is why a big skill library does not quietly make your tokens more expensive.


The required-skills contract (the part the others lack)

This is the layer that makes SCORPIOX CODE's model fundamentally different, not just a re-skin of progressive disclosure.

Every harness that uses on-demand skills has the same weakness: the agent can forget to load a skill it is supposed to use. The skill is on disk, the description is in the prompt, but the model never decides to invoke it, and you get generic behavior instead of the specialized workflow you wrote down.

SCORPIOX CODE treats "these skills must be loaded in this session" as a first-class, enforced concept.

You declare required skills in a cascade of required_skills.txt files, one skill name per line, read and unioned in this order:

File Scope
~/.claude/required_skills.txt User
.claude/required_skills.txt Project
.scorpiox/required_skills.txt Project
.scorpiox/sessions/<id>/required_skills.txt This session only (agent-managed)

The cascade is read-only for the agent; it only ever writes to the per-session file. That means a project can pin a set of skills that every session in that repo is expected to have loaded, and a session can add its own on top.

When a session starts, SCORPIOX CODE knows which required skills are still not loaded. If the agent gets to work without loading them, the harness injects a nudge — a system-level reminder naming exactly which required skills are missing and telling the agent to load them with InvokeSkill. So the "forgot to load it" failure mode is corrected automatically, in-loop, without you having to type "did you load the release-notes skill?"

Think of it as a contract with an enforcement hook:

No other harness in this comparison ships a mechanism like this. They can list a skill; they cannot require it and notice when it is missing.


A skill, end to end

A concrete picture of a single skill's lifecycle:

  1. Author. You create ./.claude/skills/release-notes/SKILL.md with a good name, a sharp description, and a full body.
  2. Discover. On session start the loader scans the skill directories and picks it up. Its name and description enter the agent's context via the InvokeSkill tool description — nothing more.
  3. Require (optional). If this repo's releases always follow the same process, you add release-notes to .claude/required_skills.txt.
  4. Load. The agent invokes InvokeSkill with release-notes — either because the task matched, or because the harness nudged it as a missing required skill. Now the full body is in context.
  5. Follow. The agent works from the loaded instructions for the rest of the task.

At no point does the body cost context tokens until step 4. That is the entire value proposition, and it is what lets you run a large skill library without paying a permanent context tax.


How this compares to the other harnesses

The table below is the heart of the page. "On-demand" means the skill body is out of context until loaded. "Required/enforced" means the harness can mark a skill as mandatory and notice if it is not loaded. "Discovery" means a way to find a skill you did not list up front.

Capability SCORPIOX CODE Claude Code Codex CLI OpenCode Pi / Hermes
Skill format SKILL.md + frontmatter SKILL.md + frontmatter SKILL.md + frontmatter SKILL.md + frontmatter Context files (AGENTS.md-style), no dedicated skill loader
On-demand loading (body out of context) Yes Yes Yes Yes No — context files are always in the prompt
What stays in context by default Name + description Name + description Name + description (and always-on AGENTS.md) Name + description The whole file
Required / enforced skills Yes — required_skills.txt cascade + in-loop nudge No No No No
Discovery tool for unlisted skills Yes — SearchSkills (grep, regex, auto-enabled) Model-driven, no dedicated tool Model-driven ($ mention or auto-select) Native skill tool, model-driven N/A
Filter what is listed without hiding what is usable Yes — SKILL_LIST_*, hidden skills stay searchable No No No N/A
Cache-aware tool/list ordering Yes — deterministic order + guarded rescan Not documented Not documented Not documented N/A
Built-in skills, individually disableable Yes — SKILL_<NAME> keys Pre-built skills (document tasks) Plugins distribute skills No No

Claude Code — the closest relative

Claude Code's Agent Skills are the nearest thing to SCORPIOX CODE's model, and the similarities are real: filesystem-based, SKILL.md with YAML frontmatter, name and description pre-loaded, full content loaded on demand, progressive disclosure. If you already know Claude Code skills, SCORPIOX CODE skills will feel instantly familiar.

The differences are exactly the three layers Claude Code does not ship:

SCORPIOX CODE also reads the same on-disk layout Claude Code uses (.claude/skills/), so skills you already have for Claude Code typically work here without edits.

OpenAI Codex CLI — skills plus an always-on file

Codex uses the same SKILL.md format and supports on-demand skills, but it layers in a second, always-on mechanism: AGENTS.md, which is read into context for every session (globally and per repo). So Codex is a hybrid — some context is always on, some is on-demand. It also distributes skills as plugins and lets you invoke a skill explicitly (the $ mention) or let Codex auto-select it from the description.

Where SCORPIOX CODE diverges: there is no always-on AGENTS.md-style tax in the skills model — the base context stays small by default — and there is no required/enforced layer. Codex can ship and surface skills; it cannot require one and detect its absence.

OpenCode — a clean, permissive on-demand model

OpenCode is also genuinely on-demand: one folder per skill, SKILL.md inside, a native skill tool the agent calls to load content when needed. Its discovery paths are generous — it looks in its own directory and reads Claude-compatible and agent-compatible locations — which makes porting easy.

What it does not have that SCORPIOX CODE does: the required-skills enforcement, a dedicated grep search tool, and the listing filters. OpenCode's model is a faithful progressive-disclosure implementation; SCORPIOX CODE's is that model plus an enforcement and curation layer on top.

Pi and Hermes — context-file harnesses

Pi and Hermes are lightweight harnesses built around the context-file pattern: a single always-in-context file (an AGENTS.md-style document) that carries your instructions, conventions, and preferences. There is no separate on-demand skill layer, no skill loader tool, and no notion of a required skill that gets enforced.

That is a legitimate design — for a small personal setup, one well-written context file is enough and simpler to reason about. The trade-off is that everything in that file costs context tokens in every session, whether you need it today or not. SCORPIOX CODE's skills model is what you reach for when that single file stops scaling: move each concern into its own skill, keep only the descriptions in context, and let the agent (or the required-skills contract) pull in the body only when it matters.


The fundamental difference, stated plainly

On-demand skill loading is now common. Claude Code, Codex, and OpenCode all ship it. What separates SCORPIOX CODE is not that skills load on demand — it is what wraps that mechanism:

  1. A required-skills contract that is enforced in the loop. You can declare that a session must have certain skills loaded, and the harness will tell the agent to load them if they are missing. This turns a skill from "available if the model remembers" into "guaranteed to be in play."
  2. A curation layer. You can shrink the listed set for context economy without hiding anything, because every skill stays invokable and searchable, and a dedicated search tool covers the gap.
  3. Cache-aware plumbing. The list order and reload behavior are designed so a big or changing skill library does not silently destroy your prompt-cache hit rate.

So the honest summary is this: SCORPIOX CODE's skills system is progressive disclosure with a contract, a search tool, and cache-awareness bolted on. The contract is the part no one else in this comparison has, and it is the reason a project can depend on a specialized workflow actually being loaded, rather than hoping for it.


Quick start

Create your first project skill:

mkdir -p .claude/skills/release-notes
cat > .claude/skills/release-notes/SKILL.md << 'EOF'
---
name: release-notes
description: Draft release notes from merged PRs. Use when preparing a tagged release.
---

## What this does
- Collects merged PRs since the last tag
- Groups changes by area
- Produces a copy-pasteable changelog section
EOF

Run /skills to confirm it shows up as a project skill. If this repo should always use it, add the name to a project-level .claude/required_skills.txt:

release-notes

Now every session in this repo is expected to have release-notes loaded, and the agent will be nudged to load it if it starts working without it.

Rules of thumb: