One-tap capture
The fastest way to log a decision is also the simplest: react to any Slack message with the 📝 emoji. TrailMark picks it up instantly and saves it to the linked project — no modal, no context switching, no friction.
TrailMark is fully idempotent. React with 📝 twice and only one decision is ever created. Remove and re-add safely.
When the channel is linked to exactly one project the decision saves automatically. For multi-project channels TrailMark DMs you a private picker.
- Idempotent — same reaction applied twice creates exactly one decision
- Auto-save — zero clicks when channel maps to a single project
- Disambiguation — private picker DM when multiple projects share the channel
- Zero config — works as soon as a channel is linked to a project
@mention commands
Mention @TrailMark in any channel or DM to interact with your decisions in conversational commands. Responses appear in-thread or as ephemeral messages visible only to you.
Attach workstream tags inline at save time and filter by tag when listing. All the same access rules apply: channel member or project owner.
- save [Title] [#tag] — capture or open full modal
- list <project> [#tag] — paginated list, filterable by tag
- export <project> — generate & post grouped PDF
- create project / add channel — admin via mention
- list deleted <project> — view audit log
- help — full command reference (ephemeral)
| 💾 | @TrailMark save | Open capture modal |
| 💾 | @TrailMark save T #tag | Save with title & tag |
| 📋 | @TrailMark list <proj> | List decisions |
| 📋 | @TrailMark list <proj> #t | Filter by tag |
| 📄 | @TrailMark export <proj> | Generate PDF |
| ➕ | @TrailMark create project | New project modal |
| 🔗 | @TrailMark add channel | Link this channel |
| 🗑️ | @TrailMark list deleted | View audit log |
| ❓ | @TrailMark help | Command reference |
Message shortcut
Right-click (or long-press on mobile) any Slack message, choose More message shortcuts → Log as decision, and a rich capture modal opens pre-filled with everything TrailMark already knows.
The modal gives you full control: message text pre-filled, original author as source, thread participants added to "Decided by". Edit any field before saving.
Supports: title, decision text, project, status, rationale, alternatives, decided-by, and workstream tags. All fields except title are optional and editable later.
- Pre-filled modal — message text, author, thread participants auto-populated
- Full field set — title, body, project, status, rationale, alternatives, decided-by, workstreams
- Status tracking — proposed / approved / rejected / superseded
- Editable later — every field updatable via Edit button in list view
@mention commands
Every command runs through an @mention — in a channel, a thread, or a DM with the bot. Responses are ephemeral (visible only to you) unless the command produces a file upload like a PDF.
List, search, export, audit, and all admin operations are available this way. Admin commands require project owner or Slack workspace admin. Destructive commands (delete-project) cannot be undone.
Pagination is built in for list results — up to 10 decisions per page with inline Edit and Delete buttons.
- @TrailMark list — paginated, filterable with inline Edit/Delete
- @TrailMark search — full-text search across every accessible project
- @TrailMark export — one command to generate and post a formatted PDF
- @TrailMark deleted — read-only view into the soft-delete audit log
- @TrailMark create project — guided modal for new project
- @TrailMark delete-project — permanently removes project (irreversible)
- @TrailMark link-channel — manage channel links per project
- @TrailMark configure-digest — schedule a recurring digest
| Command | What it does |
|---|---|
| @TrailMark list <proj> | Paginated list + Edit/Delete |
| @TrailMark search <q> | Full-text across all projects |
| @TrailMark export <proj> | Generate & post PDF |
| @TrailMark deleted <proj> | View audit log |
| @TrailMark create project | New project modal |
| @TrailMark delete-project | ⚠️ Permanent delete |
| @TrailMark link-channel | Add/remove channel link |
| @TrailMark configure-digest | Schedule digest |
Projects & access control
Everything in TrailMark is organized around projects — named collections of decisions scoped to your workspace. Each project has a single owner and one or more linked Slack channels.
Access is channel-based: any member of a linked channel can read the project's decisions. Write access is more granular — only the author, project owner, or workspace admin can edit or delete.
- Channel-based access — in the channel = can read. No roles to configure.
- Granular write control — only author, owner, or workspace admin can modify
- Workspace-scoped — projects never leak across Slack workspaces
| Action | Author | Owner | WS Admin | Member |
|---|---|---|---|---|
| Read decisions | ✓ | ✓ | ✓ | ✓ |
| Edit decision | ✓ | ✓ | ✓ | ✗ |
| Delete decision | ✓ | ✓ | ✓ | ✗ |
| Export PDF | ✓ | ✓ | ✓ | ✓ |
| Delete project | ✗ | ✓ | ✓ | ✗ |
Workstreams (tags)
Workstreams let you tag decisions with meaningful labels so you can filter lists and produce organized PDF exports. Tags are lowercase, hyphenated strings — ideal for reflecting the natural workstreams your team operates in.
Assign tags at capture time via modal, @mention inline, or slash commands — or add them later through the Edit modal. Each decision supports up to 5 workstream tags, each up to 40 characters.
In PDF exports, decisions are automatically grouped by workstream section, then by status within each section.
- Up to 5 tags per decision, each up to 40 characters
- Inline tagging via @mention inline (
@TrailMark save Title #tag) - Filterable lists — filter by tag with
@TrailMark list <project> #tag - PDF grouping — exports organized by workstream section automatically
PDF export
Generate a complete, formatted PDF of any project's decisions with a single command. The PDF is built server-side and uploaded directly to the Slack channel — no downloads, no email attachments, no manual formatting.
Decisions are grouped first by workstream, then by status within each section. Each entry shows title, source author, decided by, and the capture date. Long text is truncated for readability.
The file appears in the channel as a regular Slack file upload — anyone in the channel can view and download it immediately.
- One command —
@TrailMark export <project> - Grouped layout — organized by workstream, then status
- Full metadata — title, source, decided-by, date per entry
- Long-text truncation — readability preserved on large projects
Audit log
TrailMark never truly deletes a decision. When any decision is removed — by the author, project owner, or workspace admin — it is moved to a separate, append-only audit store rather than erased.
The audit record captures who deleted the decision and when, alongside the full decision payload at the time of deletion. Tamper-proof history for compliance, post-mortems, and understanding why a direction changed.
Viewing the log requires the same access as reading live decisions. The log is read-only — deleted decisions cannot be restored from the UI.
- Soft deletes only — no decision is ever permanently erased from the audit store
- Who & when — every audit entry records the deleting user and timestamp
- Full payload preserved — title, body, status, tags, decided-by all retained
- Read-only log — append-only, cannot be modified after the fact