Documentation

Customer documentation

Everything Slack workspace admins and Jira project admins need to install, configure, and run Threadmaker. Power users in mapped channels can skim the scenarios + shortcut + mentions sections. If you can't find an answer here, email support@cinderlab.io.

Install in 5 steps

  1. Add Threadmaker to Slack. Click the Add to Slack button on threadmaker.dev or your Slack App Directory entry and authorize the workspace. After OAuth completes you'll see your connection token — a UUID that pairs the Slack app with its Jira counterpart. Copy it (we also DM it to you).
  2. Install the Forge plugin from the Atlassian Marketplace. In Jira admin, open Apps → Threadmaker (Global), paste the connection token from step 1 plus the App URL (https://threadmaker.dev), and save.
  3. Enable a Jira project. Open Project settings → Threadmaker and toggle Enabled on. The default templates are sensible — you'll customise them later.
  4. Pair a Slack channel with that project. In Slack, run /jira-map in the channel you want to use. The modal shows your Jira projects; pick one and confirm.
  5. Try it. Comment on a Jira issue in the paired project. Threadmaker creates a thread in the Slack channel and posts the comment as a reply. Reply in the thread — the message lands as a Jira comment within seconds.

That's it. Everything from here is configuration, edge cases, and optional features.


Three ways teams use Threadmaker

Engineering triage

Your team files bugs in a Jira BUG project and discusses them in #eng-bugs. Pair the channel to BUG once (/jira-map); every new bug spawns a thread. Triage happens in Slack; the ticket gathers the conversation automatically. First-response time drops from "whenever someone checks Jira" to "when someone reads Slack."

Customer support escalation

Your support team escalates to engineering in #escalations. Pair it to a Jira CS project. The agent creates the ticket, a thread spawns in Slack, engineering replies in-thread, and the ticket grows a complete diagnostic log without anyone retyping context.

On-call incident response

An incident opens a Jira INC ticket. Your team jumps into #incidents. Everyone sees the anchor message — current status, assignee, timeline — and as the ticket moves Investigating → Mitigating → Resolved, the thread title reflects it. After the incident, the thread is the postmortem.


How the sync works

Three ideas drive every feature:


Slash commands (admin)

Workspace admin only All four slash commands below are gated to Slack workspace admins or owners — only an admin can change channel pairings, set the alerts channel, or read the audit log. Non-admin members get a friendly "this command is admin-only" reply. /jira-create additionally requires the Jira project admin to opt in (default OFF — see project settings).

Pair a channel with a project — /jira-map

Tell Threadmaker which Jira project a channel belongs to. Run inside the channel you want to pair.

Gotchas

Create issues from Slack — /jira-create

Open a Jira create-issue modal without leaving the channel. OFF by default per project; a Jira project admin opts in via Project settings → Threadmaker → Allow Slack to create Jira issues. When on, anyone in the channel can run the command.

Running /jira-create opens a modal with project, issue type, summary, and description fields. Issue type defaults to the project's first standard type (Task/Story/Bug/Epic for Software; Incident/Service Request/Problem for JSM). Required custom fields surface as additional inputs. Submit to create the issue and post a confirmation message linking to it.

Gotchas

Inspect what's been syncing — /jira-audit

Show recent sync events for the project paired to the current channel: timestamp, direction (Slack→Jira or Jira→Slack), action (create/edit/delete/transition), issue key, actor, and status (success/failed).

Channel-scoped by design The audit log shows only events for the project paired to this channel. Running the command in an unpaired channel returns a "no project paired here" message. This prevents cross-channel info leak when different teams use different channels for different projects. Workspace-wide audit access is available to operators via the internal admin portal — email support@cinderlab.io if your security team needs it.

Choose where alerts go — /jira-alerts

Pick the Slack channel that receives failure alerts when a sync attempt fails permanently (5 retries exhausted). Without an alerts channel, failures are silent — the audit log captures them but no human gets pinged.

Most admins prefer a dedicated #threadmaker-alerts channel so the bot can post freely. Invite the bot first.


Forward any message to Jira

Use case: a side conversation in another channel or thread is relevant to a live ticket. Right-click any message (or hover → three-dots menu) and pick Send to Jira. Threadmaker posts that message as a comment on the matching Jira ticket — useful for forwarding a discussion that started elsewhere into the canonical ticket thread.


Live status in the thread title

The first time a Jira ticket has activity in a paired channel, Threadmaker posts an anchor message — the thread root for all subsequent activity on that ticket. Default format:

WEB-1234 — Add export to PDF
Type: Story · Status: In Progress · Priority: High · Assignee: Alice

When type, status, priority, issuetype, summary, or assignee change in Jira, your anchor updates in place to reflect the new value — the thread title in Slack always shows the current state. Updates edit the existing message silently; they don't create new notifications.

Per-project toggle: live updates can be disabled in Project settings → Threadmaker → Sync anchor field updates (default ON). When OFF, the anchor posts once at thread creation and never updates. Useful if your team prefers immutable thread roots.

The anchor format is a configurable template (live preview in the settings page). Available variables:

The template engine refuses to save without {{issue.key}} and {{issue.url}} — they're required for the anchor to be discoverable on retry.


Edits and deletes flow both ways

If a Slack reply or a Jira comment is edited, the corresponding message on the other side updates within seconds. Same for deletes — deleting a Slack reply removes the matching Jira comment, and vice versa.

Per-project toggle: Project settings → Threadmaker → Sync edits and deletes (default ON). Turn off if your team needs Jira comments to be immutable for compliance or audit reasons; Slack-side edits will then be ignored, and the original synced version stays in Jira.

Gotchas

Reactions become Jira signals

OFF by default. A Jira project admin opts in via Project settings → Threadmaker → Sync Slack reactions to Jira.

When on, reacting on a synced message in Slack creates a lightweight mini-comment on the matching Jira comment, e.g.

👀 Alice reacted with :eyes: in Slack

Removing the reaction removes the mini-comment. Reactions on the anchor message itself create a mini-comment on the Jira issue (not on a specific comment).

Why opt-in On busy channels, reactions are sometimes accidents (a misclick on :100: instead of :+1:). Most teams don't want a Jira mini-comment for every accidental reaction. The default OFF respects that.

Customisable templates and emoji-to-transition mapping live in the same project-settings page. Examples:

Limitation: sync is one-way (Slack → Jira). Native Jira comment reactions aren't yet exposed via Atlassian's public API (JRACLOUD-78153); when that ships, the reverse direction is a 1–2 day update.


@-mentions cross the boundary

Slack @alice in a synced message becomes a real clickable Jira mention if Alice's Slack email matches her Jira account email — and vice versa. The mention pings the right person on the destination side.

Three-tier graceful fallback (no admin action required):

  1. Match. Emails align on both sides → real ping with a clickable link.
  2. Display-name fallback. Email aligns on one side but not the other → the message renders as @DisplayName plain text (no ping, but readable).
  3. Literal fallback. No email available → the message renders the original ID (@U12345 in Jira or @accountid in Slack).

Lookups are cached for 24 hours per workspace. Up to 10 distinct mentions resolve per comment (Cloudflare subrequest cap).

Privacy Emails live only in your workspace's own encrypted database, with a 24-hour TTL, and are CASCADE-deleted when the workspace uninstalls. We never aggregate emails across tenants. See Privacy Policy §5 for the full PII boundary.

Files, screenshots, inline images

File attachments sync in both directions:

Cap: 5 files × 2 MB each per comment Files over the cap are dropped (Slack→Jira) with an ephemeral warning to the uploader explaining what happened. Best-effort: a failed file upload doesn't abort the comment delivery — the text still syncs.

Inline images. When you attach an image (PNG, JPEG, JPG, GIF, WebP) to a Jira comment, it renders inline in the Jira comment body — not just in the Attachments tab. SVG and other formats aren't inlined for security reasons but still appear as attachments.

Why the cap? Threadmaker forwards file bytes through the Cloudflare Workers + Atlassian Forge proxies, both of which have fixed body-size budgets. The 5×2 MB shape covers the vast majority of triage attachments (screenshots, log snippets, PDFs, small CSVs). For large files (videos, log dumps, full database dumps), upload to your team's storage system and paste a link in the comment.


Per-project configuration

Every behaviour is per-project. Open Project settings → Threadmaker in Jira to configure:

Per-project settings, defaults, and when to change them.
SettingDefaultWhat it does
Enabled OFF Master kill switch. When OFF, no syncing happens regardless of other settings. Turn ON when you finish configuring.
Sync edits and deletes ON Bidirectional propagation of edits and deletes. Turn OFF if your team needs Jira comments to be immutable.
Sync anchor field updates ON Live updates to the anchor message when type / status / priority / assignee / summary change in Jira. See live status.
Sync Slack reactions to Jira OFF Mini-comments + emoji transitions. See reactions.
Allow Slack to create Jira issues OFF Enables /jira-create for this project. See /jira-create.
JSM: post Slack comments as internal OFF JSM only. When ON, Slack-side comments land as agent-internal (not customer-visible). Default OFF = customer-visible.
Anchor template 2-line default Customise the anchor format. Live preview in the settings page. Required vars: {{issue.key}}, {{issue.url}}.
Slack-comment template (Jira side) [{{slack.author}} via Slack] {{slack.text}} How a Slack reply renders as a Jira comment. Vars: slack.author, slack.text, slack.channel.{id,name}, slack.message.{url,ts}. The {{tm.marker}} token is mandatory — it powers idempotent recovery on retry.
Reaction-comment template (Jira side) Sensible default Active only when reaction sync is ON. Vars: reaction.{emoji,actor,link,targetUrl}.
Reaction transitions Empty JSON map of emoji → Jira transition name. When set, reacting with that emoji moves the issue. Up to 20 entries.

Saving any setting pushes the change to the Threadmaker backend within seconds. Workspace admins on the Slack side don't need to do anything — the new behaviour applies to the next event.


App Home tab in Slack

Open Threadmaker from the Slack sidebar (or Apps → Threadmaker) to see the App Home tab:


Glossary

Anchor message
The thread root posted by Threadmaker when the first Jira activity hits a mapped channel. Displays the issue key, summary, type, status, priority, and assignee. All synced comments become replies to this message. Updated in place when Jira fields change.
Mapped channel (or "paired channel")
A Slack channel linked to a Jira project via /jira-map. Issues from that project create anchor messages in that channel. One channel = one project.
Connection token
A UUID generated at OAuth that pairs a Slack workspace with its Forge plugin. The Slack workspace admin pastes this token into Apps → Threadmaker (Global) in Jira admin. Rotatable from the App Home tab.
Marker
An invisible token (e.g. [sync:T08LX:C012:1700000000.000000]) embedded at the end of synced messages. Lets Threadmaker recover from partial failures by finding the right Jira comment on retry. The {{tm.marker}} template variable inserts it.
Live updates
The behaviour where an anchor message in Slack edits itself when the underlying Jira issue's status, type, priority, or assignee changes. Toggle in Project settings → Sync anchor field updates.

Pricing tiers

Threadmaker is free for 1–10 users. Paid tiers (Team / Business / Enterprise) bill through the Atlassian Marketplace by Jira user count; no feature gates — every tier gets the full feature set (edit sync, reactions, /jira-create, custom templates, live anchors). The Slack app itself is always free; Atlassian handles the billing.

See threadmaker.dev pricing for tier details, annual discounts, and the 7-day trial.


Roadmap and current constraints

Coming soon

Architecture constraints (not priorities)


Disable or uninstall cleanly

You can back out of Threadmaker without losing data. Three levels:

For an immediate full-data wipe (GDPR data-subject request), email contact@cinderlab.io with subject "Data deletion request" — we'll purge all workspace data within 30 days.


Troubleshooting

Comments aren't syncing

  1. Run /jira-audit in the channel — it shows the last 20 sync events including failures. Check for any "failed" rows.
  2. Confirm the channel is paired: re-run /jira-map PROJ and look for the "channel paired to PROJ" confirmation.
  3. Confirm the project is enabled in Project settings → Threadmaker.
  4. Confirm the bot is invited to the channel (/invite @Threadmaker) — Slack bots only receive events from channels they're a member of, both public and private.
  5. Check the App Home tab for a license-paused banner. A lapsed Atlassian Marketplace subscription pauses sync after a 7-day grace period.

The anchor message shows the wrong status

The anchor was likely created before live updates landed (v1.16+), or live updates are disabled in Project settings → Sync anchor field updates. Manually re-run any operation on the issue (add a comment, transition it) to trigger a fresh anchor render. Or re-enable the toggle.

A Jira comment didn't appear in Slack

An attachment didn't sync

Most likely it's over the 2 MB cap. Slack senders see an ephemeral warning when one or more files are dropped. Jira-side attachments over 2 MB simply don't appear in Slack — the comment text still syncs. Upload to your team's storage and paste a link.

"Sync paused" banner

The Atlassian Marketplace license has lapsed past the 7-day grace period. Reactivate the subscription in Atlassian admin to resume sync. The audit log preserves all events that fired during the grace + paused period.

Connection token leaked

Rotate it from the App Home tab → Rotate connection token. The old token becomes invalid immediately. Paste the new token in Apps → Threadmaker (Global) in Jira admin to re-establish the connection. Until you re-paste, Jira-side activity won't deliver to Slack.


Where to get help