Every message you send kicks off a request that bundles your active skills, all available tools, and your conversation history — the LLM uses that to decide what to say and which tools to call. Skills and tools work together but do different jobs: tools give the AI capability, while skills give it judgment about when and why to use it.
How the AI works
Your message
API Request
system All active skills concatenated into one cached block
tools 39 tool definitions — name, description, schema
messages Conversation history
LLM Decides
Skills tell it when and why to act
Tool descriptions tell it how
→ Text response shown to you
→ Tool calls executed by the app
Tool Execution
Read tools → auto-executed
Mutation tools → you approve/reject
Results sent back to LLM · Loop continues until done
Tools vs Skills
| Tool | Skill |
What | A function the AI can call | Markdown instructions in the system prompt |
Gives the AI | Capability — "here is a function and its parameters" | Judgment — "when to use it, why, and what to watch out for" |
Defined in | Code (tools.ts) — wrappers around Giraffe SDK RPC functions. If a tool isn't available in the core set, the AI can call any Giraffe SDK function directly via invoke_rpc / get_state, and look up docs first via fetch_docs. | Markdown (.md files) — editable in Settings. Create your own or modify the built-in core skills. |
Togglable | No — all tools are always sent | Yes — toggle off to remove from prompt and save tokens |
Example | updateUsages({ usages: {...} }) | "Only call updateUsages when user says 'assumptions'. For buildings, use updateSections." |
Available tools
Tools are functions the AI can call. It reads the tool name and description to decide which one to use. Skills provide the behavioral guidance for when and why.