---
title: "Working in a task"
description: "Getting context to the agent, reading the code it wrote, and turning it into a commit — without leaving the task."
---

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

# Working in a task

Most of the friction in agent-assisted work isn't the model. It's the shuttling: copying a file path into the prompt, pasting a diff into a chat, switching to an editor to see what a function does, writing the commit message afterwards.

A Warpforge task is built so none of that leaves the window.

## Getting context into the chat

You rarely want to *describe* what you mean. Point at it instead.

| To send… | Do this |
| --- | --- |
| **A file** | Type `@` and search by name — or drag a row from the file tree straight into the composer |
| **A changed file's diff** | **Send to chat** on the file's header in the diff view |
| **A specific piece of code** | Select the lines in the editor and press <kbd>⌘L</kbd> (<kbd>Ctrl L</kbd>) — the highlighted range goes over with its file and line numbers |
| **A screenshot or image** | Paste or drop it into the composer, on agents whose harness accepts images |

> **Why line ranges matter**
>
> "The validation in `auth.ts`" makes an agent go looking, and it might read the wrong function. A selection sent with its line numbers is unambiguous — and costs the agent no search.

The composer also takes `@` mentions ranked by relevance as you type, and slash commands where the harness provides them.

## Reading code, not just diffs

The editor inside a task is a real editor, not a diff viewer bolted to a file list. With a language server running it does what your IDE does:

| | |
| --- | --- |
| **Go to definition** | <kbd>⌘B</kbd> or <kbd>⌘</kbd>-click — jumps across files, not just within the one you're in |
| **Find references** | Everywhere a symbol is used |
| **Rename symbol** | Across the project, not a find-and-replace |
| **Hover docs** | Signatures and documentation without leaving the line |
| **Completions** | As you type, from the language server |
| **Diagnostics** | Errors and warnings inline, live |
| **Format** | On demand |

