char-slop/berry

multipurpose self-modifiable agentic harness

git clone https://git.t4t.associates/char-slop/berry

Charlotte Somadd skills extension for loading skillsa4e772a

main
5.1 KiB91 linesraw

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:

  1. .agents/skills/ in the working directory and its ancestors, through the nearest .git or .jj repository root; nearer collections win.
  2. $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.
  3. ~/.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`
30   repository 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
45  environment.
46- `/skills untrust`: stop automatic project discovery there. Already-loaded skills remain active
47  until 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.