agentleFS
MicrosoftKnown publishermicrosoft/PilotSwarm/.github/skills/add-tool/SKILL.md

add-tool

Skill14 starsChanged 8 months agoMITView on GitHub

Add a new tool to PilotSwarm. Covers defining the tool with defineTool(), registering it on the worker (worker-level or per-session), referencing it from the client via toolNames, and adding an integration test.

We split this skill into the rules it gives an agent

3 rules. 0 are common, 0 are distinctive, and 3 are very specific to this project.

  • 0

    Common

    Most of the 18 edited versions we read keep these.

  • 0

    Distinctive

    This author's own choices. Worth a look.

  • 3

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Per-session: Call worker.setSessionConfig(sessionId, { tools: [myTool] }) after creating the session.

    line 20
  2. Very specific:

    Create a test function following the existing pattern (e.g., testToolCalling).

    line 23
  3. Very specific:

    Add the test to the tests array at the bottom.

    line 26

“Common” is measured: kept by at least 6 in 10 of the 18 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Add a New Tool

Tools are defined using defineTool() from @github/copilot-sdk and registered on the worker.

Steps

  1. Define the tool using defineTool(name, { description, parameters, handler }).
    • name must be a unique string identifier (snake_case).
    • description should clearly explain when the LLM should use it.
    • parameters uses JSON Schema format with type: "object", properties, and required.
    • handler is an async function that receives the validated arguments and returns a result.
  2. Register on the worker — two patterns:
    • Worker-level (recommended): Call worker.registerTools([myTool]) before or after worker.start(). Clients reference it via toolNames: ["my_tool"].
    • Per-session: Call worker.setSessionConfig(sessionId, { tools: [myTool] }) after creating the session. Only works in same-process mode.
  3. Add a test in test/sdk.test.js:
    • Create a test function following the existing pattern (e.g., testToolCalling).
    • Track whether the tool handler was called with a boolean flag.
    • Assert the LLM's response reflects the tool's output.
    • Add the test to the tests array at the bottom.

Example

import { defineTool } from "pilotswarm";

const myTool = defineTool("lookup_price", {
    description: "Look up the current price of a product by name",
    parameters: {
        type: "object",
        properties: {
            product: { type: "string", description: "Product name" },
        },
        required: ["product"],
    },
    handler: async ({ product }) => {
        const price = await fetchPrice(product);
        return { product, price };
    },
});

// Worker-level registration
worker.registerTools([myTool]);

// Client references by name
const session = await client.createSession({
    toolNames: ["lookup_price"],
    systemMessage: "You can look up product prices.",
});

How tools flow to the Copilot SDK

worker.registerTools() → Map<string, Tool>
  ↓
SessionManager.getOrCreate() resolves toolNames → Tool[]
  ↓
ManagedSession.runTurn() merges user tools + system tools (wait, ask_user)
  ↓
copilotSession.registerTools(allTools)  ← Copilot SDK method
  ↓
copilotSession.send({ prompt })         ← LLM sees registered tools

Key files

  • src/managed-session.ts — where tools are merged and registered on CopilotSession
  • src/session-manager.ts — where toolNames are resolved from the worker registry
  • src/worker.ts — where registerTools() stores tools in the registry
  • test/sdk.test.js — integration tests

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

Reviews can't be read right now.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.