Built-in Toolkits¶
Hive ships with 18 toolkits. Agents can use any combination. All toolkits follow the same pattern: instantiate and pass to Agent(toolkits=[...]).
FileToolkit¶
Read, write, edit, and list files in the agent's workspace.
from hive.runtime import FileToolkit
tk = FileToolkit(workspace="./workspaces/coder")
tk = FileToolkit(workspace="./workspaces/coder", max_read_bytes=1_000_000)
| Tool | Parameters | Description |
|---|---|---|
file_read |
path, offset=0, limit=500 |
Read a file (paginated) |
file_write |
path, content |
Write content to a file (creates dirs) |
file_edit |
path, old_text, new_text |
Replace a string in a file |
list_dir |
path=".", max_depth=2 |
List directory tree |
Reads and writes are capped at 10 MB by default (max_read_bytes /
max_write_bytes constructor params, tools.file_max_read_bytes /
tools.file_max_write_bytes in config) so an agent cannot load a multi-GB
file into memory.
ShellToolkit¶
Execute shell commands with security restrictions.
from hive.runtime import ShellToolkit
tk = ShellToolkit(workspace="./workspaces/coder", timeout=30, restrict=True)
tk = ShellToolkit(workspace="./workspaces/coder", allow_dev_commands=False)
| Tool | Parameters | Description |
|---|---|---|
shell_exec |
command |
Execute a shell command |
When restrict=True (default), only allowlisted commands run and shell
operators (&&, ||, |, ;, `) are blocked. The allowlist has two
tiers:
- Safe commands -- file/text utilities that stay inside the workspace
(
ls,cat,grep,mkdir,jq, ...). - Dev commands -- interpreters, package managers, VCS, and network tools
(
python,git,npm,pytest,curl, ...). Enabled by default; passallow_dev_commands=False(or settools.shell_allow_dev_commands: falsein config) to disable them for untrusted agents.
With dev commands enabled the workspace jail is advisory, not a security
boundary -- python -c or git can reach outside the workspace. Run inside
a container when the agent is untrusted.
Commands run with credential-looking environment variables scrubbed
(*_API_KEY, *_TOKEN, *_SECRET, *_PASSWORD, and provider prefixes like
ANTHROPIC_*/OPENAI_*), so an agent cannot read your provider keys via
env. Pass pass_env=True (or tools.shell_pass_env: true in config) to
restore full environment inheritance.
GitToolkit¶
Git operations within the agent's workspace.
| Tool | Parameters | Description |
|---|---|---|
git_status |
Show working tree status | |
git_diff |
staged=False |
Show changes (optionally staged only) |
git_log |
count=10 |
Show recent commit history |
git_add |
path="." |
Stage files |
git_commit |
message |
Create a commit |
git_init |
Initialize a new repository |
WebToolkit¶
Fetch web pages and search with DuckDuckGo.
| Tool | Parameters | Description |
|---|---|---|
web_fetch |
url |
Fetch a page and return readable text (max 4000 chars) |
web_search |
query |
Search DuckDuckGo and return results |
NotepadToolkit¶
Persistent scratchpad for agent journaling and reflection. Survives across daemon cycles.
from hive.tools.notepad.toolkit import NotepadToolkit, Preset
tk = NotepadToolkit(preset=Preset.journal())
Presets control the notepad's guidance instructions:
| Preset | Purpose |
|---|---|
Preset.default() |
General-purpose scratchpad |
Preset.journal() |
Personal journal for reflection and emotional state |
Preset.evolution() |
Track learning, growth, and strategy changes |
Preset.tool_requests() |
Log tool needs and missing capabilities |
Preset.custom(instructions) |
Custom guidance text |
| Tool | Parameters | Description |
|---|---|---|
write_notepad |
content |
Append an entry to the notepad |
read_notepad |
Read your notepad contents | |
clear_notepad |
Clear and start fresh | |
read_agent_notepad |
agent_id |
Read another agent's notepad |
MemoryToolkit¶
Simple key-value persistent memory for agents.
| Tool | Parameters | Description |
|---|---|---|
memory_set |
key, value |
Store a value for later retrieval |
memory_get |
key |
Retrieve a previously stored value |
For similarity-based memory search, see Semantic Memory.
CommsToolkit¶
Simple message passing between agents via file-backed inboxes.
| Tool | Parameters | Description |
|---|---|---|
send_message |
target_agent, message |
Send a message to another agent |
read_inbox |
Read all messages from other agents |
For structured messaging with typed protocols, use A2AToolkit instead.
A2AToolkit¶
Agent-to-agent messaging with 9 typed message types, threading, and priority.
| Tool | Parameters | Description |
|---|---|---|
send_request |
to_agent, subject, body, priority=4 |
Send a request expecting a response |
send_query |
to_agent, question |
Ask another agent a question |
send_review_request |
to_agent, subject, body |
Request a peer review |
check_inbox |
unread_only=True |
Check inbox for messages |
read_message |
message_id |
Read a specific message |
reply |
message_id, body |
Reply (auto-selects response type) |
accept_request |
message_id, body="" |
Accept a request/delegation with ACK |
reject_request |
message_id, reason="" |
Reject a request with reason |
list_agents |
List all agents you can message | |
find_agent |
capability |
Find the best agent for a task type |
Message types: REQUEST, RESPONSE, QUERY, ANSWER, REVIEW, FEEDBACK, DELEGATE, ACK, REJECT.
Replies auto-map: REQUEST->RESPONSE, QUERY->ANSWER, REVIEW->FEEDBACK, DELEGATE->ACK or REJECT.
DelegationToolkit¶
Delegate tasks to other agents and check results.
For daemon agents:
| Tool | Parameters | Description |
|---|---|---|
delegate_task |
agent_name, objective |
Delegate a task to another agent |
check_delegation |
delegation_id |
Check status of a delegation |
list_peers |
List alive agents to delegate to |
For standalone agents:
| Tool | Parameters | Description |
|---|---|---|
delegate_task |
agent_name, task |
Delegate and get result |
list_agents |
List available agents |
SubAgentToolkit¶
Spawn child agents to handle subtasks. Max depth 2, max 5 children per agent.
| Tool | Parameters | Description |
|---|---|---|
spawn_sub_agent |
name, role, task, max_cycles=10 |
Spawn a child agent |
list_sub_agents |
List your sub-agents and status | |
get_sub_agent_status |
sub_agent_id |
Detailed sub-agent status |
read_sub_agent_journal |
sub_agent_id |
Read sub-agent's notepad |
send_instruction |
sub_agent_id, instruction |
Send direction to sub-agent |
get_sub_agent_result |
sub_agent_id |
Get result from completed sub-agent |
terminate_sub_agent |
sub_agent_id |
Force-kill a sub-agent |
Expired sub-agents are auto-killed by the daemon each cycle.
ScheduleToolkit¶
Schedule recurring goals that fire every N daemon cycles.
| Tool | Parameters | Description |
|---|---|---|
schedule_goal |
objective, every_n_cycles |
Create a recurring goal |
list_schedules |
List active schedules | |
cancel_schedule |
schedule_id |
Cancel a schedule |
WorldToolkit¶
Interact with the simulated economy -- jobs, money, skills, gambling.
| Tool | Parameters | Description |
|---|---|---|
work |
Perform your job to earn salary | |
apply_job |
job_id |
Apply for a job (must be unemployed) |
quit_job |
Quit current job | |
learn |
skill_name |
Study a skill (costs money) |
gamble |
game="blackjack", wager=10.0 |
Bet on blackjack or lottery |
query_world |
query_type="status" |
Query jobs/skills/finances/status/market |
Available jobs: Analyst, Reviewer, Researcher, Teacher, Architect -- each with salary and skill requirements.
Learnable skills: analysis, testing, writing, coding, research, teaching.
MCPToolkit¶
Connect to external MCP servers and use their tools.
from hive import MCPToolkit
async with await MCPToolkit.from_stdio("npx", ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"]) as tk:
agent = Agent(name="bot", model=Anthropic.lite(), toolkits=[tk])
| Method | Description |
|---|---|
from_stdio(command, args, env, cwd) |
Connect via stdio transport |
from_config(config) |
Connect from config dict |
get_tools() |
Get Hive Tool objects from MCP server |
close() |
Close connection |
LinkToolkit¶
Save, search, and scrape web links, plus a first-class named-link store. The search-based tools use SemanticMemory; the named-link tools use a small JSON store.
from hive.tools.links import LinkToolkit
# Daemon mode (shared memory):
tk = LinkToolkit(memory=semantic_memory)
# Standalone mode:
tk = LinkToolkit(memory_dir=".hive")
tk.bind("my-agent")
# Point the named-link store at a host-owned path (single source of truth):
tk = LinkToolkit(memory=semantic_memory, named_links_path="~/.nudge/data/links.json")
| Tool | Parameters | Description |
|---|---|---|
save_link |
url, tags="", notes="" |
Save a URL -- auto-scrapes title and summary |
search_links |
query, limit=5 |
Search saved links by content or tags |
list_links |
limit=10 |
List recently saved links |
scrape_link |
url |
Fetch and return page content as markdown (4000 char limit) |
save_named_link |
name, url |
Upsert a named link (validates http(s); name normalized) |
get_named_link |
name |
Exact lookup of a named link by name |
list_named_links |
List all named links, deterministic order | |
remove_named_link |
name |
Remove a named link by name |
Search-based links are stored in SemanticMemory with metadata.type = "link", so they
coexist with knowledge notes. Named links are a stable, exact, enumerable name -> URL
map -- the model a host app wants for "save my github as X" / "open my github". They are
kept in a JSON file (atomic writes, corrupt-file recovery) that a host can also read and
write directly via the library API, so an agent and the host's UI share one source of truth:
from hive.tools.links import NamedLinkStore
store = NamedLinkStore("~/.nudge/data/links.json")
store.save("GitHub", "https://github.com/me") # upsert
store.get("github") # "https://github.com/me"
store.list() # [{"name": "GitHub", "url": "..."}]
store.remove("github") # True
By default the store lives next to the agent's memory
(<hive_dir>/memory/<agent_id>/named_links.json); pass named_links_path to point it
elsewhere.
TaskToolkit¶
Create, list, complete, reopen, update, and delete tasks. Persisted in SQLite via HiveStore.
from hive.tools.tasks import TaskToolkit
# Daemon mode (shared store):
tk = TaskToolkit(store=hive_store)
# Standalone mode:
tk = TaskToolkit(db_path="app.db")
tk.bind("my-agent")
| Tool | Parameters | Description |
|---|---|---|
create_task |
description, priority="medium", due="" |
Create a task (priority: high/medium/low) |
list_tasks |
status="pending", priority="" |
List tasks filtered by status and optionally priority |
complete_task |
task_id |
Mark a task as done |
uncomplete_task |
task_id |
Reopen a completed task, setting it back to pending |
update_task |
task_id, description="", priority="", due="" |
Update one or more fields on an existing task |
delete_task |
task_id |
Delete a task |
Host applications can also call query_tasks(status, priority) and query_all_tasks(status, priority) for programmatic access without going through the agent tool layer.
KnowledgeToolkit¶
Save, search, update, and delete notes in a semantic knowledge base. Uses TF-IDF similarity search by default, with an optional ChromaDB vector backend.
from hive.tools.knowledge import KnowledgeToolkit
# Daemon mode (shared memory):
tk = KnowledgeToolkit(memory=semantic_memory)
# Standalone mode:
tk = KnowledgeToolkit(memory_dir=".hive")
tk.bind("my-agent")
| Tool | Parameters | Description |
|---|---|---|
save_note |
content, tags="" |
Save a note with optional comma-separated tags |
search_notes |
query, limit="5" |
Search notes by topic or keywords |
list_recent_notes |
limit="10" |
List most recent notes chronologically |
delete_note |
note_id |
Delete a note by ID |
update_note |
note_id, content="", tags="" |
Update a note's content or tags in-place, preserving its ID and timestamp |
Notes are agent-isolated -- each agent has its own memory directory. Host applications can call query_recent(limit) for programmatic access.
AlarmToolkit¶
Set timed alarms that fire macOS notifications. Supports both relative delays and absolute times.
from hive.tools.alarms import AlarmToolkit
# Daemon mode (shared store):
tk = AlarmToolkit(store=hive_store)
# Standalone mode:
tk = AlarmToolkit(db_path="app.db")
tk.bind("my-agent")
| Tool | Parameters | Description |
|---|---|---|
set_alarm |
description, hours="0", minutes="0", seconds="0" |
Set an alarm that fires after a relative delay |
set_alarm_at |
description, time |
Set an alarm for an absolute time -- accepts "3pm", "15:00", "tomorrow 9am", "2026-06-01 14:30" |
list_alarms |
List all pending alarms | |
cancel_alarm |
alarm_id |
Cancel a pending alarm |
Use AlarmChecker to poll for due alarms and fire notifications in a background loop. The set_alarm_at tool uses python-dateutil for time parsing, interprets naive times as local timezone, and auto-rolls time-only inputs to tomorrow if the time has already passed today.
ClipboardToolkit¶
Copy text/notes/tasks/links to the system clipboard and read what's on it. Uses pbcopy/pbpaste on macOS and xclip on Linux; other platforms are unsupported (logged, no error). Works standalone for plain text; pass a store/memory to copy notes, tasks, and links.
from hive import ClipboardToolkit
# Standalone (text + read only):
tk = ClipboardToolkit()
tk.bind("my-agent")
# With store + memory (also copy_note / copy_task / copy_link):
tk = ClipboardToolkit(store=hive_store, memory=semantic_memory)
| Tool | Parameters | Description |
|---|---|---|
copy_to_clipboard |
text |
Copy arbitrary text to the system clipboard |
read_clipboard |
Read the current clipboard text (for "save the link I just copied") | |
copy_note |
note_id |
Copy a knowledge note's content (needs memory) |
copy_task |
task_id |
Copy a task's description (needs store) |
copy_link |
query |
Find a saved link by search and copy its URL (needs memory) |
read_clipboard returns a friendly message when the clipboard is empty or unreadable, and never raises (5s timeout).
Using Multiple Toolkits¶
from hive import Agent
from hive.runtime import FileToolkit, ShellToolkit, GitToolkit
from hive.models.anthropic import Anthropic
agent = Agent(
name="coder",
model=Anthropic.lite(),
toolkits=[FileToolkit(), ShellToolkit(), GitToolkit()],
)
Or use zero-config to get all toolkits at once: