Agent skills
Here is the part most tool layers miss. You do not have to write your capabilities.
In late 2025 Anthropic shipped Agent Skills — a skill is just a folder with a
SKILL.md inside: a name, a description, and Markdown instructions, optionally bundling
scripts and reference files. It caught on fast, and the SKILL.md format became an
open standard now read by Claude Code, OpenAI’s Codex CLI, Gemini CLI, GitHub Copilot,
Cursor, Cline, Windsurf, and opencode. There is a growing public library of them — and
counting the ones teams keep in their own repos, the world already has tens of thousands
of agent skills written down.
toolnexus reads that exact same SKILL.md format — and hands those skills to any
LLM you point it at, not just Claude. Every skill the community has authored for Claude
Code or opencode drops straight into a DeepSeek, GPT, Gemini, or local-model agent with no
translation. That is the whole idea: your model inherits the ecosystem’s accumulated
know-how, on day one, for free.
Why skills, not more code
Section titled “Why skills, not more code”- Most capability is instructions, not functions. How you handle a refund, your house style for a report, a runbook with its reference PDF — that is knowledge, and knowledge wants to live as Markdown you can read and edit, not as glue code you compile.
- It scales to a hundred thousand skills for almost nothing. The model sees only a short
catalog (each skill’s
name+description). It loads a skill’s full body and files only when it decides to use one — progressive disclosure. A thousand skills in the folder cost a few dozen tokens until one is actually needed. - The community writes them once; every model uses them. One open standard means the work compounds across the whole ecosystem instead of being locked to one vendor’s agent.
Show it
Section titled “Show it”Point the toolkit at one or more folders of **/SKILL.md. They join the system prompt as
a short catalog; the single skill tool loads a skill’s body + sampled resources on demand.
const tk = await createToolkit({ skillsDir: "./skills" }) // one or more skill roots// the model calls skill({ name: "..." }) to load one on demandconst res = await tk.execute("skill", { name: "hello-world" })console.log(res.output)tk = await create_toolkit(skills_dir="./skills") # one or more skill rootsres = await tk.execute("skill", {"name": "hello-world"})print(res.output)tk, _ := toolnexus.CreateToolkit(ctx, toolnexus.Options{ SkillsDir: []string{"./skills"}, // one or more skill roots})res, _ := tk.Execute(ctx, "skill", map[string]any{"name": "hello-world"}, nil)fmt.Println(res.Output)Toolkit tk = Toolkit.create(new Toolkit.Options() .skillsDir("./skills")); // one or more skill rootsawait using var tk = await Toolkit.CreateAsync(new Toolkit.Options() .WithSkillsDir("./skills")); // one or more skill roots{:ok, tk} = Toolnexus.create_toolkit(skills_dir: "./skills") # one or more skill rootsres = Toolnexus.Toolkit.execute(tk, "skill", %{"name" => "hello-world"})IO.puts(res.output)A skill is a folder with a SKILL.md — the open standard, verbatim:
---name: pdf-formsdescription: Fill and flatten PDF forms from structured data.---
# Fill a PDF form
1. Read `reference/field-map.md` for this form's field names.2. Run `scripts/fill.py` with the user's data.3. Return the path to the filled PDF.The catalog advertises name + description; the body and a sampled file list arrive only
when the model calls skill. Drop in a folder of community skills and your agent can do
everything they describe — on whatever model you are running.
See Agent skills for allowlists, data-sourced skills (serve skills from a database instead of disk), and the byte-exact output format.