====== 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 [[runtime:sessions|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/'', ''/.claude/skills/'', ''~/.batbox/skills/'', then ''/.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 '' (metadata), and ''/skills run '' (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''.