ADR-029: Local skills migrated to .context/plugins/ as Tessl file-based plugins
Status: Accepted
Date: 2026-07-03
Context
Six locally-developed skills (adr-capture, context-file, context-index, docs-check,
rules-management, session-reflection) lived under .agents/skills/ as standalone SKILL
directories without tile.json or tessl-package.json. They were symlinked to .claude/skills/
via a setup-skills.sh script for agent discovery.
Additionally, 7 Tessl registry plugins had stale caches in .agents/skills/ with a tessl__
prefix, duplicating what Tessl manages in .tessl/plugins/.
Decision
- Move local skills to
.context/plugins/pantheon-org/— each gets tile.json,
tessl-package.json, and is registered intessl.jsonwith afile:source. - Remove
setup-skills.sh— Tessl installs create.claude/skills/tessl__<name>
symlinks automatically; the old script was redundant and created broken symlinks. - Remove stale
.agents/skills/tessl__*stubs — empty caches of registry plugins. - Exclude
.context/plugins/from pre-commit hooks — plugin .md files use Tessl
frontmatter (name, description) not the project’s context schema (title, type, status, date). - Scripts inside plugins resolve paths via
SCRIPT_DIR— notgit rev-parseroot —
so they work from both the source directory and the Tessl-vendored copy.
Consequences
- Local skills are now proper Tessl plugins, publishable to the registry with
tessl publish. - No more
.agents/skills/vs.tessl/plugins/split — single source of truth via tessl.json. - Plugin discovery is handled by Tessl, not a shell script (no broken symlinks).
- The
adding-helper-skills.mdinstruction doc codifies the process for adding future skills. plugins/was moved under.context/to keep helper skills alongside project context.- The socratic-method plugin was audited and improved from F (83/140) to A (126/140).