Skip to Content

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

PlatformAuth MethodWhat’s Mapped
JiraAPI TokenProjects → teams
LinearAPI KeyTeams → teams
ClickUpAPI TokenFolders → teams (includes all lists/sprints in the folder)
GitHub IssuesPersonal Access TokenRepositories → teams

Connecting

Only Owners and Admins can manage integrations.

  1. Go to http://localhost:3000/integrations 
  2. Click Connect on the platform you use
  3. Enter your API token (see below for how to get one)
  4. 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:

  1. On the integration card, click Manage Mappings
  2. Click Add Mapping
  3. Select the external project (fetched from your ticket system)
  4. Select the Tandemu team
  5. 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.

Last updated on