Work
Needs you, Backlog, Working, Done and Activity - one screen answering what is waiting on you across every repository
Work
Work is the screen that answers "what is happening, and what needs me". It spans every connected repository by default, with one filter chip to narrow to a single repo.
Five tabs:
| Tab | What is in it |
|---|---|
| Needs you | The decisions waiting on a person, each with the one button that settles it. The default tab. |
| Backlog | Open issues and pull requests on GitHub with nothing running on them yet - what to pick up. Fetched only when you open the tab, and per repository: with more than one connected, pick one in the filter chip first. Solve, Decline, Diff and Merge work from here. |
| Working | What your agents are doing right now. |
| Done | Everything that shipped, paging back through your whole history. |
| Activity | The feed of everything the agents did, as history rather than as a decision list. |
There is exactly one "Needs you"
This used to be four lists. Work and Inbox sat next to each other in the sidebar and both opened on a tab called "Needs you", computed from different tables over the same GitHub state - so one green pull request could appear three times at once, on two screens, offering three separate Merge buttons, and clearing one list left the others full.
- Inbox is gone as a page. Its feed is Work's Activity tab.
- Duplicates about the same pull request fold into one row, keeping the richest version of it - the reason it is waiting, plus Dismiss and Snooze.
- The Needs you queue is one list wherever you open it. The right-hand queue opens from the same header button on every Foxl Code screen; on Work it and the Needs you tab are the same list, so dismissing a row in one clears it from the other in the same frame.
- The count on the home screen and the count here are the same definition, rendered by the same code from one shared snapshot, with one name for it in each language.
Every old link still lands: /inbox, /code-inbox and /activity all open
Work, on the tab they used to.
One list, in priority order
Needs you used to be three lists stacked in one column, one per source - three card sizes, three ways of printing a repository, three ways of printing an age, and buttons stretched to fill one card and label-width on the next. Because the blocks were never sorted against each other, where a card landed depended on which list it came from rather than on how much it mattered: hard-capped runs from weeks ago sat above pull requests that were approved and one press from shipping.
It is one list now, sorted by how much each row matters.
Dismissing
Every card has an X in the same corner (44px on a phone), and hiding one hides the whole subject rather than leaving a sibling row behind. Explaining why is still offered under the card's own menu, because that is what stops Foxl proposing the same thing next week.
- A red build you hide comes back if it fails again - the dismissal is per failure, not a permanent mute.
- The one card with no X is a plan waiting for approval, because there is nowhere else in the app to find it.
The repo filter narrows the whole tab
Picking a repository used to leave other repositories' rows on screen, which read as a broken control. It filters the whole list now. Rows that belong to no repository always show.
Plain status words
A row says what happened in words that do not assume you write code:
- Checks failed - and which check.
- Ready for your review
- Agent is working
Each row also names the task, its pull request number, and how long the run took.
The buttons
| Button | What it does |
|---|---|
| Merge | Merges the pull request. |
| Fix it | Sends the agent back at a failing build - it reads the failing check and pushes to the same branch. |
| Solve | Starts an agent on an unclaimed issue. |
| Decline | Closes an issue as "not planned" with a reason, posted as a GitHub comment so the trail exists outside Foxl. |
| Ask Foxl to review | Runs the independent reviewer on any PR in a connected repository. |
| Request changes | Click a line number in the Diff, say what should change, and the footer offers this. Each comment travels with its file and line to the same agent, which addresses it on the branch it already pushed; an optional note covers the PR as a whole. If no agent is behind the PR the comments are posted on GitHub and it says nothing was restarted. |
| Diff | Opens the change. |
| Dismiss / Snooze | Takes the row out of the queue, now or for a while. |
Declining is the most common triage decision and used to be the only one that still needed a browser trip.
Fix it wakes the agent on its own saved workspace - the checkout, its dependencies and its own notes are all still there. Only when that workspace is genuinely gone does it say so and leave Retry to you, rather than quietly starting a paid run from scratch. See Resume from review.
What clears itself
Merged and closed pull requests drop out of the queue on their own, so rows about work that is already finished do not need dismissing. Budget warnings and hard-capped agents still surface here, since nothing else reports them.
Runtimes: a workspace of live terminals
Runtimes is where you watch runs. Every runtime is a pane with its own live terminal, and the facts that used to sit on a card - status, backend, model, branch, live spend - are in the pane's header beside the output they describe, with Stop, Open on GitHub and Copy task id in its menu.
- The header reads as one control,
+ | Remote | Claude Code: open a terminal, on that machine, running that agent.Cmd+T(Ctrl+T) does the same;Cmd+Dsplits right,Cmd+Shift+Dsplits down, dragging the divider resizes, andCmd+Fsearches a pane's scrollback. Up to six panes; on a phone, one at a time. Your arrangement survives leaving the page and coming back. - The agent picker's first choice is Terminal: a plain login shell on the machine you picked, in the repository's checkout, with no assistant and no model in it. Anything you commit is pushed to the session's own branch; closing it opens no pull request.
- Arriving opens at most one pane (your newest run), and a pane you close stays closed. Closing a terminal you opened stops the agent in it - it still commits and pushes what is in the tree on its way out - and the X says so first. A pane opened from Watch a run is a window onto a job dispatched elsewhere: closing it leaves the agent running, and reopening reattaches.
- A cloud pane whose machine has gone to sleep (fifteen idle minutes) offers Reconnect, which resumes on the same saved workspace. Keys typed while a machine is still starting are held and delivered in order once the assistant is ready.
- The sidebar lists open terminals under the Runtimes row. Each row leads with the mark of the agent running in it and ends with a cloud, laptop or server glyph for where it runs.
The home screen
The Foxl Code home screen is a chat home: the mark, one question, and a single
line of counts directly under it - for example 2 needs you · 3 working · 97 done. The first item is a link to Work, and it stays a link at zero so the
control does not come and go as the count moves. Everything else lives here on
Work, or one tap away in the sidebar, where each task shows its own state.
Related
- Tasks - the lifecycle behind each row.
- Autonomous loop - what fills Needs you with proposals and questions when you are not in the chat.
- GitHub - what happens when an issue is opened.
- Review on approval - the independent reviewer behind "Ask Foxl to review".