SideButton Marketing Website Knowledge Module
Portal — Workflows — SideButton Marketing Website Knowledge Module
Workflow management page for Fleet Control -- lists all registered workflows grouped by source pack, with enable/disable toggles, role badges, descriptions, slugs, step counts, source badges, and las…
sidebutton install sidebutton.com What This Is
Workflow management page for Fleet Control -- lists all registered workflows grouped by source pack, with enable/disable toggles, role badges, descriptions, slugs, step counts, source badges, and last-updated timestamps. Each workflow links to a detail page showing the full step definition including step types (terminal.open, terminal.run, poll), agent prompts, input parameters, and configuration. Workflows are YAML-defined automation templates that get dispatched to agents as jobs.
URL Patterns
| Pattern | Description |
|---|---|
/portal/workflows | Workflow list |
/portal/workflows/{id} | Workflow detail (by numeric ID) |
Browser tab title: List = "Workflows - SideButton Fleet", Detail = "{slug} - SideButton Fleet"
Page Structure
Workflow List (/portal/workflows)
+--[Sidebar]--+--[Main Content]------------------------------------------+
| | H1: "Workflows" |
| Workflows | "N workflows" |
| (active) | "SideButton Default Pack" (pack group header) |
| | |
| | WORKFLOW SOURCE UPDATED (column headers)|
| | |
| | [Toggle] [Badge] Title [default] Nm ago |
| | Description (truncated) |
| | slug N step |
| | ... |
+-------------+-----------------------------------------------------------+
Workflow Detail (/portal/workflows/{id})
+--[Sidebar]--+--[Main Content]------------------------------------------+
| | < Back to workflows |
| Workflows | |
| (active) | H1: Workflow Description [Toggle] Enabled |
| | slug N step Created date Updated date |
| | |
| | STEPS |
| | [dot] Step Name [Role Badge] |
| | Description text |
| | |
| | input params: key: {{input.key}} |
| | |
| | [terminal.open badge] Agent: Name {{entry_path}} |
| | [terminal.run badge] |
| | Agent prompt text (full instructions) |
| | |
| | [dot] Monitor task reports [poll badge] |
| | Poll description |
| | |
| | RECENT JOBS |
| | [dot] slug — {ticket_key or 'queued'} #ID time ago |
| | ... |
+-------------+-----------------------------------------------------------+
Key Elements
Workflow List
| Element | Selector / Ref | Notes |
|---|---|---|
| Page heading | heading "Workflows" | H1 |
| Workflow count | Below heading | "N workflows" |
| Pack group header | Below count | Pack source names joined by " · " — e.g. "SideButton Default Pack · venmate-skill-packs-main (2)". Shows all registered packs with workflow counts for non-default packs |
| Column headers | Above first row | "WORKFLOW", "SOURCE", "UPDATED" |
| Enable/disable toggle | button "Disable workflow {slug}" | Green toggle switch per row; toggles workflow enabled/disabled state. Button label always says "Disable workflow {slug}" regardless of current state (enabled or disabled) — cannot determine toggle state from accessibility tree |
| Workflow row | link (each workflow) | Clickable, navigates to /portal/workflows/{id} |
| Role badge: PM | Purple circle with "PM" | Project Management workflows |
| Role badge: QA | Purple circle with "QA" | Quality Assurance workflows |
| Role badge: SE | Green circle with "SE" | Software Engineering workflows |
| Role badge: SD | Orange circle with "SD" | Skill Discovery workflows |
| Role badge: OPS | Green circle with "OPS" | Operations workflows |
| Workflow title | Bold text | e.g. "PM Agent: Drive Ticket" |
| Workflow description | Grey text below title | Truncated with "..." if long |
| Workflow slug | Grey monospace text | e.g. "pm-drive" |
| Step count | Grey text | "N step" |
| Source badge | Grey pill | "default" for built-in workflows |
| Relative time | Right column | "Nm ago" or "Nh ago" |
Workflow Detail
| Element | Selector / Ref | Notes |
|---|---|---|
| Back link | link "Back to workflows" | Chevron left + text, returns to list |
| Workflow description (H1) | heading | H1 with full workflow description (NOT the short title) |
| Enable/disable toggle | button "Disable workflow" | Green toggle next to H1, shows "Enabled" or "Disabled" text. Button label always says "Disable workflow" regardless of current state — use visible "Enabled"/"Disabled" text to determine state, not button label |
| Slug | Monospace text | Workflow slug identifier |
| Step count | Text | "N step" |
| Created date | Text | "Created M/D/YYYY, H:MM:SS AM/PM" |
| Updated date | Text | "Updated M/D/YYYY, H:MM:SS AM/PM" |
| STEPS section | "STEPS" label (uppercase) | Contains all step definitions |
| Step indicator | Blue dot | Left of step name |
| Step name | Bold in step area | e.g. "PM Agent: Drive Ticket", "SE Agent: Implement Fix + PR" |
| Step role badge | [PM] / [QA] / [SE] / [SD] / [OPS] | Small role pill next to step name |
| Step description | Text below name | Workflow description repeated |
| Input params | key: {{input.key}} format | Template variables for job dispatch (e.g. ticket_url, hint) |
| Step type: terminal.open | Green/teal terminal.open badge | Opens terminal on agent, shows "Agent: {Name}" + {{entry_path}} |
| Step type: terminal.run | Red/coral terminal.run badge | Contains full agent prompt/instructions in dark code block |
| Step type: poll | poll badge | "Monitor task reports" with polling description |
| RECENT JOBS section | "RECENT JOBS" label (uppercase) below steps | List of recent job executions for this workflow (up to 10 shown) |
| Recent job row | link per job | Color-coded status dot + "slug — {ticket_key or 'queued'}" (bold) + #ID + relative time; links to /portal/jobs/{id} |
| Job status dot: running | Red/orange dot | Currently executing job |
| Job status dot: completed | Green dot | Successfully completed job |
| Job status dot: failed/cancelled | Grey dot | Failed, timed-out, or cancelled job |
Data Model
Workflow
| Field | Type | Description |
|---|---|---|
| id | number | Workflow ID (auto-increment, changes when workflows are re-registered; e.g. 259-270 as of 2026-04-02) |
| title | string | Short title (e.g. "PM Agent: Drive Ticket") — shown on list |
| description | string | Full description — shown as H1 on detail page and as subtext on list |
| slug | string | URL-safe identifier (e.g. "pm-drive") |
| role | string | "pm" / "qa" / "se" / "sd" / "ops" |
| enabled | boolean | Whether workflow is active (toggle state) |
| source | string | Source pack name (e.g. "default", "venmate-skill-packs-main") |
| step_count | number | Number of steps (always shows "1 step") |
| created_at | string (datetime) | Creation timestamp |
| updated_at | string (datetime) | Last update timestamp |
Workflow Step
| Field | Type | Description |
|---|---|---|
| name | string | Step display name (e.g. "SE Agent: Implement Fix + PR") |
| role | string | Step role identifier |
| description | string | Step description |
| type | string | "terminal.open" / "terminal.run" / "poll" |
| agent_name | string | Agent label for terminal steps (e.g. "Agent: SE Work") |
| path | string | Working directory — usually {{entry_path}} template variable; pull-repos uses fixed ~/workspace |
| prompt | string | Full agent prompt/instructions for terminal.run steps |
| input | object | Template input parameters ({{input.key}} syntax) |
Known Workflows (as of 2026-03-24)
| Slug | Role | Title | Has Inputs | Agent Name |
|---|---|---|---|---|
| pm-drive | PM | PM Agent: Drive Ticket | Yes (ticket_url, hint) | Agent: PM Drive Ticket |
| pm-sprint | PM | PM Agent: Sprint Lifecycle | Yes (hint) | Agent: PM Sprint Lifecycle |
| pull-repos | OPS | Ops: Pull All Repos | No | Agent: Pull All Repos |
| qa-followup | QA | QA: Re-review PR After Fixes | Yes (ticket_url, hint) | Agent: QA Re-review PR |
| qa-new-ticket | QA | QA: Test Live Site (New Ticket) | Yes (ticket_url, hint) | Agent: QA Test Live |
| qa-regression | QA | QA: Regression Test (Live Site) | Yes (ticket_url, hint, depth) | Agent: QA Regression (Live) |
| qa-validate | QA | QA: Review PR Fix | Yes (ticket_url, hint) | Agent: QA Review PR Fix |
| sd-coverage | SD | SD Agent: Fill Skill Module | Yes (hint) | Agent: SD Coverage |
| se-followup | SE | SE Agent: Apply Review Feedback | Yes (ticket_url, hint) | Agent: SE Followup |
| se-rca | SE | SE Agent: Root Cause Analysis | Yes (ticket_url, hint) | Agent: SE RCA |
| se-rca-fix | SE | SE Agent: RCA + Fix + PR | Yes (ticket_url, hint) | Agent: SE RCA+Fix |
| se-work | SE | SE Agent: Implement Fix + PR | Yes (ticket_url, hint) | Agent: SE Work |
States & Variations
| State | Trigger | Visual Indicator |
|---|---|---|
| List view | /portal/workflows | All workflows listed with toggles, role badges, source badges |
| Detail view | /portal/workflows/{id} | Full step definition with prompts |
| Workflow enabled | Default state | Green toggle, "Enabled" text on detail |
| Workflow disabled | Toggle clicked | Toggle off state, "Disabled" text on detail |
| With recent jobs | Workflow has been executed | "RECENT JOBS" section at bottom with job links |
| Without recent jobs | No executions yet | No recent jobs section shown |
| Workflow with standard inputs | Has ticket_url + hint params | Two input param lines below step description (most SE/QA workflows) |
| Workflow with hint only | Has hint param only | Single input param line (pm-sprint, sd-coverage) |
| Workflow with extra inputs | Has additional params beyond standard | e.g. qa-regression shows depth param alongside ticket_url and hint |
| Workflow without inputs | No input params (pull-repos) | No input params section |
| Recent jobs: running | Job currently executing | Red/orange status dot |
| Recent jobs: completed | Older finished jobs | Green status dot |
| Recent jobs: failed/cancelled | Timed-out, errored, or cancelled jobs | Grey status dot |
| Invalid workflow ID | Navigate to /portal/workflows/99999 | Redirects to workflow list (no error page) |
| Long description | Workflow with long description | Truncated with "..." on list, full text as H1 on detail |
| Long H1 in accessibility tree | Detail page with long description | H1 text truncated in accessibility snapshot (e.g. "Find the lowest-coverage module, explore it in the browser, improve its skill fi") — full text in page content |
| Multi-pack header | Multiple pack sources registered | Pack group header shows all pack names joined by " · " with counts for non-default packs |
| Toggle updates timestamp | Toggle enabled/disabled on any workflow | UPDATED column refreshes to "Just now" on list page |
Common Tasks
1. Browse workflows
- Navigate to
/portal/workflows - See all workflows grouped by pack ("SideButton Default Pack")
- Column headers: WORKFLOW, SOURCE, UPDATED
2. View workflow detail
- Click any workflow row (the
linkelement, not the toggle) - See full step definitions, input parameters, agent prompts
- Back link at top returns to list
3. Enable/disable a workflow
- On list page: click the toggle switch (left of role badge) for the target workflow
- On detail page: click the toggle next to the H1 heading
- Toggle text changes between "Enabled" / "Disabled"
4. Understand workflow steps
- On detail page, read the STEPS section
terminal.open= opens a terminal session on the agent at{{entry_path}}terminal.run= executes the agent prompt (main work instructions)poll= monitors for task completion (15s interval, 2h timeout)
5. View recent job history for a workflow
- On detail page, scroll to "RECENT JOBS" section
- Each row shows: color-coded status dot + "slug — {ticket_key or 'queued'}" + job ID + relative time
- Click any job row to navigate to
/portal/jobs/{id}
Tips
- Workflows are organized by role: PM (planning), QA (testing), SE (engineering), SD (skill discovery), OPS (operations)
- The
terminal.runstep contains the full agent prompt -- this is the main instruction set - Input parameters use
{{input.key}}template syntax and are filled at dispatch time {{entry_path}}in terminal.open is resolved at dispatch time based on agent configuration- Workflow IDs are numeric (not slugs) in the URL pattern
- Role badges are color-coded: PM/QA use purple circles, SE/OPS use green circles, SD uses orange
- The H1 on the detail page is the workflow description, not the short title
- Source badges show "default" for built-in workflows from SideButton Default Pack
- Browser tab title on detail pages uses the workflow slug (e.g. "pm-drive - SideButton Fleet")
Gotchas
- H1 is the description, not the title: The detail page H1 shows the full description text (e.g. "Drive a ticket to completion — plan, dispatch SE/QA, track PRs, merge, validate, close. Idempotent."), not the short title ("PM Agent: Drive Ticket"). The short title appears as the step name instead.
- "Enabled" not "Active": Status is shown as a toggle switch with "Enabled"/"Disabled" text, not a green "Active" badge as in older versions
- Toggle vs row click: The enable/disable toggle and the workflow row link are separate clickable elements — clicking the toggle does not navigate to the detail page
- URL uses numeric ID: Workflow detail URL uses numeric IDs (
/portal/workflows/247not/portal/workflows/pm-drive) - Invalid ID redirects: Navigating to a non-existent workflow ID (e.g.
/portal/workflows/99999) silently redirects to the workflow list — no error page or toast - No create/edit UI: The workflow list page has no "New Workflow" button -- workflows are managed via YAML files and the SideButton CLI, not through the portal UI
- Step type badges are color-coded:
terminal.open= green/teal,terminal.run= red/coral,poll= grey — all monospace font - Full prompts visible: The detail page shows the complete agent prompt text for
terminal.runsteps in a dark code block — these can be very long - No filter/search: Unlike Jobs and Queue, the workflow list has no status filter tabs, search box, or dropdown filters
- All workflows show "1 step": The step count shows "1 step" even though workflows have multiple sub-steps (terminal.open, terminal.run, poll) — this represents one logical agent task
- Recent Jobs format: Only appears on detail page for workflows that have been executed; shows up to 10 jobs. Format is "slug — {ticket_key or 'queued'}" with color-coded dots (red/orange=running, green=completed, grey=failed/cancelled). The text after "—" shows the job source label, NOT the execution status — status is indicated only by dot color. Each row links to
/portal/jobs/{id} - Descriptions truncated on list: Long workflow descriptions are truncated with "..." on the list page; full text shown on detail page as H1
- entry_path is a template variable: The terminal.open path shows
{{entry_path}}which is resolved at dispatch time — except pull-repos which uses the fixed path~/workspace - Input params vary by workflow: Not all workflows use ticket_url + hint. pm-sprint and sd-coverage only have
hint; qa-regression adds adepthparam; pull-repos has no inputs at all - Agent names are unique per workflow: Each workflow shows a distinct agent name in terminal.open (e.g. "Agent: SE Work", "Agent: QA Regression (Live)") — these correspond to agent configurations in Fleet Control
- Toggle button label never changes: On the list page, the button always reads
"Disable workflow {slug}"and on the detail page"Disable workflow"— regardless of whether the workflow is currently enabled or disabled. You cannot determine the toggle state from the accessibility tree; use the visible "Enabled"/"Disabled" text or screenshot instead - Toggle updates updated_at: Toggling enabled/disabled immediately updates the workflow's
updated_attimestamp, which shows as "Just now" in the UPDATED column - Multi-pack header: The pack group header now shows all registered pack sources joined by " · " (e.g. "SideButton Default Pack · venmate-skill-packs-main (2)") with counts for non-default packs. Previously documented as only "SideButton Default Pack"
- Workflow IDs are dynamic: IDs change when workflows are re-registered (e.g. after reinstall). Don't hardcode IDs in tests — navigate via list page click instead
- Long H1 truncation in accessibility tree: Detail page H1 for workflows with long descriptions gets truncated in the accessibility snapshot. Use
snapshot(includeContent=true)to get the full text from page content - Recent jobs ordered by time, not ID: Recent jobs are sorted by most recent execution time, not by job ID. IDs may appear out of sequence within the same time period