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 ⌘L (Ctrl L) — 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 |
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 | ⌘B or ⌘-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.
Alongside that:
- Several files open at once on a tab strip, with syntax highlighting across the usual languages.
- Find in Files (⌘⇧F) — every match grouped by file with a live peek at the surrounding code; Enter opens it at that line, cursor already placed.
- Quick open (⌘P, or double-tap ⇧) — 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. |
Reviewing the change
The diff view gives you the whole spectrum between “accept everything” and “do it yourself”:
- Read it unified or split.
- Accept or reject individual hunks — you don’t have to take a change wholesale to take the good half of it.
- Edit inline where it’s faster to fix than to explain. ⌘S saves; ↩ reverts a hunk.
- 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, Esc 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.
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.
The shortcuts:
| Action | Shortcut |
|---|---|
| Commit… | ⌘K |
| Push… | ⇧⌘K |
| Sync with remote | ⌘T |
| New branch… | ⌥⌘N |
Keyboard shortcuts
| Shortcut | Action |
|---|---|
| ⌘N | New task |
| ⌘P / ⇧⇧ | Quick open (files and text) |
| ⌘⇧F | Find in Files |
| ⌘B / ⌘-click | Go to definition |
| ⌘L | Send selection to chat |
| ⌘S | Save edits |
| ⌘K | Commit… |
| ⇧⌘K | Push… |
| ⌘T | Sync with remote |
| ⌥⌘N | New branch… |
| ⌘+ / ⌘- / ⌘0 | Text size up / down / reset |
| Esc | Close the palette or panel you’re in |
Replace ⌘ with Ctrl throughout — for example Ctrl ⇧ F for Find in Files and Ctrl L to send a selection to chat.
See also
- Git in Warpforge — the branch tree, context menus, and commit surface
- Tasks and backlog — where a task comes from and how it ends
- Choosing your mode — single agent, orchestrator, or pipeline
- Agent tools (MCP) — what the agent can reach for on its own side