Skip to content

Skills 3/6: skills you turn on are offered to the model, and every pull shows #1405

Open

Description

@AbirAbbas

Step 3 of #1277. It lands in the single pull request for #1277 (branch feat/1277-skills).

What

  • Where the choice is kept. Three places hold the same two lists, on: [names] and off: [names]. The narrowest scope that names a skill wins; otherwise the skill is off. Every write goes through one engine door.
Scope Where
global ~/.codeaf/skills.json
project <project>/.codeaf/skills.json
conversation the conversation's meta.json
  • Catalog. Skills that are on are listed in message[0] (name, one-line description, size), beside the standing orders and folders. The catalog changes only when a setting changes or a folder is attached.
  • The skill tool. Its name is constrained to the skills that are on. It returns the body wrapped as <skill name="…" dir="…">…</skill>, with the skill's bundled files listed. Relative paths resolve against dir, and the skill's folder is allow-listed for read.
  • Absent, not broken. With no skill on, neither the catalog nor the tool exists.
  • Every pull is visible. Each call draws its own transcript row naming the skill and its size, for example used skill pdf-processing · 3.1 KB. It is never folded into prose.
  • Loaded once. A second pull of the same skill in one conversation returns a short "already loaded". Compaction keeps a loaded skill.
  • allowed-tools pre-approves nothing.
  • Words. prompts/system.md says what a skill is and when to open one. docs/CHAT-V3.md's "dropped skills & rules" line is invalidated by this pull request's change entry.

Acceptance, end to end

Real binary with a stub model:

  • With pdf-processing turned on globally, the request's system prompt lists it, and the tools include skill with pdf-processing in its enum.
  • When the stub calls skill with pdf-processing, the transcript draws used skill pdf-processing · followed by its size. The tool result carries the body and the skill's dir.
  • With nothing on, the request has no skill tool and no catalog section.
  • A project skills.json turning the skill off overrides the global on. A conversation turning it on overrides the project off.
  • The belt gate names skill. The manual answers "which skills can you use on your own?".

Activity

  1. self-assigned this
    on Sep 23, 2026
  2. added
    featureWork that adds a capability; developers break it into tasks
    area:sessionThe engine — turns, tasks, the toolbelt, checkpoints
    area:toolsThe tool layer: built-in tools, registries, belts
    on Sep 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:sessionThe engine — turns, tasks, the toolbelt, checkpointsarea:toolsThe tool layer: built-in tools, registries, beltsfeatureWork that adds a capability; developers break it into tasks

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions