Repository navigation
A polish pass over OpenAgent's flows: a Stop during a run's start stops it, and an unsent prompt survives a reload - #2362
Merged
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
nitedani-agent
force-pushed
the
cleanup-round
branch
from
November 11, 2026 00:10
6f29126 to
e088aea
Compare
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…cond Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
nitedani-agent
force-pushed
the
cleanup-round
branch
from
November 11, 2026 01:16
e088aea to
b334a5c
Compare
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ys said once Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ords Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…l font Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…reload Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s card names runs as the sidebar does Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s sent Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s the pressed one's place Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… being asked Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… remove warning take their own line when the row is narrow Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… Back does not open it again Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…, on a module's page too Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e same words Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… them Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…hat they show Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e prompt dialog's two too Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… and Tab leaves them Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
nitedani-agent
force-pushed
the
cleanup-round
branch
from
November 11, 2026 08:52
18cc1aa to
79b9e97
Compare
nitedani-agent
marked this pull request as ready for review
November 11, 2026 10:34
…read Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ice does after Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
On
main, a Stop pressed right after Start leaves the run's chat counting up for good, a prompt you are writing is gone after a reload or a trip to another page, and no run on the Logs page can be opened from the keyboard. This PR fixes those and the other bugs, inconsistencies and paper cuts I found walking OpenAgent's 33 user-facing flows, one commit per change.The bugs a person meets on
main:main/reviewclaude auth loginruns on after the dashboard is gonenpxSeven choices are yours to make: the decisions comment.
What you should see
Captured on 79b9e97 and on
main(f1ce00e) with this PR's demo pages, each from a freshpnpm demo.1. A Stop 0.2 s after Start, clicked by a script since a hand is too slow:
mainloses it.Before (
main)After (this PR)
2. A launcher draft, then Overview, Back and a reload:
mainempties the box.Before (
main)After (this PR)
3. A message queued to a working run, then another session and a reload:
maindrops it.Before (
main)After (this PR)
4. The server's process stopped (the run's first line written by hand), then Send now and both Stops:
mainlets them act.Before (
main)After (this PR)
5. Settings over a ticket from All projects, Escape, "← Tickets", then Back twice:
mainreopens Settings.Before (
main)After (this PR)
6. Tickets at 768 px beside the sidebar:
maincuts off the second press.main)7. Logs, then Tab from the "Done 1" filter:
mainreaches no run.main)The flows
Each rating is the flow's user experience from 0 to 10, as the repo's
skills/ux/SKILL.mdrates it, onmain⇒ with this PR.Start and steer a run
Navigate and oversee
Accounts, settings, the command line and the website
openagentcommandpnpm demoLines by flow
packages/skill-scheduler/dashboard/AutomationsPage.tsx(+131 / −66),packages/skill-scheduler/dashboard/SchedulerCard.tsx(+31 / −19),packages/skill-scheduler/dashboard/automation-form.ts(+25 / −8),packages/skill-scheduler/dashboard/AutomationForm.tsx(+25 / −5), 6 morepackages/dashboard/dashboard/components/OnboardingChecklist.tsx(+66 / −53),packages/dashboard/dashboard/components/DashboardPage.tsx(+27 / −17),packages/dashboard/dashboard/components/CustomizeOverview.tsx(+20 / −11),packages/dashboard/dashboard/components/Logins.tsx(+9 / −4), 10 morepackages/dashboard/dashboard/lib/use-daemon-health.ts(+29 / −15),packages/dashboard/dashboard/components/AgentComposer.tsx(+9 / −4),packages/dashboard/dashboard/components/Composer.tsx(+7 / −4),packages/dashboard/dashboard/components/StartAgentButton.tsx(+7 / −4), 10 morepackages/dashboard/dashboard/lib/draft-handoff.ts(+43),packages/dashboard/dashboard/components/AgentView.tsx(+22 / −8),packages/dashboard/src/dashboard/rpc-serve.ts(+16 / −8),packages/dashboard/dashboard/components/EventList.tsx(+12 / −5), 5 morepackages/dashboard/dashboard/components/FadeWhileStale.tsx(+43),packages/dashboard/dashboard/components/CustomizeOverview.tsx(+6 / −18),packages/skill-logs/dashboard/LogsPage.tsx(+7 / −6),packages/skill-tickets/dashboard/TicketsPage.tsx(+6 / −6), 6 morepackages/skill-account-rotation/dashboard/AccountsCard.tsx(+22 / −12),packages/dashboard/dashboard/components/Accounts.tsx(+15 / −11),packages/dashboard/dashboard/components/Logins.tsx(+7 / −7),packages/dashboard-devices/dashboard/codes.tsx(+6 / −4), 6 morepackages/dashboard/dashboard/components/AutoMenu.tsx(+18 / −14),packages/dashboard/dashboard/components/SkillsMenu.tsx(+15 / −8),packages/dashboard/dashboard/components/AgentHistory.tsx(+9 / −8),packages/dashboard/dashboard/lib/agent-label.ts(+8 / −1), 10 morepackages/skill-logs/dashboard/LogsPage.tsx(+43 / −36),packages/skill-logs/dashboard/MembersCard.tsx(+4 / −4),packages/dashboard/dashboard/components/StatTile.tsx(+3 / −2),packages/dashboard/dashboard/components/Agents.tsx(+3 / −1), 4 morepackages/skill-tickets/dashboard/lib/back-to-list.ts(+26),packages/skill-tickets/dashboard/TicketPageShell.tsx(+11 / −7),packages/skill-tickets/dashboard/TicketDetailPage.tsx(+8 / −8),packages/dashboard/dashboard/module/testing.tsx(+15), 6 morepackages/dashboard/dashboard/lib/work-bar-away.ts(+42),packages/dashboard/dashboard/components/AgentWorkBar.tsx(+10 / −13),packages/dashboard/dashboard/components/AgentHistory.tsx(+8 / −6),packages/dashboard/dashboard/components/AgentActionsMenu.tsx(+9 / −1), 3 morepackages/dashboard/dashboard/components/QuestionPanel.tsx(+54 / −14),packages/dashboard/dashboard/components/AgentComposer.tsx(+10),packages/dashboard/dashboard/components/EventList.tsx(+4 / −1),packages/dashboard/dashboard/components/AgentView.tsx(+4)packages/dashboard/dashboard/components/Composer.tsx(+15 / −6),packages/dashboard/dashboard/lib/draft-handoff.ts(+16 / −1),packages/dashboard/dashboard/components/PromptEditor.tsx(+8 / −5),packages/dashboard-devices/dashboard/ConnectServer.tsx(+2 / −2), 15 morepackages/dashboard/dashboard/components/RemoveProjectDialog.tsx(+28 / −17),packages/dashboard/dashboard/components/ProjectPicker.tsx(+14 / −5),packages/dashboard/dashboard/components/AddProjectPanel.tsx(+5 / −7),packages/dashboard/dashboard/components/SessionRepos.tsx(+2 / −2)packages/dashboard/dashboard/components/AgentsPage.tsx(+37 / −31),packages/dashboard/dashboard/App.tsx(+7 / −1)packages/dashboard/dashboard/components/AgentWorkBar.tsx(+18 / −15),packages/dashboard/dashboard/components/ui/row-item.tsx(+10 / −8),packages/dashboard-changes/dashboard/ChangesPanel.tsx(+1 / −1),packages/dashboard-files/dashboard/FileTree.tsx(+1 / −1), 4 morepackages/dashboard/dashboard/lib/use-route.ts(+23 / −10),packages/dashboard/dashboard/components/SettingsDialog.tsx(+6 / −7),packages/dashboard/dashboard/App.tsx(+6 / −3),packages/dashboard/dashboard/components/DriverModelMenu.tsx(+2 / −2), 1 morepackages/dashboard/dashboard/lib/notification-permission.ts(+17 / −5),packages/dashboard/dashboard/components/NotificationsSubmenu.tsx(+6 / −11),packages/dashboard/dashboard/components/SettingsDialog.tsx(+7 / −5),packages/dashboard/dashboard/components/OnboardingChecklist.tsx(+2 / −6)packages/dashboard/src/dashboard-rpc/control.ts(+19 / −4),packages/dashboard/dashboard/components/AgentView.tsx(+10 / −3),packages/dashboard/dashboard/components/EventList.tsx(+6 / −3),packages/dashboard/src/starting.ts(+6), 2 morepackages/dashboard/dashboard/components/Agents.tsx(+19 / −5),packages/dashboard/dashboard/lib/agent-label.ts(−8),packages/dashboard/src/dashboard/overview.ts(+7),packages/dashboard/dashboard/components/Composer.tsx(+4), 3 morepackages/dashboard/src/dashboard-rpc/hosted-repos.ts(+21 / −11),packages/dashboard/dashboard/components/ProjectPicker.tsx(+4 / −2),packages/dashboard/src/dashboard-rpc/projects.ts(+3),packages/dashboard/dashboard/components/RunOnMenu.tsx(+1 / −1), 1 morepackages/dashboard/dashboard/App.tsx(+16 / −5),packages/dashboard-files/dashboard/FilesPane.tsx(+4 / −4),packages/dashboard-changes/dashboard/ChangesPanel.tsx(+3 / −3),packages/dashboard-changes/dashboard/keys.ts(+1 / −1), 3 morepackages/openagent.build/pages/index/copy.ts(+19 / −1),packages/openagent.build/pages/index/styles.css(+7 / −3),packages/openagent.build/pages/index/commands.tsx(+5 / −2),packages/openagent.build/pages/index/Hero.tsx(+3 / −3)packages/dashboard/src/dashboard/send-skills.ts(+6 / −5),packages/dashboard/dashboard/components/SettingsDialog.tsx(+2 / −2),packages/dashboard/src/dashboard-rpc/skills.ts(+2 / −2),packages/dashboard/dashboard/components/AgentDataSettings.tsx(+1 / −1), 7 morepnpm demopackages/dashboard/src/dashboard-rpc/logins.ts(+22 / −7),packages/dashboard/src/daemon.ts(+2)packages/dashboard/dashboard/components/Logins.tsx(+8),packages/dashboard/src/dashboard-rpc/logins.ts(+6 / −2),packages/skill-account-rotation/dashboard/AccountsCard.tsx(+3 / −3),packages/skill-account-rotation/src/wiring.ts(+2 / −2), 1 morepackages/dashboard/src/project-hooks.ts(+11 / −4),packages/dashboard/dashboard/components/StartAgentForm.tsx(+9 / −1)packages/install/src/install.ts(+11 / −5)openagentcommandpackages/dashboard/src/cli/cli.ts(+3 / −7),packages/dashboard/src/cli/update-check.ts(+2 / −2)packages/dashboard-devices/dashboard/AddDevice.tsx(+2 / −2),packages/dashboard-devices/dashboard/codes.tsx(+4),packages/dashboard-devices/dashboard/DevicesSettings.tsx(+1 / −1)packages/dashboard/dashboard/components/AgentView.tsx(+3)packages/dashboard/src/e2e/README.md(+2 / −1)packages/skill-scheduler/dashboard/AutomationsPage.test.tsx(+186 / −27),packages/dashboard/dashboard/lib/use-daemon-health.test.tsx(+105 / −12),packages/skill-logs/dashboard/LogsPage.test.tsx(+107 / −4),packages/dashboard/dashboard/App.test.tsx(+104 / −4), 78 moreNotes
packages/agent-runner/DECISIONS.md:116quotes the launcher's old "the CLI's own default"claudeApproach: each finding's cause and fix, with rated alternatives where several fit
Each finding from the walks and the reviews below has its cause, most with the line that does it, and the fix chosen. Where more than one fix fit, 49 times, the candidates are rated 0 to 10 and the chosen one is rated 7 or more. The findings left as they are say why there. The round lands as one PR with a commit per change (rated 8), over a PR per group of flows (6) or a PR per finding (3), so each change stays reviewable and revertable on its own.
The whole file, with every finding's decision and the reason for each one left as it is: https://gist.github.com/nitedani-agent/69b05e9e24f617c789f872227e46da02
Loop A: three verifiers, one per part of the diff; no bugs on 3e90fd7
Three verifiers (GPT-6.1-Sol in Codex) each took a part of the diff (the session page; the Overview, lists and modules; accounts, settings, the command line and the website). They ran the tests and drove the demo in Chrome at phone and desktop widths, comparing
mainwith the head, and counted only what they reproduced.main's sit in functions this PR edits, so they were fixed: the owner-name question's focus (b1f9252) and a time of day left half typed (5fe1f01). The verifier of the Overview, lists and modules then found the time's fix incomplete: a half-typed time, then hours and back to days, held Save over a blank field (3e90fd7, which also covers another choice and back). No bugs on 3e90fd7.Every report, with the candidates each verifier dropped and the rulings on them: https://gist.github.com/nitedani-agent/8273fe09543f3963b2abc389dd424e52
Loop B: code review and shape pass, eight rounds; 7 ⇒ 8/10 on 3e90fd7
One reviewer (GPT-6.1-Sol in Codex, high effort) read the diff for correctness, security and code that doesn't earn its place, then rated every file and function before and after. No round found anything to cut or restructure. It found bugs and weak tests, fixed in the commits named below, and test runs that failed on a loaded machine, each declined below with its reason.
main, lost a token on a loaded machine; it passes alone and passed 1621/1621 in the gates on this head.maintoo.Every review and shape report, with each file's rating: https://gist.github.com/nitedani-agent/839443391e771cc8be94bd4fd0c5cf30
Fresh read: three rounds as the maintainer who merges; merge as is on 3e90fd7
Each round, a new reader (GPT-6.1-Sol in Codex, high effort) read the PR as suleimansh, who merges most PRs here, and ran its own checks in a browser and in the tests.
The three reports: https://gist.github.com/nitedani-agent/a616e4f2808eea29ee131f35b7c28fac
Gates: every CI command and the website's, on 3e90fd7; all pass
Every command CI runs on a pull request, plus the website's own test and build, ran on 3e90fd7. Seven ran in a
node:22container like CI's runner, and the dashboard's browser stories and skill-browser's Chrome cases ran on a host with Chrome, withclaudeandcodexoff the PATH. All exit 0 on their first run: 23 projects type-checked, and 1621, 52, 499, 1497, 1, 1039 and 44 tests.The run before, on 79b9e97, also passed in full, the dashboard's UI suite on its second run: on a loaded machine its first run timed out in 4 tests, and both files holding them pass alone on that head and on
main.CI passed on 3e90fd7, all seven jobs: run 43031928366.
Every gate's output: https://gist.github.com/nitedani-agent/060bb61a5457e5cc514ecf027c495c37
🤖 Generated with Claude Code