Tandemu integrates with your existing ticket system so developers can pick tasks directly in Claude Code, and leads can see task progress alongside telemetry data.
Supported Platforms
| Platform | Auth Method | What’s Mapped |
|---|---|---|
| Jira | API Token | Projects → teams |
| Linear | API Key | Teams → teams |
| ClickUp | API Token | Folders → teams (includes all lists/sprints in the folder) |
| GitHub Issues | Personal Access Token | Repositories → teams |
Connecting
Only Owners and Admins can manage integrations.
- Go to http://localhost:3000/integrations
- Click Connect on the platform you use
- Enter your API token (see below for how to get one)
- Optionally enter your workspace/site ID
Getting API Tokens
Jira: Go to id.atlassian.net/manage-profile/security/api-tokens → Create API token. Also note your Jira site URL (e.g., mycompany.atlassian.net).
Linear: Go to linear.app/settings/api → Create personal API key.
ClickUp: Go to app.clickup.com/settings/apps → Generate API token. Note your team ID.
GitHub: Go to github.com/settings/tokens → Generate token with repo scope.
Project-Team Mapping
After connecting, map your external projects to Tandemu teams:
- On the integration card, click Manage Mappings
- Click Add Mapping
- Select the external project (fetched from your ticket system)
- Select the Tandemu team
- Save
This tells Tandemu: “Tasks from Jira project FRONTEND belong to the Frontend team.” When a developer on the Frontend team runs /morning, they see tasks from that Jira project.
How It Works
Tandemu never stores your tasks. When a developer or the dashboard needs task data, the backend calls your ticket system’s API in real-time and returns the results. This means:
- Task data is always fresh
- No sync issues
- No duplicate data to manage
- Tandemu only stores the integration config (OAuth token, project mapping)
The backend maps external statuses to a unified format for display (todo, in_progress, in_review, done, cancelled).
When skills update task status (e.g., /morning sets “in progress”, /finish sets “done”), they fetch the available statuses from your ticket system and pick the best match dynamically. This works with any custom workflow — no hardcoded status names.