Loading…
Loading…
Features · Build · Tools
A tool is a name, a description, a JSON Schema for its arguments and a function that runs. There are three ways to write one; all three work with every model.
from shipit_agent import Agentfrom shipit_agent.llms import build_llm_from_envfrom shipit_agent.tools import FunctionTooldef find_customer(email: str) -> str: """Look up a customer by email and return their plan and signup date.""" return f"{email}: Pro plan since 2025-03-14"
Your function
docstring and type hints
FunctionTool
builds the schema
Model
decides to call it
Result
back into the loop
The code is a checked example from the docs; the output is an example of what it prints.
from shipit_agent import Agent
from shipit_agent.llms import build_llm_from_env
from shipit_agent.tools import FunctionTool
def find_customer(email: str) -> str:
"""Look up a customer by email and return their plan and signup date."""
return f"{email}: Pro plan since 2025-03-14"
agent = Agent(
llm=build_llm_from_env(),
tools=[FunctionTool.from_callable(find_customer, read_only=True)],
)6 more ways to use it
Each example is from the docs and checked against the library.
The simplest. The function's name, docstring and type hints become the tool.
from shipit_agent import Agent
from shipit_agent.llms import build_llm_from_env
from shipit_agent.tools import FunctionTool
def find_customer(email: str) -> str:
"""Look up a customer by email and return their plan and signup date."""
return f"{email}: Pro plan since 2025-03-14"
agent = Agent(
llm=build_llm_from_env(),
tools=[FunctionTool.from_callable(find_customer, read_only=True)],
)All 66 built-in tools
Everything Agent.with_builtins() can attach. Read-only tools run without asking; the rest pass the permission gate first.
66 of 66 tools
read_fileread-onlyRead a file from the local project. Text files return line-numbered content; Word/Excel/PowerPoint/HTML/CSV documents are extracted to clean Markdown; images and PDFs return as viewable media.
Files and code
write_filechanges thingsCreate or overwrite a file in the local project.
Files and code
edit_filechanges thingsApply an exact string replacement patch to an existing file.
Files and code
multi_editchanges thingsApply several exact string-replacement edits to ONE file atomically. Edits apply in order to the same file; if any old_text is missing or ambiguous, nothing is written.
Files and code
notebook_editchanges thingsRead, edit, add, or delete cells in a Jupyter notebook (.ipynb).
Files and code
glob_filesread-onlyFind files in the local project by glob pattern.
Files and code
grep_filesread-onlySearch file contents in the local project using ripgrep when available.
Files and code
bashchanges thingsRun a shell command in the project root: tests, builds, git, package managers, scripts. Risky commands (deleting, publishing, writing outside the project) need approval.
Files and code
bash_jobchanges thingsRead output from, or kill, a background command started by the bash tool. Pass the job_id the bash tool returned.
Files and code
run_codechanges thingsExecute Python or shell code in a local subprocess workspace.
Files and code
git_opschanges thingsStructured git operations: status, diff, log, show, blame, branch, add, commit, checkout, stash (push/reset are disabled by default).
Files and code
workspace_filesread-onlyRead, write, list, and inspect files in the local shipit workspace.
Files and code
download_filechanges thingsDownload a file (binary-safe: zip, csv, image, pdf, …) from an http(s) URL to local disk.
Files and code
present_filechanges thingsPresent a file you created or have (image, audio, video, PDF, document, spreadsheet, data) to the user as a downloadable, previewable deliverable. Use after you generate or save a file the user should receive — pass the path. This does not create the file; the file must already exist.
Files and code
pdfread-onlyExtract text, per-page content, or metadata from a PDF file (local or URL).
Files and code
web_searchread-onlySearch the web and return structured search results.
The web
open_urlread-onlyFetch a URL and return a clean text excerpt.
The web
playwright_browsechanges thingsUse Playwright to open a page and return the rendered text content.
The web
deep_researchread-onlyDeep multi-angle research: several search queries, deduped sources, top pages fetched — returns a structured digest with citations.
The web
todochanges thingsMaintain a live, replace-on-write checklist of tasks for a multi-step job so progress is observable. Pass the full updated list each call; mark exactly one item in_progress and flip items to completed as you finish them.
Planning and checking
plan_taskread-onlyGenerate a concrete execution plan with ordered steps, risks, and checkpoints.
Planning and checking
present_planread-onlySubmit your plan for approval and stop. Call this once, in plan mode, when you have finished researching and are ready to act — the plan is shown to the user, who approves it (letting you execute) or asks for changes. Do not act before it is approved.
Planning and checking
decompose_problemread-onlyBreak a problem into workstreams, assumptions, risks, evidence needs, and next actions.
Planning and checking
decision_matrixread-onlyCompare options against explicit criteria and recommend the strongest choice.
Planning and checking
synthesize_evidenceread-onlyTurn raw observations into facts, inferences, gaps, and recommendations.
Planning and checking
verify_outputread-onlyCheck whether content satisfies a set of required criteria.
Planning and checking
build_promptread-onlyBuild or refine a system prompt from goals, constraints, and style instructions.
Planning and checking
give_upread-onlyDeclare that you cannot complete the task, with a specific reason. Use only when genuinely blocked, not when the work is merely hard.
Planning and checking
ask_userread-onlyRequest structured user input as part of a human-in-the-loop flow.
People
ask_user_asyncread-onlyPause an Autopilot run to ask the user a clarifying question — non-blocking; the run halts into awaiting_user and resumes once the user answers via `shipit answer <run_id> "..."`.
People
human_reviewread-onlyPause for human review and approval before continuing.
People
sub_agentchanges thingsDelegate a focused task to a sub-agent with its own context and tools. Use for searches that would flood your context, or for independent work you can run in parallel.
Agents and tools
task_stopchanges thingsStop a background task (a command or a sub-agent) by its task id.
Agents and tools
tool_searchread-onlySearch the current agent's available tools and return a ranked shortlist of the best matches for a task. Use this when many tools are available and no loaded tool fits. Call an already loaded matching tool directly instead of searching again.
Agents and tools
memorychanges thingsStore and retrieve structured memory facts for the current agent.
Memory
visionread-onlySend an image (file path, URL, data URL, or base64) to a vision-capable LLM and return a textual analysis.
Media
image_generatechanges thingsGenerate an image from a text description. Returns the image so you can see it and the user can view it. Use for illustrations, diagrams, mockups, icons — not for editing an existing file.
Media
text_to_speechchanges thingsConvert text to spoken audio. Saves an audio file and returns its path so a chat surface can play it. Use for a spoken summary or voice reply.
Media
video_generatechanges thingsGenerate a short video clip from a text description. Saves an MP4 and returns its path so a chat surface can play it. Use for b-roll, product shots, animations, concept scenes — not for editing existing footage.
Media
build_artifactchanges thingsCreate a deliverable (report, page, code, diagram, data) with a stable id, then update or rewrite it; every change is saved as a new version.
Documents and apps
build_documentchanges thingsCreate a polished PDF report, Excel workbook, Word document, PowerPoint deck, or styled HTML page from structured content.
Documents and apps
render_dashboardchanges thingsRender a rich HTML dashboard (metrics, timeline, bars, cards, phases, chart, verdict) from a structured spec.
Documents and apps
create_appchanges thingsCreate an app: a small program saved in the workspace that can be run again later with use_app. Start from a blueprint or supply app.py.
Documents and apps
use_appchanges thingsRun an app with input and get its result. Use this instead of redoing work the app already encodes.
Documents and apps
list_blueprintsread-onlyList the app blueprints available to start a new app from.
Documents and apps
set_app_bindingchanges thingsWire one of your resource bindings into an app, so the app can use it. An app only ever sees what you wire into it.
Documents and apps
describe_bindingread-onlyReturn the methods and parameters of one binding in `env`. Call this before using a binding for the first time.
Documents and apps
githubchanges thingsWork with GitHub issues, pull requests, file contents, and Actions workflow runs via the REST API.
Services
gitlabchanges thingsSearch GitLab issues, manage merge requests, read files, and control CI pipelines.
Services
jirachanges thingsSearch Jira issues and create Jira issues.
Services
linearchanges thingsSearch Linear issues and create Linear issues.
Services
notionchanges thingsSearch Notion pages and create Notion pages.
Services
confluencechanges thingsSearch and create Confluence pages.
Services
slackchanges thingsSearch Slack messages and post Slack messages.
Services
gmail_searchread-onlySearch, read, draft, and send Gmail messages from a configured Google account.
Services
google_calendarchanges thingsSearch and list Google Calendar events.
Services
google_drivechanges thingsSearch and list Google Drive files.
Services
google_sheetschanges thingsRead / write Google Sheets cells, ranges, formulas, and sheet structure.
Services
figmachanges thingsRead Figma files, render node images, browse and post comments, and introspect team projects / components via the Figma REST API.
Services
salesforcechanges thingsSearch Salesforce records; query SOQL/SOSL; read accounts/opportunities/contacts; log activities.
Services
stripechanges thingsRead-heavy Stripe data: customers, charges, subscriptions, invoices, products. Writes gated by allow_writes.
Services
zendeskchanges thingsSearch / read / comment on Zendesk tickets and users; list and preview macros.
Services
linkedin_searchread-onlyRead-only LinkedIn lookup: profiles, companies, employee search. NO messaging, connection requests, or automation — this tool is intentionally read-only to keep agents compliant with LinkedIn ToS.
Services
sqlchanges thingsQuery a SQL database. Reads by default; set allow_writes=True to enable mutations.
Services
custom_apichanges thingsCall a configured custom HTTP API.
Services
connectionsread-onlyList which external services are connected and which need authenticating, or request a connection you need.
Services
From a function
The name, docstring and type hints become the tool.
As a class
A class with a schema and run() when you need more control.
Results and errors
Return text or rich output; a raised error goes back to the model to recover from.
66 built in
Agent.with_builtins() attaches files, shell, web, planning, documents and more.
| Parameter | Default | What it does |
|---|---|---|
| tools | empty | The tools the agent may call. |
| deferred_tools | 'auto' | Default "auto": above ten tools, keep nine core capabilities and a discovery tool. discovery_priority on a tool overrides core ranking; ties follow registration order. |
| parallel_tool_execution | True | Run a response's tool calls concurrently when every one is read-only. Writes and unknown tools always run one at a time, in order. |
| max_tool_concurrency | None | None means no cap; otherwise bound concurrent local tool calls per turn. |
| heal_tool_calls | True | Promote tool calls that small models emit as TEXT (<tool_call> tags, fenced JSON, bare call-shaped JSON) into structured calls. Response- side only; only declared tool names qualify. |
| max_tool_output_chars | 16000 | Bound only the model-visible copy; AgentResult keeps complete tool output. Capped by default: a message list is cumulative, so one 138,000-character tool result is not paid once — it is re-sent on every turn that follows it. |