Smart Replace

Paste a plain-text task tree with inline markers — Smart Replace scans every row, matches each token against your live Jira project, and converts them to real issue-type, priority, assignee, and date pills in one batch.

It works for any paste — a template you stored, a wiki page, a one-off meeting note, or rows you typed five minutes ago. As long as the text carries the markers, Smart Replace converts it. Templates use it to stay reusable; ad-hoc lists use it to skip the create-then-edit step.

When you paste a structured task list into SuperTemplates, Smart Replace reads each row for four kinds of inline markers. It matches them against your project's actual Jira data — issue types, priorities, team members, custom date fields — and gives you a review dialog where you confirm or adjust every match before anything is written. No tokens end up in your issue titles; every marker becomes a typed Jira field value.

You can already shift-click 30 rows in the SuperTemplates editor and bulk-assign five fields in seconds. Smart Replace removes even that step: the markers travel inside the pasted text, so issue type, priority, assignee, and dates are read off each row at paste time — every row arrives in the editor already typed. You skip the select-and-bulk-edit pass entirely.

Smart Replace review dialog — pattern column on the left lists detected markers (issue types, priorities, assignees), centre column shows what each maps to in Jira, right column has per-row apply checkboxes.
The review dialog after a paste. Every detected marker is grouped by type, mapped to a Jira value, and individually toggleable before you click Apply Changes.

Sample paste-tree — markers highlighted. Type comes from the marker, parent comes from the line above:

