Skip to content

Issues and agents

The issue browser turns “I should look at #482” into a running agent in a few clicks: pick an issue, read it, press start. cornercase creates a worktree on a branch named after the issue, opens a tab there, starts your coding agent and hands it the issue.

search projects, workspa…agent session·claudeProjects▾worktip: describe a change or paste a linkweb-shop(4)orders-api(2)!>https://github.com/acme/web-shop/issues/482▾◆personalblog(1)dotfiles(1)+ NewWorkspaces↑3 more▾feat/dark-mode◐claudeOpus 5.5·7%+ Tab▾feat/gift-cards◐codexgpt-5.4·20%+ Tab▾#482 Returns page cr…○claudeOpus 5.5·7%+ Tab+ NewIssuesChangesFilesTODOSettingsUsageQuit
The result of start: a worktree workspace named after the issue, with the agent and the issue link waiting at its prompt.

Click Issues at the bottom of the sidebar. The browser opens for the active project, with one tab per source:

Tab Shows
All Every connected source together, most recently updated first.
GitHub Issues of the project’s repository, read with the gh CLI.
GitLab Issues of the project’s repository, on gitlab.com or your own GitLab server.
Shortcut Stories from your Shortcut workspace.
Linear Issues from your Linear workspace.
Jira Issues from your Jira Cloud site.
Plane Work items from your Plane workspace, on Plane Cloud or a self-hosted server.
Asana Tasks assigned to you in your Asana workspace, or the tasks of the projects you choose.

You can hide tabs and change their order in settings → Issues → Sources shown. The browser remembers the last tab you used.

GitHub goes through the GitHub CLI, gh, using its own login. There is nothing to configure in cornercase:

Terminal window
gh auth login

cornercase runs gh in the project folder, so it lists the issues of that folder’s repository. The project must be inside a git checkout; otherwise the GitHub tab says this project is not in a git repository.

If gh isn’t on your PATH, set its location in config.json with the gh key.

Issues·web-shopAllGitHubGitLabShortcutLinearJiraPlaneAsanaQueue[ ] closed [ ] people›API tokenConnect Shortcut.Create a token in Shortcut under SettingsYour accountAPI Tokens, paste it here and pressEnter.It is saved in ~/.config/cornercase/secrets.json (only you can read it); you can also paste it insettings. SHORTCUT_API_TOKEN, when set, takes precedence.

Saved tokens go to secrets.json next to your config.json, readable only by you (mode 0600). They are never written to logs, to the issue cache or to the screen. The disconnect button in a tracker’s tab removes its saved token.

Issues·web-shopAllGitHubGitLabShortcutLinearJiraPlaneAsanaQueue[ ] closed [ ] people›#482Returns page crashes on empty addressbug·ana·3d#479Dark mode for the checkoutfeature, design·luis·5d#476Refund emails show the wrong currencybug·marta·8d#471Add Apple Pay to the checkoutfeature·ana·15d#468Flaky test: returns::label_is_printedci·luis·22d#455Rate-limit the public returns endpointsecurity·marta·1moenter reads #482·start works on it in its own worktree, on issue-482-returns-page-crashes-on-empty-…startschedulestart a flowrefreshcancel

Each row shows the issue’s key, its title and, on the right, its state (for closed or tracker states), labels, author and age. Up to 100 issues are listed per source.

  • Type to filter the list by key, title, author, state, labels or assignees.
  • ↑ ↓, PgUp PgDn or the mouse wheel move through it; Tab and Shift+Tab switch source tabs.
  • refresh reloads the list. Lists are also cached on disk, so they appear instantly the next time while cornercase fetches the latest.

Two toggles at the top right narrow the list down:

  • closed includes closed (GitHub, GitLab), done (Shortcut), completed and canceled (Linear), done (Jira) completed and cancelled (Plane) or completed (Asana) issues.
  • people filters by person, with the fields each tracker has: assignee and author on GitHub and GitLab, owner and requester on Shortcut, assignee and creator on Linear, assignee and reporter on Jira, assignee and creator on Plane and Asana. An Asana list of your tasks is already yours: to filter it by someone else’s assignments, set Asana projects.
