Skip to content
Agents

A main agent per branch,
and side agents next to it.

Each workspace keeps one conversation that does the work. Questions, reviews and small fixes go to side agents that start from the right amount of context and hand back what they found.

myproject
feat-login
dev23%5h74%wk
WORKSPACES
main
Login page2
feat-loginChecks pending2 running
Checkout flow1
PROJ-101In ReviewCI failed3
Search filters
PROJ-104In Progress
sessions_controller.rb
1class SessionsController < ApplicationController
2 MAX_ATTEMPTS = 5
3
4 def create
5 user = User.find_by(email: params[:email])
6
7 if throttled?(params[:email])
8 return render json: { error: "too many attempts" }, status: :too_many_requests
9 end
10
11 if user&.authenticate(params[:password])
12 session[:user_id] = user.id
13 redirect_to dashboard_path
14 else
15 render :new, status: :unprocessable_entity
16 end
17 end
18
19 private
20
21 def throttled?(email)
22 key = "login:#{email}"
23 Rails.cache.increment(key, 1, expires_in: 1.minute) > MAX_ATTEMPTS
24 end
25end
Main
Ask: sessions_controller.rb
Askread-onlyAuto: fork - 9.3kSend to main
> Why does the login throttle use Rails.cache and not the database?
* Read app/controllers/sessions_controller.rb
* Read config/environments/development.rb
The counter only has to live for a minute, and it is hit on every
sign-in attempt. Rails.cache (Redis here, see REDIS_URL) gives an
atomic increment with an expiry, so there is no table to clean up
and no write lock on users. In development it falls back to the
memory store unless you set config.cache_store.
>
22:5
Ruby
$17.25 today

Side agents

Keep the main conversation on the task. Everything else starts on the side, read-only unless it is there to fix something.

[01]

Start one for a narrow job

Click + in the agent dock and pick what it is for: Ask about the code, Review the branch diff, get a Second opinion from another CLI, or Fix a bug. Only Fix may edit files; the rest run in plan mode.

Learn about side agents
New side agent in feat-login
AskWhy, how or where - about the code or the plan
read-only
ReviewRead the branch diff and report bugs
read-only
Second opinionSame question to codex
read-only
FixFix a bug or a failing check
can edit
Starts withmain: 9.3k tokens
Auto~9.3kMain is 9.3k: fork the whole session.
Fork~9.3kA copy of main's whole session. Most detail; reuses main's prompt cache.
Compacted~3.4kFork, then /compact inside the fork. Main itself is never compacted.
Fresh~2.1kNo history. Pomelo writes a packet: branch, ticket, recent commits, changes.
Double-click a type to startStart Ask - ~9.3k tokens
New agent in a new workspaceFor parallel code changes: its own branch, ports and database
[02]

Start from just enough context

A side agent can fork main's whole session, fork and compact it, or start fresh from a short packet Pomelo writes: branch, ticket, recent commits and changes. Auto forks while main is small and compacts once it passes 50k tokens. Each choice shows what it will cost to start.

How it starts
Askread-onlyAuto: fork - 9.3kSend to main
Reviewread-onlyCompacted - 3.4kSend to main
Fixcan editFresh - 2.1kSend to main
[03]

Send the answer back to main

Send to main puts the side agent's last answer into the main agent's prompt, without sending it, so you can add a line and send it yourself. Archive closes it and keeps the transcript to reopen later.

The side agent bar
Main
Ask: sessions_controller.rb
> Add a per-email throttle to the login endpoint
* Edit app/controllers/sessions_controller.rb +12 -1
* Bash bin/rails test test/controllers
6 runs, 0 failures
Done: five attempts a minute per email, then 429.
> Ask agent: the throttle uses Rails.cache because the counter only
has to live for a minute and needs an atomic increment...

Every workspace's agent, at a glance

Pomelo reads the agents' own activity hooks. The dot on each workspace says whether its agent is thinking, using tools, compacting, waiting for you or done, and a notification tells you when that changes.

WORKSPACES
main
Login page
feat-login2 running
Checkout flow
PROJ-101In Review3
Search filters
PROJ-104In Progress1
Invoice export
PROJ-97Done

Status on every row

Idle, Thinking, Using tools, Compacting and Awaiting input, next to the branch's pull request and running services. Side agents never move the dot.

  • Idlefinished, waiting for you
  • Thinkingworking on your prompt
  • Using toolsan edit, a command, an MCP call
  • Compactingfreeing up context
  • Awaiting inputa permission prompt or a question

Notified when it matters

A banner and a sound when an agent finishes, needs your input or compacts, for workspaces you are not looking at.

Usage and plan limits

Read from the agents' own transcripts, so knowing costs no tokens. The title bar shows the signed-in Claude account's 5-hour and weekly limits; the Agent usage tab breaks the week down.

devdev@example.comTeam
5 hours23%in 2h 31m
Week74%Sat 17:00
Open Agent UsageU
Refresh Now
Updated 12s ago - from the agents' status line

Limits in the title bar

Both windows with when they reset, turning yellow at 70% and red at 90%.

$67.09API-equivalent cost - 7 days
Today7 days30 days
Wed
Thu
Fri
Sat
Sun
Mon
today
feat-loginPROJ-101main

Cost by day, by workspace

API-equivalent cost, tokens and cache reads for today, 7 or 30 days, stacked by workspace, agent or model.

An agent sets up the project

Point Pomelo at your repos. It clones them and detects each stack without spending a token, then Claude Code, Codex or Gemini CLI writes pom.yml. Pomelo verifies that every service boots and hands back what fails until it comes out clean.

[01]

Detect, draft, verify, repair

Each phase shows as it runs. The agent works in a terminal you can watch or type into; verification is Pomelo's own check, not the agent's word.

Quick Start
Setting up myproject3 repositories - 1m 12s so far
Hide agent CLIPauseCancel
50%
Clone repositories4s
apilinked
weblinked
workercloned
Scan0 tokens1s
apiRailspostgresredis3 env
webVite1 env
workerNoderedisminio0 env
Configure with Claude Code52s
api: services web (bundle exec puma), jobs (bundle exec sidekiq)
api: setup bundle install - migrate bin/rails db:migrate
api: DATABASE_URL -> postgresql://{{shared.postgres.url}}/{{db.main}}
web: services dev (pnpm vite --port $PORT)
Hide agent CLIOpen pom.ymlSkip the agent - finish manually
4
Verify