paste-tree8 lines
1[#epic] Release v2.4.0 !High
2[#task] Code Freeze @release_lead !High [Due + 0d]
3[#subtask] Cut release branch @release_lead !High [Due + 0d]
4[#subtask] Bump version numbers @release_lead !Medium [Due + 1d]
5[#task] QA & Regression @qa_lead !Highest [Due + 2d]
6[#subtask] Run full regression suite @qa_lead !Highest [Due + 3d]
7[#subtask] UAT sign-off @product_owner !High [Due + 5d]
8[#task] Production Deploy @release_lead !Highest [Due + 10d]

Smart Replace recognises exactly four token shapes. Every match requires a word-boundary prefix — tokens inside email addresses or URLs are skipped.

[#issueType]Issue type pill — matched against your project's Jira issue types.
Examples: [#epic] [#task] [#subtask] [#bug]
@nameAssignee pill — matched to a Jira member, or saved as a template variable to fill once.
Examples: @alice @release_lead @john.doe
!PriorityPriority pill — matched to your Jira priority scheme.
Examples: !Highest !High !Medium !Low !Lowest
[Field + Nd]Date pill with offset. Units: d (days), w (weeks), m (months), bd (business days). Plus or minus.
Examples: [Due + 5d] [Due + 2w] [Start + 5bd] [Due - 1d]

Pro tip: The leading # in [#issueType] is optional — a bare [Task] works the same way. The @name token accepts letters, digits, dots, and underscores — @jane.smith, @john_doe. URLs and email addresses are skipped.

Smart Replace runs entirely inside the SuperTemplates editor — no separate import screen. The whole flow takes under a minute.

1

Paste your task tree

Copy text that already contains Smart Replace markers — a template from this library, a paste-tree from a wiki, or rows you wrote with the four marker shapes — and paste into the SuperTemplates editor. Plain prose without markers won't be converted.

2

Select the rows you want to convert

Smart Replace runs on a selection. When importing a template, select all rows (Cmd/Ctrl-A inside the editor). To convert only part of an existing tree, highlight just those rows.

3

Click "Smart Replace" in the toolbar

The wand icon (✦) in the editor toolbar scans the selected rows, detects every marker, and opens the review dialog.

4

Review the detected patterns

A dialog lists every unique marker with the best Jira match pre-selected. Exact matches are auto-checked, ambiguous ones wait for you. Override any suggestion or skip a token to be ignored.

5

Map @mentions (if any)

For each @name token the dialog shows matching Jira project members and pre-selects the best one. You confirm or override. In the template editor you also get + Variable / All → Variables buttons to convert mentions into reusable placeholders.

6

Click "Apply"

Every confirmed match is replaced in-place: the raw text token is removed and a typed pill is inserted. Priority, issue type, assignee, and date pills all map directly to Jira fields when issues are created.

Two rules: the marker sets the type, and line order sets the parent.

marker → type · line order → parent
[#epic] Release v2.4.0
[#task] Code Freeze
[#subtask] Cut release branch
[#subtask] Bump version numbers
[#task] QA & Regression
[#subtask] Run regression suite

Each Subtask attaches to the Task above it. Each Task attaches to the Epic above it.

Where does the Epic go?

One Epic can only contain its own children — it does not span unrelated tasks. Place it according to the scope it actually covers:

All tasks belong to one Epic
[#epic] Release v2.4.0
  [#task] Code Freeze
  [#task] QA & Regression
  [#task] Production Deploy

One Epic on top, all Tasks underneath as children.

Different tasks → different Epics
[#epic] Frontend Refactor
  [#task] Migrate auth UI
  [#task] Refresh dashboard

[#epic] Backend Hardening
  [#task] Rotate keys
  [#task] Patch CVEs

Each Epic owns only its own children. Start a new Epic line when the next group of Tasks belongs to a different theme.

Rule of thumb: an Epic ends where the next Epic begins. If a Task shouldn't belong to the Epic above it, start a new Epic line before that Task — don't leave it hanging under an unrelated parent.

Pro tip: Each line's parent is the most recent line above it with a higher-level issue type. Lines without a marker are left as plain text and not converted into issues.

Smart Replace always tries to match an @name against members of your Jira project first. What you can do with it afterwards depends on where you're pasting.

Normal editor

Always assigns to a Jira member.

Use a real handle — @jane.smith, @john_doe. If a match is found, it's pre-selected; the accountId is baked into the issue. No Variable option.

@jane.smith → Jane Smith (assignee)
Template editor

Member match + Variable option.

Same lookup runs. If the name matches a member they're pre-selected — you can keep them or click Create Variable… in the picker to convert. If the name has no match (a role like @release_lead), the row is unresolved and + Variable / All → Variables buttons appear right there.

@jane.smith       → Jane Smith (member)
@john_doe         → John Doe   (member)
@release_lead     → $release_lead  (variable)
@reviewer         → $reviewer      (variable)

A Variable propagates by name. If @release_lead appears on 27 lines and you promote it once, the template shows a single "release_lead" user picker when applied. One pick fills all 27 rows.

Member-matching (both modes) goes: exact strong (prefix) likely (contains) no match (you pick from the list).

Variable lifecycle

  1. 1

    Paste

    @release_lead appears 27 times in your text.

    [#task] Cut release branch @release_lead !High
  2. 2

    Promote to Variable

    Click + Variable (or All → Variables) in the modal. The token becomes a placeholder.

    [#task] Cut release branch $release_lead !High
  3. 3

    Save the template

    release_lead is stored once in the template's variables list — not 27 times.

    template.variables → [{ key: 'release_lead', type: 'user' }]
  4. 4

    Use the template

    Anyone using the template sees one user picker for release_lead. One pick — all 27 rows resolve together.

    release_lead → @Jane Smith   (× 27 rows in one pass)

Dots and underscores work the same: @john.doe and @john_doe both map to a member named "John Doe". Jira's native [~accountId] mention syntax is recognised too.

Pro tip: Variables are visually distinct from member mentions — $$release_lead (violet) for placeholders, @Jane Smith (blue) for resolved members.

The bracket date syntax [Due + 5d] expresses a date relative to an anchor, not an absolute date.

[Due + 0d]The anchor task — sets the reference date.
[Due + 2d]Due 2 calendar days after the anchor.
[Due + 1w]Due 1 week (7 days) after the anchor.
[Due + 5bd]Due 5 business days after the anchor (skips weekends).
[Due + 1m]Due 1 month after the anchor.
[Due - 1d]Due 1 day before the anchor (negative offsets work).

When Smart Replace detects a group of offset tokens on the same Jira date field (e.g. multiple [Due + Nd] rows), it groups them together. You pick one anchor date — either by selecting an existing template variable or creating a new one — and all other offsets in the group are resolved relative to it automatically.

In the template editor, the anchor can be saved as a named date variable (e.g. Sprint Start). Each time the template is used, the user sets that one date and every offset resolves from it. The bd unit (business days) skips weekends.

Pro tip: Field names are forgiving — [Due + 3d], [Due Date + 3d], and [Release Date + 3d] each map to the closest date field in your project.

Smart Replace is intentionally narrow. These formats are not supported:

{{variable}}Double-curly placeholders are not detected. Use the four marker shapes above instead.
${variable}Dollar-curly placeholders are not detected by Smart Replace.
Plain proseLines without any marker are left untouched. Smart Replace only converts lines that contain at least one marker.
[PROJ-123]Jira issue-key brackets are not parsed as links by Smart Replace. They will be treated as a bracket token; usually with no match — harmless. Add real issue links after import.

Try it with a real template

Open the Release Preparation template in the template library — it ships with all four marker types pre-filled. Copy it, paste it into the SuperTemplates editor, and hit Smart Replace to see the full flow live.