Turn GitHub issues into tasks
Works with GitHub and GitLab · iPhone, iPad and Mac
Most task managers treat your issue tracker as a different universe. You read an issue, retype it into a todo app, do the work, then go back and close the issue by hand. That is twenty minutes a day of being your own copy-paste robot.
Jupiter Optimus closes that loop. Point it at a repository and the issues arrive as tasks. Complete the task and the issue closes itself, back on GitHub or GitLab.
What you need
A personal access token from your own account. That is the whole setup — there is no app to install on the repository, no webhook, no bot account, and no server of ours in the middle. Your token is stored in the device Keychain and used only for direct requests to github.com or gitlab.com.
Creating a GitHub token
On GitHub, go to Settings → Developer settings → Personal access tokens → Fine-grained tokens and create one with:
- Repository access: only the repositories you want to track.
- Issues: Read and write — write is what lets a completed task close its issue.
- Pull requests: Read and write, if you want the pull-request section.
- Metadata: Read-only (GitHub adds this for you).
Give it an expiry you are comfortable with. If you only ever want issues to flow one way, Issues: Read-only is enough — write-back is off by default anyway.
Creating a GitLab token
On GitLab, go to Preferences → Access tokens and create one with the
api scope. GitLab tokens cannot be limited to a single project, so scope
it to an account you are comfortable using. Self-hosted instances work too:
put your server's address in the Server field when connecting.
Connecting
- Open Settings → Maximus.
- Choose GitHub or GitLab, paste your token, and press Connect.
- Add a repository as
owner/repo— or just paste its URL. - Press Import.
Open issues become tasks, keeping their title and body. If the first import reports "0 new", press Import once more — the first sync sometimes runs before the connection has settled.
Sending issues where they belong
Each repository has a destination: a project, or the Inbox. Set it from the folder control on the repository's row, and every future import from that repository lands there.
A project can take issues from several repositories. If your product is an iOS app, a Mac app and a shared core in three repositories, they can all feed one project — which is exactly how this app's own development is organised.
Closing the loop
Turn on Settings → Maximus → "Close issue when task is completed". From then on, completing an imported task closes its issue on GitHub or GitLab, and un-completing it reopens the issue.
This is off by default on purpose. Writing to someone's repository should be a decision, not a surprise on first launch.
Pull requests and CI
Connected repositories also surface your open pull requests, each with its CI state and review decision. The app can notify you when a check fails, a review lands, or a pull request merges — so you find out without keeping a browser tab open all day.
What it does not do
Worth being straight about the edges:
- Import is one-way for content: editing a task's title does not rename the issue. Only completion state is written back.
- Issues carry no due date, so imported tasks arrive undated — set your own.
- Self-hosted GitLab needs a TLS certificate your device trusts; self-signed certificates are not supported.
- Everything runs on the device. Close the app for a week and nothing imports until you open it or a background refresh runs.
Why it works this way
There is no Jupiter Optimus account and no server. Your tasks live on your device and in your own private iCloud database, and your token never leaves the Keychain. That is also why the app cannot import while you are not using it the way a server-backed service could — a trade we made deliberately, and one worth knowing about before you rely on it.
Jupiter Optimus on the App Store — $9.99 a year with a 7-day free trial, for iPhone, iPad, Mac and Apple Watch.