Issues·web-shopAllGitHubGitLabShortcutLinearJiraPlaneAsanaQueue[ ] closed [ ] people›GitHub assigneeanyoneGitHub authoranyone
Issues·web-shopAllGitHubGitLabShortcutLinearJiraPlaneAsanaQueue[ ] closed [ ] people›anyoneno filtermeyou@ana@luis@marta

For each field you pick anyone, me, or a person from the tracker (type to find them). The filter goes into each tracker’s own search, and cornercase remembers it, along with the closed toggle, the next time you open the browser:

Issues·web-shopAllGitHubGitLabShortcutLinearJiraPlan [] closedQu [x]people: GitHub assignee me›#482Returns page crashes on empty addressbug·ana·3d#471Add Apple Pay to the checkoutfeature·ana·15d

Click an issue, or select it and press Enter, to read it:

Issues·web-shop#482Returnspagecrashesonemptyaddressopen·bug·assignedto@ana·openedby@ana·updated3dagohttps://github.com/acme/web-shop/issues/482startin its own worktree, on issue-482-returns-page-crashes-on-empty-addressagent none chosen yet: start asks which oneprompthttps://github.com/acme/web-shop/issues/482(typed, you press enter)When a customer starts a return without an address line, the returns page crashes with a 500.Stepstoreproduce1. Open a delivered order2. ClickStartareturn3. Clear the address and submitExpectedA validation error:Enterthefirstlineofyouraddress.Logsrustthread'tokio-runtime-worker' panicked at src/returns/address.rs:12:33:called `Option::unwrap()` on a `None` valueenter starts it·lines 1-26 of 31startschedulestart a flowagent…rawcopy urlback

At the top you see the issue’s details and its link, then exactly what start will do:

Line Meaning
start Where the work happens: in its own worktree and on which branch, or in a new tab.
agent Which agent will be started, in which mode, and its full command line.
prompt What will be pasted into the agent, and whether it is sent for you or left for you to send.

Below comes the description, rendered from Markdown (Jira, Plane and Asana descriptions and comments are converted to Markdown first; Asana images show as [image]): headings, lists and task lists, tables, quotes, links and code blocks with syntax highlighting in your terminal’s colours, then the comments.

Issues·web-shopagent none chosen yet: start asks which oneprompthttps://github.com/acme/web-shop/issues/482(typed, you press enter)When a customer starts a return without an address line, the returns page crashes with a 500.Stepstoreproduce1. Open a delivered order2. ClickStartareturn3. Clear the address and submitExpectedA validation error:Enterthefirstlineofyouraddress.Logsrustthread'tokio-runtime-worker' panicked at src/returns/address.rs:12:33:called `Option::unwrap()` on a `None` value•[ ] Answer 422 instead of panicking•[ ] Add a test with an emptylinesarray@luis·2d agoReproduced on main with an empty address line. Happens since 0.5.0.enter starts it·lines 6-31 of 31startschedulestart a flowagent…rawcopy urlback
  • Scroll with the wheel, ↑ ↓, PgUp PgDn, Space, Home and End.
  • raw shows the original Markdown; rendered goes back.
  • copy url copies the issue’s link to your clipboard.
  • back, Esc or ← return to the list.

Press start in the issue, or select an issue in the list and press start there. cornercase then works out three things.

After schedule (see Schedule for later), start a flow, in the list or in the issue, gives the issue to a whole team of agents instead, a coder, reviewers and a tester run by an orchestrator agent, with the same prompt and the same branch; see Flows.

  • GitHub and GitLab issues belong to the project you opened the browser from.
  • Shortcut, Linear, Jira, Plane and Asana issues aren’t tied to a repository, so when more than one place is open, cornercase asks where…: every project that is a git repository is offered as a new worktree, and the workspaces of other projects as a new tab. The place you are in is marked where you are.

In a repository, the issue gets its own worktree on a branch named after it:

Source Example issue Branch
GitHub #482 Returns page crashes on empty address issue-482-returns-page-crashes-on-empty-address
GitLab #482 Returns page crashes on empty address 482-returns-page-crashes-on-empty-address
Shortcut sc-48 Dark mode sc-48-dark-mode
Linear ENG-123 Returns page crashes ENG-123-returns-page-crashes
Jira SHOP-77 Returns page crashes SHOP-77-returns-page-crashes
Plane ENG-42 Fix login redirect ENG-42-fix-login-redirect
Asana ENG-42 Fix login redirect ENG-42-fix-login-redirect
Asana, no ID field 1205555555555555 Fix login redirect asana-1205555555555555-fix-login-redirect

