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 ¶
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 ¶
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 ¶
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 ¶
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.