kits

package
v0.2.4-alpha.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 22, 2026 License: MIT Imports: 8 Imported by: 0

Documentation

Overview

Package kits exposes pre-composed tool-name lists a downstream consumer can hand to agent.NewProfile without re-typing the canonical evva tool selections from scratch.

Every consumer that wanted a "general coding agent" used to assemble the same `append(fs.Names(), shell.Names()...)` chain by hand (see friday/internal/bootstrap/bootstrap.go for the historical example). Phase 19d collapses that chain into named functions so callers can pick the kit that matches their intent at a glance.

All kits are pure data — they return fresh slices, so callers can `append` more tool names without affecting other consumers. The kit authors maintain the canonical "what's in each kit" decision in one place; downstream copy-paste drift goes away.

  • GeneralPurposeKit — fs + shell + todo + util + tool_search active, web deferred. The friday baseline.
  • ReadOnlyKit — read + grep + glob + tree + web + json_query. Audit/explore agents.
  • CodingKit — GeneralPurpose + notebook + monitor. Heavier coding workflows.
  • ResearchKit — read + grep + glob + web + json_query + calc + todo. Web-research / fact-finding agents.

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func CodingKit

func CodingKit() (active, deferred []tools.ToolName)

CodingKit extends GeneralPurposeKit with notebook + monitor. Useful for agents that work on Jupyter notebooks or need background-process monitoring on top of the standard coding loop.

Returns the same shape as GeneralPurposeKit: (active, deferred).

func GeneralPurposeKit

func GeneralPurposeKit() (active, deferred []tools.ToolName)

GeneralPurposeKit returns the canonical evva general-purpose tool kit — equivalent to what evva's General subagent runs with:

active   = fs (read, write, edit, glob) + shell (bash, grep, tree)
         + todo (todo_write) + util (json_query, calc) + tool_search
deferred = web (web_search, web_fetch)

Pass the returned slices to agent.ProfileOptions / agent.NewProfile:

active, deferred := kits.GeneralPurposeKit()
prof, _ := agent.NewProfile("friday", systemPrompt, active,
    "deepseek", constant.DEEPSEEK_V4_PRO,
    agent.ProfileOptions{DeferredTools: deferred})
Example

ExampleGeneralPurposeKit shows the canonical "coding agent" tool composition. Pass the returned slices into agent.ProfileOptions instead of hand-assembling fs/shell/todo/util names by hand.

package main

import (
	"fmt"
	"sort"
	"strings"

	"github.com/johnny1110/evva/pkg/tools"
	"github.com/johnny1110/evva/pkg/tools/kits"
)

func main() {
	active, deferred := kits.GeneralPurposeKit()

	// Slice membership is the contract; the order is stable but doesn't
	// matter to callers — for the Output assertion below we sort + join.
	activeStr := stringify(active)
	deferredStr := stringify(deferred)

	fmt.Println("active:", activeStr)
	fmt.Println("deferred:", deferredStr)
}

// stringify returns the tool names as a sorted comma-joined string.
// Sorting is the trick that lets `// Output:` work against any
// underlying order — kit functions are free to evolve their internal
// composition order without breaking these examples.
func stringify(names []tools.ToolName) string {
	out := make([]string, len(names))
	for i, n := range names {
		out[i] = string(n)
	}
	sort.Strings(out)
	return strings.Join(out, ",")
}
Output:
active: bash,calc,edit,glob,grep,json_query,read,todo_write,tool_search,tree,write
deferred: web_fetch,web_search

func ReadOnlyKit

func ReadOnlyKit() []tools.ToolName

ReadOnlyKit returns a read-only tool list for audit / exploration agents: read, grep, glob, tree, web_search, web_fetch, json_query. No bash, no edit/write, no todo (todo_write mutates session state but doesn't touch the filesystem — kept out for purity; add it back manually if you want it).

Returned as a single slice (no deferred companion) because the kit is small enough to expose every tool eagerly.

Example

ExampleReadOnlyKit shows the audit/explore variant — no bash, no edit/write. Useful for agents that should investigate but never mutate the filesystem.

package main

import (
	"fmt"
	"sort"
	"strings"

	"github.com/johnny1110/evva/pkg/tools"
	"github.com/johnny1110/evva/pkg/tools/kits"
)

func main() {
	got := kits.ReadOnlyKit()
	fmt.Println("read-only:", stringify(got))
}

// stringify returns the tool names as a sorted comma-joined string.
// Sorting is the trick that lets `// Output:` work against any
// underlying order — kit functions are free to evolve their internal
// composition order without breaking these examples.
func stringify(names []tools.ToolName) string {
	out := make([]string, len(names))
	for i, n := range names {
		out[i] = string(n)
	}
	sort.Strings(out)
	return strings.Join(out, ",")
}
Output:
read-only: glob,grep,json_query,read,tree,web_fetch,web_search

func ResearchKit

func ResearchKit() []tools.ToolName

ResearchKit returns a research-flavoured tool list: read + grep + glob + todo + web (search + fetch) + json_query + calc. No bash, no edit/write — the agent investigates and summarises, but doesn't mutate the filesystem.

Returned as a single active slice; web tools are part of the active kit (not deferred) because the agent leans on them heavily.

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL