Coding agent documentation index Fetch the complete documentation index at: https://docs.worklittle.com/docs-agent-manifest.json Use this file to discover all available pages before exploring further.

Overview

Where the tool boundary belongs when a model drives the Worklittle API, and which actions your code must gate.

The shape that works

1. Narrow tool surface. Expose the four or five tools the task needs. A job search copilot needs search_jobs, get_job_details, get_job_keywords, and a document tool. 2. Deterministic guards on metered or irreversible actions. Apply, send email, and share documents go behind confirmation or a server-side policy check. 3. IDs in application state. The model quotes ids it received and never reconstructs them. See Multi-turn agents. 4. Enforced grounding. A field absent from the response is "not listed". See Grounding. 5. A budget. See Retries and spend.

Where to draw the tool boundary

| Action | Model decides | Your code decides |
| --- | --- | --- |
| Which filters to search with | Yes | Cap `limit` |
| Whether to fetch details | Yes | Cap fetches per turn |
| Whether to generate a resume | Yes | Nothing |
| Whether to submit an application | Propose only | Confirm, then submit |
| Whether to move a candidate stage | Yes, by tool call | Verify the write succeeded |
| Whether to send email | Propose only | Confirm, then send |

Models may choose reads that are cheap and reversible. Anything that spends money, contacts a person, or changes another party's record is proposed by the model and committed by your code.

Reads, writes, and irreversibility

| Tier | Examples | Policy |
| --- | --- | --- |
| Free reads | `GET /jobs/stats`, `list_applied_jobs`, `list_candidates`, board GETs | Call freely. Retry on failure |
| Metered reads | Document generation, first-time AI job descriptions past the free allowance | Budget per turn. Cache within the conversation |
| Side-effecting writes | Apply, Apply with AI start, `send_email`, candidate updates, document shares | Gate and log. Make retries idempotent at your layer |