rony-llm-agent/pkg/tools
Victor Vargas 724a143f90 style: gofmt
Formatting only (struct field alignment, import ordering) across the
files that didn't comply — no semantic changes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-12 16:14:15 -07:00
..
sandbox Fix tool call tracking and streaming assembly for all providers 2026-07-08 16:11:57 -07:00
README.es.md docs(i18n): translate all docs to English (with .es.md as Spanish alternative) 2026-06-30 13:40:37 -07:00
README.md docs(i18n): translate all docs to English (with .es.md as Spanish alternative) 2026-06-30 13:40:37 -07:00
registry.go style: gofmt 2026-07-12 16:14:15 -07:00
registry_test.go feat(tools): add Tool definitions, Registry pattern, and filesystem sandbox with path validation 2026-06-30 23:53:32 -07:00
types.go style: gofmt 2026-07-12 16:14:15 -07:00
types_test.go Fix tool call tracking and streaming assembly for all providers 2026-07-08 16:11:57 -07:00

pkg/tools

Tools system (function calling) with JSON Schema, sandbox, and permissions.

Responsibility

Allow the LLM to invoke functions defined in Go, with schema validation and sandboxing.

Public API

type Tool struct {
    Name        string
    Description string
    InputSchema json.RawMessage  // JSON Schema draft-07+
    Handler     Handler          // func(ctx, args json.RawMessage) (Result, error)
    Permission  Permission       // Allow | Ask | Deny
    Examples    []Example        // few-shot for the LLM
}

type Registry interface {
    Register(tool Tool) error
    Get(name string) (Tool, bool)
    List() []Tool
    Filter(policy Policy) []Tool
}

type Call struct {
    ID        string
    Name      string
    Arguments json.RawMessage
    Thought   string           // optional: chain-of-thought from the LLM
}

type Result struct {
    Content   string
    IsError   bool
    Metadata  map[string]string
    Artifacts []Artifact
}

type Permission int

const (
    Allow Permission = iota
    Ask
    Deny
)

Integrated sandbox

pkg/tools uses os.Root (Go 1.24+) for filesystem sandbox:

sandbox := tools.NewSandbox("./workspace")
sandbox.Register(myReadTool)  // can only read inside the workspace

See pkg/tools/sandbox/ for details.

Generic tools included

  • http_fetch — GET URL with HTML→markdown
  • json_parse — Parse arbitrary JSON
  • datetime_now — Current timestamp

Product-specific tools (e.g., read_file, bash for software dev) are defined by each consumer in their own internal/tools/.

See also