Sort issues, highlight code
You can now sort issues, and code blocks are easier to read.
- On the issues toolbar, use the Order chip and the direction toggle to sort issues in each state group and board lane. Issues with no priority stay last, and the URL keeps the sort order.
- Code blocks in issue descriptions and comments now show syntax colors and a copy button.
CLI @ 0.5.0
Find and set sub-issues by issue key from the CLI.
--parentnow accepts an issue key, such asENG-1, or an ID.- Add
--ancestortotodos issue listto show all sub-issues of an issue at any depth. - In
todos issue list,--parent none,--project none, and--assignee noneshow only issues with no parent, project, or assignee. todos issue archiveandunarchivenow name the sub-issues that changed with the issue.
Sub-issues in the web
You can now see, add, and change sub-issues in the web app.
- Issue pages have a Sub-issues section, a Parent property, and a parent breadcrumb, and lists show sub-issue counts.
- Archive now also archives all sub-issues of an issue, and unarchive restores only the sub-issues that archive changed.
- The API refuses a parent that is archived or that makes a loop.
- Issue routes accept a key or an ID, and the API, CLI, and MCP can filter by ancestor or by no parent.
CLI @ 0.4.0
Archive, unarchive, and delete your work from the CLI.
todos issue,todos project, andtodos teamnow havearchive,unarchive, anddeletecommands.deleteremoves the record permanently and does not run without--yes.- Add
--archivedtotodos project listortodos team listto show only archived records.
Archive, unarchive, and delete
Archive and delete are now two separate actions.
- Delete now removes an issue, project, or team permanently, and its page and API return 404.
- Archive keeps the record with an Archived banner, and the record is read-only until you unarchive it.
- To delete an issue, first move or delete its sub-issues. To delete a team, first move or delete all of its issues.
- Add
archived=trueto the API team or project list to show only archived records.
Trials, imports, and role locks
Start without an account, and bring your work from Linear or GitHub.
- An agent can start a trial workspace with no account and give you a link to claim it within seven days.
- Admins can import issues from Linear or GitHub through the API, with their keys, dates, comments, and state changes.
- Controls that your role cannot use are now locked with a hint, and guests can open issue, project, and team pages without a 403 error.
- Work done with a workspace key now shows the key's name, not "Someone".
CLI @ 0.3.0
Bring in your work from Linear or GitHub, or try todos without an account.
- The new
todos import linearandtodos import github <owner/repo>commands copy issues, comments, labels, projects, and state changes into your workspace, and--dry-runshows the counts first. - The new
todos trycommand starts a trial workspace without an account and saves its key.
CLI @ 0.2.0
Use your inbox from the terminal.
- The new
todos inboxcommand lists your notifications and marks them read. You can mark all of them, pick them by ID, or pick one issue.
Inbox and mentions
See the work that needs you, without watching every issue.
- Each workspace has an Inbox for assignments, mentions, new comments, and closed issues. New items arrive live, and opening an issue marks them read.
- Type @ in an issue or comment to mention a teammate.
- Follow or unfollow any issue. You follow the issues you create, own, comment on, or are mentioned in.
- Choose how often notification email arrives, what it covers, and whether agent changes notify you. Every email has a one-click unsubscribe link.
- Read and manage your inbox from the API and MCP.
CLI @ 0.1.1
Type an issue key in any case.
- Commands that take an issue key now accept lowercase or mixed case letters.
Edit & Delete API keys
Change a key without making a new one.
- Edit the name, scopes, and workspaces of a key. The change applies at once.
- Revoking a key now deletes it. Delete revoked keys from the list.
Rename passkeys
Know which device each passkey is on.
- Click the name of a passkey in your settings to rename it.
Webhook delivery history
See what your endpoint got, and when.
- Open a delivery to see each send attempt: the status or error, the duration, and the signed request.
- Attempts are kept for 30 days and are also available through the API.
Team descriptions
Say what each team does.
- Add a description to a team.
- The team list shows how many members each team has.
Plans per workspace
Pay for the workspaces that need more room, and keep the rest free.
- Choose Starter or Pro for one workspace at a time. Each workspace has one flat price, no matter how many people join.
- Pay monthly, or pay yearly and get two months free.
- Switch plans, update payment details, and get invoices in the billing portal.
- The billing page marks your current plan and shows the storage and API limits of each plan.
- Move to a smaller plan without data loss. New uploads pause until you are below the limit.
Clear API limits
Know your limits before a script finds them for you.
- Every response includes
RateLimit-Limit,RateLimit-Remaining, andRateLimit-Reset. - Each workspace has a monthly allowance, reported by the
Todos-Quota-*headers. 429and402responses includeRetry-After, so clients know when to try again.- Error messages now say which limit you hit and when it resets.
- Per-minute limits are higher on every plan, and limit checks are faster.
Scoped keys
Give each tool only the access it needs.
- Personal keys and workspace keys are now separate.
- Choose scopes for each key when you create it.
- Revoke any key at once from your settings.
Pinned projects
Keep your active projects close.
- Pin a project to keep it at the top of your sidebar. Pins are personal.
- A small progress chart shows how much of each pinned project is done.
- Filter issues by project from the issue list.
Faster issue editing
Change an issue without leaving the list.
- Open an issue in place, edit it, and close it to continue where you were.
- Change the state of an issue directly in its row.
- Edit label names and colors directly in the list.
- Labels show on issues in every state.
Workspace settings
More control over your workspaces and your account.
- Rename or delete a workspace from its settings.
- A new account menu gives quick access to your profile, keys, and workspaces.
- Profile pictures show in issue activity and in member lists.
- Update your profile through the API.
- Every workspace starts with a default team, so you can add issues immediately.
Sign in your way
Fewer steps between you and your work.
- Sign in with an email link. Email is now the first option.
- Add a passkey to sign in with Touch ID, Face ID, or a security key.
- Pages you cannot access now show a clear message and a way back.
Interface sounds
Small sounds that confirm what you did.
- Buttons, fields, and menus play short, quiet sounds.
- Turn sounds on or off at any time. The choice stays in place on each visit.
Issue states everywhere
The same workflow in every tool.
- The CLI and MCP now support every state your team uses, not only open and closed.
- Every CLI command supports
--jsonoutput for scripts. - Duplicate requests from the web app are removed, so pages load faster.
Realtime board
See changes as they occur.
- The issue board updates immediately when someone changes an issue, in the web app, the API, the CLI, or MCP.
- Realtime updates connect through the web app's own address.
Signed webhooks
Keep your tools in sync.
- Receive a signed HTTPS request when issues, comments, projects, labels, teams, or members change.
- Signatures use HMAC-SHA256 with a timestamp. Examples are available for TypeScript and Python.
- Failed deliveries retry for up to 12 hours. Inspect and redeliver each delivery through the API or CLI.
MCP and OAuth
Give your agent the same context you have.
- Connect Claude, Cursor, or ChatGPT to your workspace at
https://mcp.todos.sh. - Sign in with OAuth, choose workspaces and scopes, and review the consent screen before you approve.
- Your workspace role and team access still apply to each agent.
CLI and SDK
Work with your issues from the terminal and from code.
- Install a single binary for macOS and Linux with one command. The installer checks each download.
- Use the TypeScript SDK to call every API endpoint with full types.
Foundations
A shared home for projects, teams, and issues, built for people and agents.
- Plan work with workspaces, teams, projects, issues, and labels.
- Build on a REST API with cursor pagination and
Idempotency-Keysupport. - Start with a free workspace and 500 MB of file storage.