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.

Multi-turn agents

Hold job_id, candidate_job_id, and session_id in application state so a model never acts on an id it invented.

What to persist per conversation

An invented job_id gives a clean 404. A wrong candidate_job_id on a stage update silently writes to the wrong pipeline. Your tool layer resolves ids. The model never emits them from memory.

| Key | Set when | Used by |
| --- | --- | --- |
| `job_id` | A search result is shown or selected | Detail, keywords, documents, apply, tracking |
| `search_filters` | A search runs | Pagination, refinement |
| `next_cursor` | A search returns | The next page |
| `candidate_id`, `candidate_job_id` | A candidate is listed or opened | Stage updates, notes, interviews |
| `session_id` | Apply with AI starts | Polling, stop |
| Document blobs or ids | A resume or cover letter is generated | Attaching to an apply |

Store them per conversation with the last result set so "the second one" resolves deterministically.

Resolve by reference, not by recall

Give the model a numbered view of state and let it refer to entries by index.

{
  "results": [
    { "ref": 1, "title": "Senior Product Designer", "company": "Example Co" },
    { "ref": 2, "title": "Product Designer", "company": "Acme" }
  ]
}

The model calls your tool with { "ref": 2 } and your code substitutes the real job_id. If you expose raw ids, reject any id not in the conversation's stored result set.

Handling staleness

| Event | Do |
| --- | --- |
| A job closes mid-conversation (`closed_at` becomes non-null) | Re-read the job before apply |
| A candidate's stage changed in the UI | Read the profile before a stage-dependent write |
| A cursor ages | Re-run the search. Do not store cursors across sessions |
| An apply session ends | Poll to a terminal status, then clear `session_id` |