char-slop/berry
multipurpose self-modifiable agentic harness
git clone https://git.t4t.associates/char-slop/berry
a4e772a
main
skills
Berry's always-on skills extension discovers portable
Agent Skills and loads their instructions on demand. A skill
is a directory with a SKILL.md containing YAML frontmatter and Markdown instructions:
--- name : release description : Prepare and verify a release, including changelog review and release checks. --- Review changes since the previous release. Read references/checklist.md before proposing publication.
Optional scripts, references, and assets are loaded into model context only on demand. Loading a
host skill copies its bundle to the target machine, but does not execute scripts, install tools, or
grant permissions. Relative resource paths resolve from the listed skill directory, not the
conversation's working directory; ordinary read and shell calls work there.
collections
Berry's own collection belongs to the harness host. Project and shared user collections belong to the conversation's execution environment.
Precedence, highest first:
.agents/skills/in the working directory and its ancestors, through the nearest.gitor.jjrepository root; nearer collections win.$XDG_CONFIG_HOME/berry/skills/on the host, falling back to the host's~/.config/berry/skills/. These skills are available to both local and SSH conversations.~/.agents/skills/on the target machine.
Outside a repository, only the working directory supplies project skills. Collections contain
immediate skill subdirectories; discovery does not recursively search the repository. Symlinked
skills are deduplicated, and shadowed names and malformed files appear in /skills diagnostics.
commands and trust
/skills: list skills, sources, active snapshots, and diagnostics./skill name: explicitly load or reload a skill for the next turn, without starting a run./unskill name: deactivate a skill./skills trust: allow automatic project discovery for this conversation's current repository and environment./skills untrust: stop automatic project discovery there. Already-loaded skills remain active until unloaded.
Host and target user collections are available automatically. Project collections are hidden from
the model's catalog until trusted. An explicit /skill name can load a project skill without
trusting the whole repository. For automatic discovery, untrusted project collections are excluded
before resolving name collisions, so a user skill can remain available under the same name.
The model sees names and descriptions, then calls load_skill({ name }) directly or through
codemode. The tool returns an acknowledgment; the full instructions enter the next model request as
a separate prompt section. Supporting files and scripts require the appropriate existing tools.
lifetime and limits
Loading records an exact instruction snapshot in conversation history. Active instructions survive
compaction, extension reloads, and restarts, and follow historical forks and rewinds. Editing or
deleting SKILL.md does not alter an active snapshot; load it again to pick up edits.
Project and target-user snapshots pause when the conversation moves to another environment and resume when it returns. Previously recorded snapshots retain this behavior. Moving the working directory on the same machine does not reinterpret their absolute resource paths. Host snapshots remain active across environment changes; their pinned bundles are materialized on the new target. Subagents discover the host collection and their own environment's skills, but do not inherit the parent's active snapshots or project trust.
Host bundle versions are retained under $XDG_DATA_HOME/berry/skills/bundles/, falling back to
~/.local/share/berry/skills/bundles/, so historical conversations do not silently acquire newer
resources. Remote copies live under the target's $XDG_CACHE_HOME/berry/skills/ (default
~/.cache/berry/skills/) and can be recreated from those host snapshots. Local conversations use
the host snapshot directly. Reload a skill to capture source edits, including resource-only edits.
Transfers publish only complete bundles and preserve executable script permissions on POSIX targets. Bundle directories are private. Symlinked skill roots and internal symlinks are supported, but links escaping the skill directory, cycles, and special files are rejected. Each bundle is limited to 32 MiB, 512 entries, and 16 directory levels. Do not remove host bundle snapshots if historical conversations still need their resources.
Each SKILL.md is limited to 64 KiB; all active snapshots together are limited to 128 KiB,
including paused snapshots. A failed load leaves existing activations intact. Discovery is bounded
to 256 entries per collection and 128 distinct skills, with diagnostics when those limits are
reached.
The required name and description fields are validated against the standard's character and
length limits. Directory/name mismatches produce warnings. Optional metadata is preserved in the
loaded file; experimental allowed-tools and other clients' flags do not change berry's tool
permissions.
1# skills 2 3Berry's always-on skills extension discovers portable 4[Agent Skills](https://agentskills.io/specification) and loads their instructions on demand. A skill 5is a directory with a `SKILL.md` containing YAML frontmatter and Markdown instructions: 6 7``` markdown 8--- 9name: release 10description: Prepare and verify a release, including changelog review and release checks. 11--- 12 13Review changes since the previous release. Read references/checklist.md before proposing 14publication. 15``` 16 17Optional scripts, references, and assets are loaded into model context only on demand. Loading a 18host skill copies its bundle to the target machine, but does not execute scripts, install tools, or 19grant permissions. Relative resource paths resolve from the listed skill directory, not the 20conversation's working directory; ordinary `read` and shell calls work there. 21 22## collections 23 24Berry's own collection belongs to the harness host. Project and shared user collections belong to 25the conversation's execution environment. 26 27Precedence, highest first: 28 291. `.agents/skills/` in the working directory and its ancestors, through the nearest `.git` or `.jj` 30repository root; nearer collections win. 312. `$XDG_CONFIG_HOME/berry/skills/` on the **host**, falling back to the host's 32`~/.config/berry/skills/`. These skills are available to both local and SSH conversations. 333. `~/.agents/skills/` on the **target machine**. 34 35Outside a repository, only the working directory supplies project skills. Collections contain 36immediate skill subdirectories; discovery does not recursively search the repository. Symlinked 37skills are deduplicated, and shadowed names and malformed files appear in `/skills` diagnostics. 38 39## commands and trust 40 41- `/skills`: list skills, sources, active snapshots, and diagnostics. 42- `/skill name`: explicitly load or reload a skill for the next turn, without starting a run. 43- `/unskill name`: deactivate a skill. 44- `/skills trust`: allow automatic project discovery for this conversation's current repository and 45environment. 46- `/skills untrust`: stop automatic project discovery there. Already-loaded skills remain active 47until unloaded. 48 49Host and target user collections are available automatically. Project collections are hidden from 50the model's catalog until trusted. An explicit `/skill name` can load a project skill without 51trusting the whole repository. For automatic discovery, untrusted project collections are excluded 52before resolving name collisions, so a user skill can remain available under the same name. 53 54The model sees names and descriptions, then calls `load_skill({ name })` directly or through 55codemode. The tool returns an acknowledgment; the full instructions enter the next model request as 56a separate prompt section. Supporting files and scripts require the appropriate existing tools. 57 58## lifetime and limits 59 60Loading records an exact instruction snapshot in conversation history. Active instructions survive 61compaction, extension reloads, and restarts, and follow historical forks and rewinds. Editing or 62deleting `SKILL.md` does not alter an active snapshot; load it again to pick up edits. 63 64Project and target-user snapshots pause when the conversation moves to another environment and 65resume when it returns. Previously recorded snapshots retain this behavior. Moving the working 66directory on the same machine does not reinterpret their absolute resource paths. Host snapshots 67remain active across environment changes; their pinned bundles are materialized on the new target. 68Subagents discover the host collection and their own environment's skills, but do not inherit the 69parent's active snapshots or project trust. 70 71Host bundle versions are retained under `$XDG_DATA_HOME/berry/skills/bundles/`, falling back to 72`~/.local/share/berry/skills/bundles/`, so historical conversations do not silently acquire newer 73resources. Remote copies live under the target's `$XDG_CACHE_HOME/berry/skills/` (default 74`~/.cache/berry/skills/`) and can be recreated from those host snapshots. Local conversations use 75the host snapshot directly. Reload a skill to capture source edits, including resource-only edits. 76 77Transfers publish only complete bundles and preserve executable script permissions on POSIX targets. 78Bundle directories are private. Symlinked skill roots and internal symlinks are supported, but links 79escaping the skill directory, cycles, and special files are rejected. Each bundle is limited to 32 80MiB, 512 entries, and 16 directory levels. Do not remove host bundle snapshots if historical 81conversations still need their resources. 82 83Each `SKILL.md` is limited to 64 KiB; all active snapshots together are limited to 128 KiB, 84including paused snapshots. A failed load leaves existing activations intact. Discovery is bounded 85to 256 entries per collection and 128 distinct skills, with diagnostics when those limits are 86reached. 87 88The required `name` and `description` fields are validated against the standard's character and 89length limits. Directory/name mismatches produce warnings. Optional metadata is preserved in the 90loaded file; experimental `allowed-tools` and other clients' flags do not change berry's tool 91permissions.