> ## Documentation Index
> Fetch the complete documentation index at: https://docs.engini.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Cookbook

> Complete, working agent apps and scripts built on the Engini SDK.

Every recipe is a self-contained script - the runnable originals live in [engini-sdk/python/examples](https://github.com/engini/engini-sdk/tree/main/python/examples) (PEP 723 scripts: `uv run <file>` installs their deps automatically).

<CardGroup cols={2}>
  <Card title="REST API walkthrough" icon="globe" href="/examples/rest-walkthrough">
    Zero to executed tool with nothing but cURL - discovery, an OAuth connection, execution.
  </Card>

  <Card title="CLI walkthrough" icon="terminal" href="/examples/cli-walkthrough">
    The same journey from the terminal - as a human, and as an agent using resumable gates.
  </Card>

  <Card title="monday.com assistant" icon="message-bot" href="/examples/monday-agent">
    The canonical agent loop: Claude answers questions about your boards through Engini tools. **Start here.**
  </Card>

  <Card title="Gmail agent with attachments" icon="paperclip" href="/examples/gmail-agent">
    The same loop plus file uploads - the model picks attachments by reference key, your code controls the bytes.
  </Card>

  <Card title="Priority ERP assistant" icon="warehouse" href="/examples/priority-erp-agent">
    The agent pattern pointed at an ERP - orders, invoices, customers, inventory.
  </Card>

  <Card title="Scripted automation (no LLM)" icon="clock" href="/examples/scripted-automation">
    The SDK as a plain typed API client - the shape of a cron job or data sync.
  </Card>
</CardGroup>

## The two integration paths

**High-level, with `Toolset`** - bind app → connection once, then two calls per turn:

```python theme={null}
ts = client.toolset(connections={"salesforce": conn_id})
tools   = ts.tools()                  # provider-shaped tool schemas
results = ts.handle_tool_calls(reply) # resolves connection + runs each call
```

**Low-level, without `Toolset`** - drive the pieces yourself (fetch schemas, wrap, parse calls, execute, format results) - see the pattern in [LLM providers](/sdk/llm-providers). Or skip the LLM entirely and just call `client.tools.execute(...)` ([scripted automation](/examples/scripted-automation)).
