{"slug": "show-hn-built-taskman-a-rust-tui-for-parallel-claude-codex-work-on-issues-prs", "title": "Show HN: Built Taskman, a Rust TUI for Parallel Claude/Codex Work on Issues+PRs", "summary": "A developer released taskman, an open-source Rust terminal UI that runs parallel Claude Code and Codex sessions, each in its own git worktree, alongside the ticket's Jira, Linear, GitHub Issues or Local files issue and its GitHub PR. taskman installs via a curl script into ~/.local/bin or with `cargo install --locked --git https://github.com/sanagnos/taskman` on Rust 1.88 or newer, with prebuilt binaries for macOS and Linux on x86_64 and arm64, including WSL. The tool targets the N × M × 3 windows problem of juggling a session, an issue and a pull request per ticket, using a ctrl+a command prefix and a sidebar that flags which session needs the user.", "body_md": "**One window for all your parallel Claude and Codex work: every ticket's session, issue and PR in one place.**\n\n## taskman-readme-vo.mp4\n\ntaskman is a terminal UI for working on several tickets at once. Each ticket gets the real `claude` CLI (or `codex`) working in its own git worktree, with its Jira, Linear, GitHub or Local files issue and its GitHub PR beside it. The sidebar tells you which session needs you, and project agents coordinate the tickets by messaging their sessions.\n\nOn macOS or Linux, including Windows with WSL:\n\n```\ncurl -fsSL https://raw.githubusercontent.com/sanagnos/taskman/main/scripts/install.sh | bash\n```\n\nIt installs into `~/.local/bin` and keeps taskman up to date, checking every download against the release's checksums and, with `gh` logged in, its signed attestation. [Updates](https://github.com/sanagnos/taskman/blob/main/docs/guide.md#updates) has the details and how to turn it off. Or build it with Rust 1.88 or newer:\n\n```\ncargo install --locked --git https://github.com/sanagnos/taskman\n```\n\nPrebuilt binaries cover macOS and Linux on x86_64 and arm64, WSL included ([Platforms](https://github.com/sanagnos/taskman/blob/main/docs/guide.md#platforms)); elsewhere, build from source. The [guide](https://github.com/sanagnos/taskman/blob/main/docs/guide.md#install) has other ways to install, and `taskman uninstall` removes it.\n\n- **Claude Code** , installed and logged in (`claude` on your PATH), and**git** .\n- Optional: the **GitHub CLI** (`gh` , logged in) for the PR panel, and**Codex** (`codex` ) to run some sessions in Codex instead.\n- Optional: your tracker's **GitHub integration** , to move tickets on their own as their PRs open and merge, and its**Claude Code plugin** (an MCP server in Codex) for sessions to comment on or move tickets themselves. taskman reads tickets without either.\n- A wide terminal: about 150 columns gives the session room beside the panels. It works down to 80x24, where the sidebar folds and the panels hide. On Windows, use Windows Terminal with WSL.\n\n1. Run `taskman` , press`ctrl+a P` and enter the path of a folder you work in.\n2. Press `ctrl+a n` to add an agent: a session in that folder. Every command starts with the prefix,`ctrl+a` , which shows the command keys; other keys go to the session.`ctrl+a ?` explains them.\n3. For tickets, pick a tracker in the same form, or later with `ctrl+a ,` : Jira, Linear, GitHub Issues or Local files. A Jira or Linear token goes in your keychain, or a file only you can read where there's none, never in the config ([Storing a token](https://github.com/sanagnos/taskman/blob/main/docs/guide.md#storing-a-token) ). Then`ctrl+a n` adds a ticket by number, key or link.\n4. `ctrl+a [` /`]` switch tickets,`ctrl+a /` jumps to one by name or key, and`ctrl+a ctrl+a` jumps to the next one waiting on you.\n5. `ctrl+a q` , then Enter, quits; sessions resume where they left off next time.\n\nUse tmux or screen with `ctrl+a`? Pick another prefix in Settings. The [guide](https://github.com/sanagnos/taskman/blob/main/docs/guide.md) covers the rest.\n\nAI lets you work on many tickets at once, but each ticket is really three windows: the **session** doing the work, the **issue** where the comments land, and the **pull request** with its checks and reviews. With *N* projects of *M* tickets, that's *N × M × 3* windows, and juggling them is what slows you down.\n\ntaskman organises the work the way you think about it, **project → ticket**, and shows each ticket's three side by side:\n\n```\n+- Tickets -----------+-------------------------+- Jira: ENG-52 -----------+\n| v checkout-service  |                         | Bulk import: validate    |\n| > ENG-52 NEEDS YOU  |  Claude Code, the real  | In Progress              |\n|   PR #412: 1 fails  |  CLI, working in this   | -- 3 comments, 1 new --  |\n|   ENG-53 working    |  ticket's worktree      | * Ana, 2m: can we also   |\n|   PR #415 approved  |                         +- GitHub: PR #412 --------+\n| v billing-api       |                         | 8 passed, 1 failing      |\n|   * orchestrator    |                         | x e2e-tests, 2m ago      |\n|   ENG-7 your turn   |                         | changes requested        |\n+---------------------+-------------------------+--------------------------+\n```\n\n- **One place per ticket.** Its session, its issue and its PR together, and the next ticket one keystroke away.\n- **You see where you're needed.** The sidebar says which session is waiting on you, so you don't check each one.\n- **Grounded in the sources of truth.** The issue comes from your tracker and the checks and reviews from GitHub, refreshed as they change and at once when a session comments or pushes.\n- **Agents carry the coordination.** A planner can split the work into tickets, start a session for each and follow up with them, so you direct the work instead of relaying it.\n\n- **Ticket:** an issue with its own session, git worktree and PR; the session reads them with`taskman status` , so it needs no tracker tools.\n- **Session:** the real`claude` (or`codex` ) CLI, not a wrapper, so every command, skill and plugin works, and it resumes after a restart.\n- **Prefix:** every key goes to the session except after`ctrl+a` ;`ctrl+a ?` lists what follows it.\n- **Where you're needed:**`▲ needs you` when a session asks for permission or a decision,`● your turn` when it finished while you were elsewhere;`ctrl+a ctrl+a` jumps to the next one.\n- **Links:** ctrl+click (cmd+click on macOS) opens a session's links, the issue, the PR, a check or a review;`ctrl+a l` lists them.\n- **Agents:** sessions with no ticket, for planning, reviewing or coordinating; a role gives one a standing job.\n- **Messaging:** sessions are named after their ticket (`ENG-52` ) or agent, so any Claude session can message any other: \"ENG-52, your e2e check fails; can you fix it?\"\n- **Fan out:** a planner adds tickets with`taskman add` , each with its own session it can direct; agents it adds wait for your OK.\n\nNone of the integrations are needed to start. A project is just a folder, and taskman shows only what each project has connected:\n\n| The project has | You get | \n|---|---|\n| a folder | agents: sessions in that folder | \n| + a tracker (Jira, Linear, GitHub Issues or Local files) | tickets, each with its own session and the issue beside it; in a git repository, each in its own worktree | \n| + a GitHub remote, with `gh` logged in | the PR panel on its tickets | \n\nPointing taskman at a public repository's issues? Text from trackers and PRs is treated as untrusted; [SECURITY.md](https://github.com/sanagnos/taskman/blob/main/SECURITY.md#tracker-and-pr-text-is-untrusted) says how.\n\nWith one or two sessions and no tracker, tmux or a few terminal tabs running `claude --worktree` (or `codex`) are enough, as are the CLIs' own ways of running several sessions. taskman doesn't change what a session can do: it runs the same CLI. What it adds is around the sessions:\n\n- **The ticket and PR beside each session,** fetched from Jira, Linear, GitHub Issues or Local files, and the PR from GitHub, so a ticket's comments, checks and reviews are on the same screen as the work.\n- **\"Needs you\" across every session and project** in one sidebar, and a key that jumps to the next one waiting.\n- **A worktree per ticket,** created from the latest main when the ticket is added, and offered for removal when it closes if nothing in it would be lost.\n- **Sessions that resume after a restart,** each on its own conversation, with one copy of a session running at a time.\n- **Sessions that message each other,** by ticket key or agent name, so a project agent can split work into tickets and follow up with their sessions (Claude sessions only).\n\nEach session is the real CLI, so a new Claude Code or Codex version works in taskman as it does in a terminal. If a CLI changes the hooks, output or options taskman relies on (last checked with Claude Code 2.1.296 and Codex 0.162), the sidebar's state can lag or be wrong and resuming or messaging can fail; the [guide](https://github.com/sanagnos/taskman/blob/main/docs/guide.md#when-claude-code-or-codex-changes) has the details.\n\nIf you see that after a CLI update, [open an issue](https://github.com/sanagnos/taskman/issues/new/choose) with `taskman --version` and `claude --version` or `codex --version`, or use **Report a bug** in Settings → Help & feedback, which fills them in.\n\n- [Guide](https://github.com/sanagnos/taskman/blob/main/docs/guide.md) : setting up, the keys, worktrees, agents, the commands, how it works.\n- [Design](https://github.com/sanagnos/taskman/blob/main/docs/design.md) : why things are built the way they are.\n- [Roadmap](https://github.com/sanagnos/taskman/blob/main/docs/roadmap.md) : ideas not built yet, and known gaps.\n- [Security](https://github.com/sanagnos/taskman/blob/main/SECURITY.md) : what taskman trusts, and how to report a vulnerability.\n- [Architecture](https://github.com/sanagnos/taskman/blob/main/docs/architecture.md) : a map of the code, for contributors.\n- [Contributing](https://github.com/sanagnos/taskman/blob/main/CONTRIBUTING.md) and the[changelog](https://github.com/sanagnos/taskman/blob/main/CHANGELOG.md) .\n\ntaskman is an independent project, not affiliated with or endorsed by Anthropic or OpenAI.\n\nLicensed under either of [Apache License, Version 2.0](https://github.com/sanagnos/taskman/blob/main/LICENSE-APACHE) or [MIT license](https://github.com/sanagnos/taskman/blob/main/LICENSE-MIT) at your option.\n\ntaskman is built from open-source Rust crates under MIT, Apache-2.0 and similar licenses. Their notices are in [LICENSE-THIRD-PARTY](https://github.com/sanagnos/taskman/blob/main/LICENSE-THIRD-PARTY), which every release archive carries beside the binary and `taskman --licenses` prints.\n\nUnless you explicitly state otherwise, any contribution you intentionally submit for inclusion in taskman, as defined in the Apache-2.0 license, is dual licensed as above, without any additional terms or conditions.", "url": "https://wpnews.pro/news/show-hn-built-taskman-a-rust-tui-for-parallel-claude-codex-work-on-issues-prs", "canonical_source": "https://github.com/sanagnos/taskman", "published_at": "2026-10-21 14:03:50+00:00", "updated_at": "2026-10-21 14:14:19.577313+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "developer-tools", "ai-products"], "entities": ["taskman", "Claude Code", "Codex", "Rust", "GitHub", "Jira", "Linear", "Anthropic"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/show-hn-built-taskman-a-rust-tui-for-parallel-claude-codex-work-on-issues-prs", "markdown": "https://wpnews.pro/news/show-hn-built-taskman-a-rust-tui-for-parallel-claude-codex-work-on-issues-prs.md", "text": "https://wpnews.pro/news/show-hn-built-taskman-a-rust-tui-for-parallel-claude-codex-work-on-issues-prs.txt", "jsonld": "https://wpnews.pro/news/show-hn-built-taskman-a-rust-tui-for-parallel-claude-codex-work-on-issues-prs.jsonld"}}