Table of Contents

Native tools and skill discovery

Observed: 2026-10-25 UTC. Native tool behavior is implemented in the Batbox source tree. Skill discovery details below are from commit f7a4de4 in /home/isnotreal/batbox-fixes/skill-discovery-20261025, deployed at 2026-10-25T16:22:21Z.

Use native tools directly

The autonomous engine wires Batbox's native tool registry, including file reading/writing/editing, search, terminal Bash, memory tools, and agent/task tools. Bash executes the supplied command directly. For example, inspect Caddy text with grep; if you need to read JSON, pipe its stdout into python3 -c and parse stdin. Avoid creating a temporary script and trying to execute it unless it has executable permissions, and do not parse a Caddyfile as JSON. Large outputs are archived with a raw file, manifest, and page files; follow the paths in the bounded result rather than rebuilding it with subprocess wrappers. See artifact layout.

Skill file format and roots

The deployed f7a4de4 source accepts top-level .md skill files with YAML frontmatter. name is required; description, model, and allowed_tools are read when present. The remaining Markdown body is the instruction text. $ARGS is replaced by the optional input string. Search roots, in increasing override priority, are ~/.claude/skills/, <project>/.claude/skills/, ~/.batbox/skills/, then <project>/.batbox/skills/; bundled skills seed the loader. Directory traversal or a different layout is not described by this implementation.

Exact invocation surface in f7a4de4

User commands are /skills (list), /skills info <name> (metadata), and /skills run <name> (show the recipe body). The model-facing Skill tool accepts operation (invoke by default or list), name for invoke, and optional string input. A list call omits both name and input; it returns name, short description, and source. An invocation returns the body with $ARGS substitution and structured allowed_tools/model metadata. The schema description advertises loaded names and descriptions but not recipe bodies. A small example is Skill({“operation”:“invoke”,“name”:“hunter”,“input”:“review src/autonomous”}).


Evidence read 2026-10-25 UTC: /home/isnotreal/batbox-fixes/skill-discovery-20261025/src/plugins/SkillLoader.cpp, src/tools/SkillTool.cpp, src/commands/SkillsCmd.cpp, src/app/WireTools.cpp, src/skills/BundledSkillsRegistry.cpp, src/skills/data/hunter.md, commit f7a4de4.