Run agents in separate worktrees
Run Sawyer alongside Claude, Codex, Pi, and opencode. Each agent can use its own branch and worktree. Arrange agents in split panes, move tabs, and preserve a layout for each branch.
A workspace for parallel coding agents
Lattis was built by a team of software engineers that wanted more visibility and control of the work their agents did. This led to the creation of a sort of IDE where the primary surface is a coding agent instead of a text editor, and optimizing for information exchange and the management of human attention. There is no single feature that differentiates Lattis, instead it is the unique blend of features and focus on developer experience that sets it apart.
macOS · Linux · Windows
Why Lattis
Lattis provides status, branch, review, and cost information for multiple agents in one workspace. This lets you identify blocked agents and pending reviews without switching between tools.
Run Sawyer alongside Claude, Codex, Pi, and opencode. Each agent can use its own branch and worktree. Arrange agents in split panes, move tabs, and preserve a layout for each branch.
Each agent has a status indicator: green for working, amber for waiting on you, and red for an error. Use the branch list to identify agents that need attention.
Each branch displays its pull-request state and CI checks, including whether it is ready, awaiting review, or blocked. Open, mark ready, merge, push, and pull from the app.
The Review layout presents the branch as one diff against its merge base, with code before lockfiles. Mark files as viewed, comment on specific lines, and identify files changed since your last pass.
Assist runs a read-only agent pass over the branch and groups findings by correctness, design, compatibility, CI, tests, and documentation. Findings include a severity and line reference where available. Accepted findings become draft comments. Nothing is posted until you approve it.
Pull requests assigned to you for review appear in the sidebar, ordered by age. Open one to check out the branch and read it. The temporary checkout can be cleaned up after you post a review.
The web app can connect to a running Lattis desktop. Check branches, start an agent or terminal, attach to a session, type in the browser terminal, and push or open a pull request. The work still runs on your machine. The web app does not host agents for you.
Lattis reports usage and cost by project, model, and conversation. For supported providers, view costs while an agent is running. Local-model costs may not be available.
Connect supported providers, or run a model on your own hardware, then expose them through one endpoint. Configure routing and failover across accounts and providers. Lattis does not add a per-token markup.
Read-only actions can proceed without approval. Actions that Lattis classifies as changing the repository or machine require approval. Approved grants can remain active for the session.
Agent status
The sidebar shows status for each agent and branch, including running, CI-blocked, ready-to-merge, and waiting states. Use it to identify which items may need attention.
How the lights work →Agent status
Pull request & CI
Pull requests and CI
After an agent pushes a branch, view its pull request, CI results, diff, and available usage data in the workspace. From there, you can merge or request a review from the app. Lattis can suggest reviewers based on repository history.
› Split the tender logic into its own module and add tests.
⏺ Read src/checkout/tender.rs
⏺ Edit src/checkout/tender.rs +84 −12
⏺ git git.status
cargo test — 24 passed, 0 failed
✓ Done. Opened PR #214 and pushed.
▍
All checks passed · 1 review required
Uncommitted (2) +18 −2
M tender.rs src/checkout +14 −2
A tender_test.rs src/checkout +4 −0
Committed (5) +402 −34
Code review
Reviews assigned to you appear in the sidebar. Open a branch as a single diff, add line comments, optionally run an automated first pass, and post the review to GitHub.
Core changes
✓ tender.rs +184 −22
gateway.rs +96 −4
! mod.rs +12 −0
Tests
tender_test.rs +108 −0
141 let total = items.iter().map(|i| i.cents).sum();
142 let split = total / parties;
142 let split = total.checked_div(parties)
143 .ok_or(TenderError::NoParties)?;
144 Ok(Split { split, remainder })
issue you
`checked_div` returns `None` on zero, but the remainder is still computed from the old total. Carry it through.
One diff against the merge base, with code before lockfiles. Files you've read stay marked, and a mark becomes stale when that file changes. Return later and identify files that changed after your previous pass.
Click any line to leave an issue, a question, a nit, or some praise. Threads stay local until you finish — then approve, request changes, or just post comments, and each thread lands on the line it describes, pinned to the revision you actually read.
Assist analyzes the branch without shell access and groups findings by review category, severity, and line reference where available. You triage the findings, and accepted ones become draft comments. Findings remain drafts until you review and post them.
Auto Fix can pass the open review threads to an agent as a numbered task.
Usage cost
Lattis reports usage and cost information for supported providers. For supported cloud providers, it attributes requests and reports cost by project, model, and conversation. Lattis does not charge for local model requests.
The Lattis web app can aggregate available spend and activity data from connected desktop apps, including sessions and organization-level reporting.
Cloud and local providers
Point agents at a single endpoint and route requests to configured cloud or local providers. Set a provider priority order and configure failover to another account or provider when a request errors.
Connect a provider →Setup
Download and open the desktop app. Configure a local provider if you want to run models on your own hardware.
Select a Git repository and configure the providers or models your agents will use.
Start an agent in a fresh worktree. Create additional worktrees as needed; each agent works in its own checkout.
Address agents waiting for input, review the branch, request a review, and merge from the app where those integrations are configured.