GitLab branches start with the issue’s number and a dash, GitLab’s own convention: a merge request from such a branch gets Closes #482 in its description, so, with the project’s automatic issue closing on (GitLab’s default), the issue closes when the merge request is merged into the default branch.

The title part is lowercased, accents become plain letters, everything else becomes dashes, and it is cut at a word boundary to at most 40 characters. The workspace is named after the issue’s key and title, like #482 Returns page crashes on empty addr….

If a workspace on that branch is already open, cornercase takes you there instead of creating another one, and only starts the agent if the workspace has no tab open. Outside a repository, the agent starts in a new tab of the chosen workspace, and the tab is named after the issue.

cornercase picks the agent in this order:

  1. the one you chose for this issue with agent…;
  2. the default agent from settings → Agents;
  3. when the default is auto, the agent already running in your current tab;
  4. otherwise it asks:
Issues·web-shopAllGitHubGitLabShortcutLinearJiraPlaneAsanaQueue[ ] closed [ ] people›claudeclaudecodexcodexgeminigeminiopencodeopencodegrokgrokcursorcursor-agentcopilotcopilotampampdroiddroidpipiqwenqwenkimikimiclineclinegoosegooseaideraider

When you pick an agent that isn’t your default, a make default button appears so you can keep that choice. Once you have accounts of the chosen agent, start (or Enter) first asks which account it starts with, with the one in use selected, so Enter again keeps it; account… on the issue’s page chooses it ahead. Neither changes the account in use; start a flow passes it on. An account removed before you click start stops the start and says so. How each agent starts (its permission mode and extra arguments) is set in settings → Agents; see Agents.

Once the worktree exists, cornercase opens a tab in it and drives the new shell for you:

  1. It waits for your shell’s prompt to settle, then types the agent’s command line, for example claude --permission-mode plan, and presses Enter.

  2. It waits until the agent has taken over the terminal and its screen has been still for a moment.

  3. If the agent asks whether you trust the folder, cornercase waits for you to answer: saying yes lets the agent use the repository’s own agent settings, so it is your call. With settings → Agents → trust prompts turned on, cornercase answers yes for you instead.

  4. It pastes the prompt. By default the prompt is your issue’s link, typed on one line and left at the agent’s prompt for you to read and send with Enter. With settings → Agents → send the prompt turned on, it is pasted as written and sent for you.

Readiness is detected from what the terminal shows, so a slow agent may take a few seconds. If the shell still hasn’t started the agent a few seconds after the command was typed, cornercase gives up and leaves the tab as it is; the reason is written to the server log.

You don’t need to keep an eye on the agent’s tab. With Claude Code, Codex, Gemini CLI, opencode, Grok Build, Cursor CLI or GitHub Copilot CLI, the tab shows ◐ while it works (or a spinner, with working icon set to spinner), and if it asks you something (Claude Code, Codex, Gemini CLI, Grok Build, or Cursor CLI with /status-indicators turned on or OSC 7501 reports) or finishes while you are elsewhere, the tab, its workspace and its project show ! or ✓, and a notification tells you where; see What your agents are doing.

The issue’s workspace is a git worktree, so its changes panel shows what the agent is doing as it saves files. Open it with Changes next to Issues, switch to All to see the commits too, and hover a hunk to ask agent about it: cornercase types the file and lines into the agent’s prompt for you.

Click schedule beside start to put an issue in the agent queue, the Queue tab at the end of this dialog. Choose a clock time, delay, or the next Claude or Codex five-hour plan reset. The queue starts each due agent in its chosen worktree or tab and accepts its folder trust question automatically.

Everything above is reachable without the window. cornercase issue sources says which trackers are connected for a project and what is missing, issue list lists issues with the dialog’s filters from the same lists, issue read prints an issue with its comments and issue people the people the filters can name. cornercase start --issue '#482' does what start does: a worktree on the issue’s branch with your prompt template, or a tab when the project isn’t a repository, asking --project or --workspace when an issue isn’t tied to a repository and several places are open. See Scripts and agents.