**Missing a language server is one click, not a research project.** Open a `.ts`, `.py`, or `.rs` file without its server installed and the editor shows an **Install** banner rather than silently degrading to plain highlighting. Warpforge ships install support for **TypeScript/JavaScript, Rust, Go, Python, JSON, CSS, HTML, and YAML** — each with its status in [Settings → Language servers](/reference/settings/#language-servers).

Alongside that:

- **Several files open at once** on a tab strip, with syntax highlighting across the usual languages.
- **Find in Files** (<kbd>⌘⇧F</kbd>) — every match grouped by file with a live peek at the surrounding code; <kbd>Enter</kbd> opens it at that line, cursor already placed.
- **Quick open** (<kbd>⌘P</kbd>, or double-tap <kbd>⇧</kbd>) — files by name, with matching source lines underneath them.
- **A real file tree** with native right-click: New File, New Folder, Rename, Delete. Deletes ask first.

Searches stay inside the project — build output and dependencies don't bury what you're looking for — and everything resolves against the **task's own worktree**, so what you edit is what the diff shows.

### Previewing what you're looking at

Not every file is best read as text, so the editor renders it instead. A **preview** toggle appears in the file's header wherever there's something to render:

| File | What you get |
| --- | --- |
| **Markdown** — `.md`, `.markdown`, `.mdx` | Rendered document, or the source. Toggle between them. |
| **HTML** — `.html`, `.htm` | The page, rendered and running — handy when an agent is building a prototype and you want to click it rather than read it. |
| **SVG** | The image, or its markup. Read-only either way. |
| **Images** — `.png`, `.jpg`, `.jpeg`, `.gif`, `.webp`, `.ico`, `.bmp` | Shown directly, no toggle needed. |

> **HTML previews are sandboxed**
>
> Scripts run, so an interactive prototype behaves like one. Everything else is denied: the frame keeps its own opaque origin and can't reach Warpforge's data, submit forms, open popups, or navigate the app. A page that needs a server behind it still wants a real [dev service](/guides/projects-and-runtime/).

## Reviewing the change

The diff view gives you the whole spectrum between "accept everything" and "do it yourself":

1. **Read** it unified or split.
2. **Accept or reject individual hunks** — you don't have to take a change wholesale to take the good half of it.
3. **Edit inline** where it's faster to fix than to explain. <kbd>⌘S</kbd> saves; <kbd>↩</kbd> reverts a hunk.
4. **Or send the file back to chat** with *Send to chat* and let the agent fix it, now that it can see exactly what you're looking at.

## Text you don't have to write

Four kinds of prose Warpforge drafts for you. In every case you're the editor, not the author — nothing is submitted on your behalf.

| What | Written from |
| --- | --- |
| **Task title** | The task's first prompt — a short imperative line, so tasks are legible on the board without you naming them |
| **Commit message** | The **actual diff**, in Conventional Commits form — not from the prompt, so it describes what changed rather than what was asked for |
| **PR title and body** | The branch's outgoing commits and their combined diff |
| **Enhanced task prompt** | A rough note you wrote — **Enhance** rewrites it into a structured, well-specified task |

**Enhance** is the one worth calling out: a backlog item you typed in five seconds ("fix the flaky login test, probably the timeout") becomes a properly scoped prompt before an agent ever sees it. Bad prompts are the most common cause of bad agent output, and this is the cheapest place to fix them.

## Small things that add up

None of these is a headline feature. Together they're most of what makes a task pleasant to sit in.

**The chat stays where you put it.** It follows the newest message while an agent replies, and stops following only when *you* actually scroll up — clicking a file link or expanding a work update doesn't count. Scroll back to the bottom and it starts following again on its own.

**Notifications you can answer without switching apps.** When an agent needs approval while Warpforge is in the background, the macOS notification carries **Approve**, **Reject**, and **Review** buttons that do exactly that — and says what it is asking for in plain language, so you can decide from the notification. They stay quiet while Warpforge is the window you're looking at.

**Fork a conversation into another harness.** Take a conversation up to any point and continue it with a different agent — it carries the context, the files touched, the worktree, *and your uncommitted work*. Useful when one model is stuck and you want another to pick up mid-thread rather than start over.

**Model picking that survives long lists.** The composer's model picker has a pinned search box — type to narrow hundreds of models, <kbd>Esc</kbd> to close. Short lists stay simple lists. Add a provider or model in the agent itself and Warpforge picks it up on restart, or immediately via the refresh button next to that agent in Settings, which also shows how many models it currently knows about.

**Archive or delete a task without opening it**, from the overflow menu on its sidebar row.

> **And the reason none of it stalls**
>
> Approving a tool call, sending a message, reading a diff, or pushing a branch all run **alongside** everything else. A slow push costs you the push — not your other tasks' replies and approvals.

## Git, in the task

Warpforge's git surface is closer to an IDE's than to a commit box: an IDE-style branch tree with local and remote branches, native right-click menus, rebase-onto without checking out first, and amend that prefills the message you're rewriting. It's covered on its own page — see **[Git in Warpforge](/guides/git-in-warpforge/)**.

The shortcuts:

| Action | Shortcut |
| --- | --- |
| Commit… | <kbd>⌘K</kbd> |
| Push… | <kbd>⇧⌘K</kbd> |
| Sync with remote | <kbd>⌘T</kbd> |
| New branch… | <kbd>⌥⌘N</kbd> |

## Keyboard shortcuts

### macOS

| Shortcut | Action |
| --- | --- |
| <kbd>⌘N</kbd> | New task |
| <kbd>⌘P</kbd> / <kbd>⇧⇧</kbd> | Quick open (files and text) |
| <kbd>⌘⇧F</kbd> | Find in Files |
| <kbd>⌘B</kbd> / <kbd>⌘</kbd>-click | Go to definition |
| <kbd>⌘L</kbd> | Send selection to chat |
| <kbd>⌘S</kbd> | Save edits |
| <kbd>⌘K</kbd> | Commit… |
| <kbd>⇧⌘K</kbd> | Push… |
| <kbd>⌘T</kbd> | Sync with remote |
| <kbd>⌥⌘N</kbd> | New branch… |
| <kbd>⌘+</kbd> / <kbd>⌘-</kbd> / <kbd>⌘0</kbd> | Text size up / down / reset |
| <kbd>Esc</kbd> | Close the palette or panel you're in |
### Windows / Linux

Replace <kbd>⌘</kbd> with <kbd>Ctrl</kbd> throughout — for example <kbd>Ctrl ⇧ F</kbd> for Find in Files and <kbd>Ctrl L</kbd> to send a selection to chat.

> **Caution**
>
> Windows and Linux packaging is an unvalidated preview — see [Install](/getting-started/install/).

## See also

- [Git in Warpforge](/guides/git-in-warpforge/) — the branch tree, context menus, and commit surface
- [Tasks and backlog](/guides/tasks-and-backlog/) — where a task comes from and how it ends
- [Choosing your mode](/guides/choosing-your-mode/) — single agent, orchestrator, or pipeline
- [Agent tools (MCP)](/reference/mcp-tools/) — what the agent can reach for on its own side

Source: https://warpforge.app/guides/working-in-a-task/index.mdx
