S

SideButton Marketing Website Knowledge Module

Portal — Settings — SideButton Marketing Website Knowledge Module

Settings page for Fleet Control -- a multi-tab configuration interface for managing the fleet. Seven tabs: General (LLM provider, model, API key, effort level), Agents (per-agent config with roles, e…

Available free v1.0.3 Browser
$ sidebutton install sidebutton.com
Download ZIP
/portal/settings 98% confidence Verified 2026-04-02

What This Is

Settings page for Fleet Control -- a multi-tab configuration interface for managing the fleet. Seven tabs: General (LLM provider, model, API key, effort level), Agents (per-agent config with roles, entry paths, env vars, RDP downloads, avatar picker, danger zone), Assistant (chat bot name, persona prompt, avatar URL), Issue Tracking (Jira credentials, webhook URL, deploy/test webhook), Slack (channel connections with bot token setup and live testing), Knowledge Packs (default pack status, ZIP upload, workflow list), and Logs (incoming webhook event history with MATCH/SKIP status, pagination, and matched-only filter). All tabs have editable forms with save feedback. Tabs are deep-linkable via URL query parameter.

URL Patterns

PatternDescription
/portal/settingsSettings page (General tab default)
/portal/settings?tab=generalGeneral tab (explicit)
/portal/settings?tab=agentsAgents tab
/portal/settings?tab=assistantAssistant tab
/portal/settings?tab=integrationsIssue Tracking tab
/portal/settings?tab=slackSlack tab
/portal/settings?tab=knowledge-packsKnowledge Packs tab
/portal/settings?tab=logsLogs tab (was ?tab=webhook-logs)

Page Structure

+--[Sidebar]--+--[Main Content]------------------------------------------------------------------+
|             |  H1: "Settings"                                                                   |
|  Settings   |                                                                                   |
|  (active)   |  [Tab Bar: General | Agents | Assistant | Issue Tracking | Slack | Knowledge Packs | Logs]        |
|             |  (horizontal scrollbar when narrow viewport)                                      |
|             |                                                                                   |
|             |  [Tab Content -- varies by active tab]                                            |
+-------------+-----------------------------------------------------------------------------------+

General Tab

|  LLM Provider [dropdown]    Model [text input]          |
|  API Key [password input]                               |
|  "API key is configured" (green) or "Platform key       |
|   active — add your own to override"                    |
|  Default Effort Level: [Max] [High] [Medium] toggles    |
|  "Max / High = Opus, Medium = Sonnet..."                |
|  [Save] button   [status: Saving.../Saved/error]        |

Agents Tab

|  "Manage agent roles, entry paths, environment config,  |
|   and download RDP shortcuts."                          |
|                                                         |
|  [Owned Agent Card]                                     |
|    [Set avatar] display-name [✏ Rename]                 |
|    hostname          ONLINE  [SE][QA][SD][PM]           |
|    Shared with N account(s)  [Default v]  [RDP]         |
|  [Expanded Config Panel]                                |
|    Entry Paths:                                         |
|      [x] ~/workspace  "Main"  [MCP JSON]  [Remove]     |
|      [+ Add Entry Path]                                 |
|    Environment Variables:                               |
|      [textarea: ~/.agent-env content]                   |
|    [Save] [Save & Apply]  [status text]                 |
|    Danger Zone:                                         |
|      [Reboot] [Delete]                                  |
|                                                         |
|  [Shared Agent Card]                                    |
|    [avatar] agent-name    ONLINE  "shared"  [roles]     |
|    agent-name.agents.sidebutton.com          [chevron v]|
|  [Shared Preferences Panel]                             |
|    Enabled Roles: [SE] [QA] [SD] [PM] checkboxes       |
|    Effort Level: [dropdown]                             |
|    Enabled Entry Paths: [checkboxes per path]           |
|    [Save Preferences] [Remove Shared Agent]             |
|                                                         |
|  -- or (empty state) --                                 |
|  "No agents registered yet"                             |

Assistant Tab

|  Name [text input]                                      |
|  "The name your team sees in Slack messages"            |
|  Persona [textarea]                                     |
|  "System prompt that shapes the assistant's voice       |
|   and behavior"                                         |
|  Avatar URL [text input]                                |
|  Active Role [dropdown]                                 |
|    "Skill pack role that shapes the assistant's         |
|     domain expertise"                                   |
|  [Save] button   [status: Saving.../Saved/error]        |
|                                                         |
|  ─────────────────────────────────────────────────      |
|                                                         |
|  H3: "MCP Connections"                                  |
|  "Tool sources available to the chat assistant..."      |
|                                                         |
|  [● green] SideButton Cloud          7 tools [toggle]   |
|    "Agent dispatch, workflow execution..."               |
|                                                         |
|  [● grey] Jira / Atlassian            [Configure]       |
|    "Search, create, edit, and transition..."             |

Issue Tracking Tab

|  H2: "Issue Tracking"                                   |
|  "Connect your issue tracker to enable automated        |
|   agent dispatching from ticket updates."               |
|                                                         |
|  [Jira Card]                                            |
|    [Jira icon] "Jira"                                   |
|    "Atlassian Jira Cloud"                               |
|                                                         |
|    CREDENTIALS                                          |
|    Jira URL [text input]                                |
|    Email [text input]                                   |
|    API Token [password input]                           |
|    "API token is configured" (green, when set)          |
|    [Test Connection] [Save]  [status text]              |
|                                                         |
|    WEBHOOK                                              |
|    "Configure this URL in your Jira webhook settings,   |
|     or click Deploy to register automatically."         |
|    Webhook URL [readonly input] [Copy]                  |
|    [Test Webhook] [Deploy Webhook]                      |
|    "View webhook logs >"  (link to Logs tab)            |

Slack Tab

|  H2: "Connected Channels"                              |
|  [status dot] #channel-name  Team: T0123  [Remove]     |
|  -- or --                                               |
|  "No channels connected yet."                           |
|                                                         |
|  H2: "Add Channel"                                      |
|  Team ID [text]  Channel ID [text]                      |
|  Channel Name [text]                                    |
|  Bot Token [password]                                   |
|  Signing Secret [password]                              |
|  Bot User ID [text]                                     |
|  [Add Channel] [Test Connection]                        |
|  [test status: "Connected: {team} ({user})"]            |
|                                                         |
|  > Slack App Setup Guide (expandable)                   |

Knowledge Packs Tab

|  H3: "Knowledge Pack"                                   |
|  [Status Card]                                          |
|    "Using SideButton Default Pack"                      |
|    "Default workflows are available to all accounts.    |
|     Upload a custom pack below to add account-specific  |
|     workflows."                                         |
|    [Sync Now]  [Remove]                                 |
|                                                         |
|  H3: "Upload Knowledge Pack"                            |
|    Knowledge Pack ZIP [drag-drop zone]                  |
|      "Drop a .zip file here or click to browse"         |
|      "Max 10MB. Must contain index.json at root."       |
|    Display Name [text input]                            |
|    [Upload & Sync] (disabled until file selected)       |
|                                                         |
|  H3: "Loaded Workflows"                                 |
|    "Default workflows are available on the              |
|     Workflows page."  (link)                            |
|  -- or (when custom pack uploaded) --                   |
|    workflow-name  [override|skill-pack badge]  domain   |

Logs Tab

|  H2: "Webhooks"                                        |
|  "Incoming webhook events across all automations."     |
|                                                         |
|  [x] Matched only  (checkbox filter)                   |
|                                                         |
|  Time        Status  Event                Automation  Job |
|  4/2/2026    [SKIP]  jira:issue_updated   Auto Name   —   |
|  4/2/2026    [MATCH] jira:issue_updated   Auto Name   #2959 |
|  ...                                                    |
|                                                         |
|  1–30 of 3769              [Prev] [Next]               |
|                                                         |
|  -- or (empty state) --                                 |
|  "No webhook events recorded yet"                      |

Key Elements

Tab Bar

ElementSelector / RefNotes
General tablink "General"Active by default, dark background when selected; URL adds ?tab=general
Agents tablink "Agents"URL adds ?tab=agents
Assistant tablink "Assistant"URL adds ?tab=assistant
Issue Tracking tablink "Issue Tracking"URL adds ?tab=integrations
Slack tablink "Slack"URL adds ?tab=slack
Knowledge Packs tablink "Knowledge Packs"URL adds ?tab=knowledge-packs
Logs tablink "Logs"7th tab; URL adds ?tab=logs; was previously labeled "Webhook Logs" with ?tab=webhook-logs

General Tab

ElementSelector / RefNotes
LLM Provider dropdowncombobox labeled "LLM Provider"Options: OpenAI (openai), Anthropic (anthropic), OpenRouter (openrouter)
Model inputtextbox labeled "Model"Text input, e.g. "gpt-5.4"
API Key inputtextbox labeled "API Key"Password field; placeholder varies by state
API key status (configured).text-emerald-400"API key is configured"
API key status (platform)Text below input"Platform key active — add your own to override"
Effort: Max buttonbutton "Max"Toggle; orange border/text when selected
Effort: High buttonbutton "High"Toggle; orange border/text when selected
Effort: Medium buttonbutton "Medium"Toggle; orange border/text when selected
Effort hintBelow buttons"Max / High = Opus, Medium = Sonnet. Applied to all agent jobs unless overridden per agent."
Save buttonbutton "Save"Orange button
Save status.text-slate-500 / .text-emerald-400 / .text-red-400"Saving..." then "Saved" or error message

Issue Tracking Tab — Jira Credentials

ElementSelector / RefNotes
Page headingheading "Issue Tracking"H2
Subheadingheading "Jira"With Jira icon and "Atlassian Jira Cloud" subtitle
Credentials headingheading "Credentials"Section label
Jira URL inputtextbox labeled "Jira URL"Placeholder "https://yourcompany.atlassian.net"
Email inputtextbox labeled "Email"Placeholder "[email protected]"
API Token inputtextbox labeled "API Token"Password field; placeholder "(configured — enter new to change)" when set, "ATATT3x..." otherwise
API token status.text-emerald-400"API token is configured" (shown when token exists)
Test Connection buttonbutton "Test Connection"Outlined button; tests Jira API connectivity
Save buttonbutton "Save"Orange button; saves credentials
Status textBelow buttons"Saving..." then "Saved" or error

Issue Tracking Tab — Webhook

ElementSelector / RefNotes
Webhook headingheading "Webhook"Section label
Webhook descriptionText below heading"Configure this URL in your Jira webhook settings, or click Deploy to register automatically."
Webhook URL inputtextbox labeled "Webhook URL"Readonly; value: https://sidebutton.com/api/webhooks/jira
Copy buttonbutton "Copy"Copies webhook URL to clipboard
Test Webhook buttonbutton "Test Webhook"Outlined button; sends test webhook
Deploy Webhook buttonbutton "Deploy Webhook"Orange button; auto-registers webhook in Jira (requires saved credentials)
View webhook logs linklink "View webhook logs"Navigates to Logs tab

Agents Tab — Card Header (per agent)

ElementSelector / RefNotes
Description textBelow tab bar"Manage agent roles, entry paths, environment config, and download RDP shortcuts."
Avatar buttonbutton "Set avatar" (w-9 h-9, first in card)Click opens avatar picker modal
Agent display nameBold text in cardEditable display name, e.g. "dev-agent-1"
Rename agent buttonbutton "Rename agent" (.agent-rename-btn)Hover-to-reveal pencil icon; click makes name editable inline
Rename save button.agent-rename-saveEmerald checkmark; saves new name
Rename cancel button.agent-rename-cancelSlate X; cancels rename
Agent hostnameGrey text below namee.g. "venmate-agent-1"
Status badgeBadge in cardONLINE (green) / BUSY (amber) / ERROR (red) / OFFLINE (gray)
Shared with textspan on owned agents"Shared with N account(s)" — shows how many accounts share this agent
Shared badgeLight blue badge"shared" — shown for non-owned agents
Role checkboxes (owned)input[type="checkbox"] per roleSE, QA, SD, PM — toggles agent capabilities
Effort dropdown (owned)selectDefault (empty) / Max / High / Medium — direct PUT on change
RDP buttonbutton "RDP" (.rdp-download-btn)Opens RDP configuration modal
Expand chevronbutton (chevron icon)Toggles config panel open/closed
No agents text"No agents registered yet"Empty state when no agents exist

Agents Tab — Owned Agent Config Panel (expanded)

ElementSelector / RefNotes
Entry path active checkboxinput[type="checkbox"] per pathToggle path active/inactive
Entry path inputinput per pathPath value, e.g. "~/workspace"
Entry path label inputinput per pathLabel, e.g. "Main"
Entry path MCP JSON textareatextarea per path (3 rows)JSON config for MCP servers on this path
Remove entry path buttonbutton per pathRemoves this entry path
Add Entry Path buttonbutton "+ Add Entry Path"Appends new empty entry path
Environment variables textareatextarea (4 rows)~/.agent-env content; supports ANTHROPIC_API_KEY, GH_TOKEN, etc.
Save buttonbutton "Save"Slate button — saves config to DB only
Save & Apply buttonbutton "Save & Apply"Orange button — saves + pushes config to agent VM
Config status textBelow buttonsShows result of last save/apply operation
Applied timestampBelow status"Applied at: {ISO timestamp}"
Reboot buttonbutton "Reboot" (amber)Danger zone — shows confirmation alert, POST to reboot
Delete buttonbutton "Delete" (red)Danger zone — shows confirmation alert, deletes agent

Agents Tab — Shared Agent Preferences Panel (expanded)

ElementSelector / RefNotes
Enabled Roles checkboxesinput[type="checkbox"] per capabilitySelect which roles your account can use; unchecking all = enable all
Effort Level dropdownselectDefault / Max / High / Medium; shows agent's default in label
Enabled Entry Paths checkboxesinput[type="checkbox"] per active pathSelect which entry paths your account can use
Save Preferences buttonbutton "Save Preferences"Sky-blue (sky-500) button
Remove Shared Agent buttonbutton (red)Removes shared agent from your account

Avatar Picker Modal (heading: "Set Agent Avatar")

ElementSelector / RefNotes
Modal headingheading "Set Agent Avatar"H3
Preset avatar grid10 avatar buttons in gridClick to select preset (supportbot, bot-blue, opshub, bot-orange, sidebutton, bot-teal, aictpo, bot-red, talentflow, bot-cyan)
Upload file inputinput[type="file"]Max 1 MB; accepts JPEG, PNG, GIF, WebP, SVG
Remove Avatar buttonbutton "Remove avatar (use default)"Sets avatar to null (default SVG)
Cancel buttonbutton "Cancel"Closes modal without changes
Modal status textBelow grid"Saving..." then "Saved" or error (e.g. "File too large")

RDP Download Modal (heading: "Download RDP Shortcut")

ElementSelector / RefNotes
Modal headingheading "Download RDP Shortcut"H3
Display Mode: FullscreenradioDisables resolution options when selected
Display Mode: WindowedradioEnables resolution options
Resolution: 1280x800radioDisabled if fullscreen
Resolution: 1440x900radioDefault selection
Resolution: 1920x1080radioDisabled if fullscreen
Save Credentials checkboxcheckbox#rdp-save-password"Save credentials Embed password in RDP file"
Platform: WindowsradioDefault; generates standard .rdp
Platform: macOSradioHint: "Requires Microsoft Remote Desktop from App Store"
Platform: LinuxradioHint: "Open with Remmina, xfreerdp..."
Cancel buttonbutton "Cancel"Closes modal
Copy password buttonbutton "Copy password"Copies agent RDP password to clipboard
Download buttonbutton "Download"Generates and downloads {agentName}.rdp file

Assistant Tab

ElementSelector / RefNotes
Name inputtextbox labeled "Name"Placeholder "e.g. Atlas", max 100 chars
Name hintBelow input"The name your team sees in Slack messages"
Persona textareatextbox labeled "Persona" (4 rows)System prompt text, placeholder "You are Atlas, a concise and helpful engineering assistant...", max 5000 chars
Persona hintBelow textarea"System prompt that shapes the assistant's voice and behavior"
Avatar URL inputtextbox labeled "Avatar URL"Placeholder "https://...", max 500 chars
Active Role dropdownselect#active-role-select (name="active_role")Options: No role (default), QA Engineer, Skill Discovery, Software Engineer, Product Manager, Social Media Manager, sales
Active Role hintBelow dropdown"Skill pack role that shapes the assistant's domain expertise"
Save buttonbutton "Save"Orange button
Save status.text-emerald-400 / .text-red-400"Saving..." then "Saved" or error

Assistant Tab — MCP Connections

Below the persona form, separated by a divider line.

ElementSelector / RefNotes
MCP Connections headingheading "MCP Connections"H3 (not H2), below divider
MCP descriptionText below heading"Tool sources available to the chat assistant, Slack bot, and MCP clients. Each connection provides tools the assistant can use."
SideButton Cloud cardConnection cardGreen dot (active), "SideButton Cloud" title, "Agent dispatch, workflow execution, and fleet monitoring" description
SideButton Cloud tool countBadge text"7 tools"
SideButton Cloud togglecheckboxOrange toggle switch when enabled; controls whether chat assistant can use SideButton Cloud tools
Jira / Atlassian cardConnection cardGreen dot when configured (grey when unconfigured), "Jira / Atlassian" title, "Search, create, edit, and transition Jira issues and Confluence pages" description
Jira tool countBadge text"60 tools" (when configured)
Jira togglecheckbox (data-mcp-id="jira")Orange toggle when enabled; only shown when Jira credentials are configured (otherwise shows "Configure" link to Issue Tracking tab)

Slack Tab

ElementSelector / RefNotes
Connected Channels headingheading "Connected Channels"H2
Channel status dotEmerald (active) or Gray (inactive)Per connected channel
Channel name#channel-name textFalls back to channel ID if no name
Channel team IDSmall textShown per channel
Channel remove buttonbutton per channelDELETE endpoint; removes channel binding
No channels text"No channels connected yet."Empty state
Add Channel headingheading "Add Channel"H2
Team ID inputtextbox labeled "Team ID"Placeholder "T0123ABC"
Channel ID inputtextbox labeled "Channel ID"Placeholder "C0123ABC"
Channel Name inputtextbox labeled "Channel Name"Placeholder "#engineering-agents" (optional)
Bot Token inputtextbox labeled "Bot Token"Password field; placeholder "xoxb-..." (required)
Signing Secret inputtextbox labeled "Signing Secret"Password field; placeholder "From Slack App settings" (required)
Bot User ID inputtextbox labeled "Bot User ID"Placeholder "U0123ABC (from auth.test)" (optional, auto-filled by Test)
Add Channel buttonbutton "Add Channel"Orange button
Test Connection buttonbutton "Test Connection"Outlined button; calls Slack auth.test API directly
Test status textBelow buttons"Testing..." then "Connected: {team} ({user})" or "Slack error: {error}"
Setup Guidedetails > summary "Slack App Setup Guide"Expandable 7-step guide

Slack App Setup Guide (expanded content)

  1. Go to api.slack.com/apps and create a new app
  2. Under OAuth & Permissions, add bot scopes: chat:write, reactions:write, users:read
  3. Install the app to workspace, copy Bot User OAuth Token (starts with xoxb-)
  4. Under Basic Information, copy the Signing Secret
  5. Under Event Subscriptions, enable events, set Request URL to: https://sidebutton.com/api/slack/events
  6. Subscribe to bot events: message.channels, message.groups
  7. Invite the bot to your channel, then add channel details in the form above

Knowledge Packs Tab — Default Pack Status

ElementSelector / RefNotes
Knowledge Pack headingheading "Knowledge Pack"H3
Default pack label"Using SideButton Default Pack"Status card with icon
Default pack descriptionBelow label"Default workflows are available to all accounts. Upload a custom pack below to add account-specific workflows."
Sync Now buttonbutton "Sync Now"Refreshes pack workflows from upstream (was "Pull Updates")
Remove buttonbutton "Remove"Removes the knowledge pack; shows confirmation dialog

Knowledge Packs Tab — Upload Form

ElementSelector / RefNotes
Upload headingheading "Upload Knowledge Pack"H3
ZIP file drop zonetextbox labeled "Knowledge Pack ZIP"Drag-and-drop area: "Drop a .zip file here or click to browse"; max 10MB; must contain index.json at root
Display Name inputtextbox labeled "Display Name"Placeholder "My Knowledge Pack"
Upload & Sync buttonbutton "Upload & Sync"Orange; disabled until file selected; uploads ZIP and syncs workflows

Knowledge Packs Tab — Loaded Workflows

ElementSelector / RefNotes
Loaded Workflows headingheading "Loaded Workflows"H3
Default workflows text"Default workflows are available on the Workflows page."Shown when using default pack only
Workflows page linklink "Workflows page"Links to /portal/workflows
Workflow cardPer workflow (when custom pack uploaded)Name (monospace, truncated), source badge, domain text
Source badge: overrideOrange badgeoverride — account-level override workflow
Source badge: skill-packGray badgeskill-pack — from uploaded pack

Logs Tab

ElementSelector / RefNotes
Section headingheading "Webhooks"H2
Section descriptionText below heading"Incoming webhook events across all automations."
Matched only checkboxcheckbox / #wh-logs-matched-onlyFilters to show only matched (dispatched) events
Log tabletable in .bg-slate-900/60 container5-column table with border and rounded corners
Column: Timeth "Time"Timestamp in locale format (e.g. "4/2/2026, 2:13:05 PM")
Column: Statusth "Status"MATCH or SKIP badge
Column: Eventth "Event"Formatted event summary (truncated at 280px)
Column: Automationth "Automation"Automation name that evaluated this event
Column: Jobth "Job"Job link #N or "—" dash
MATCH badgespan.text-emerald-400Green badge: "MATCH" — event matched automation criteria and dispatched a job
SKIP badgespan.text-slate-500Grey badge: "SKIP" — event was evaluated but did not match
Job linka (sky-400 text)Links to /portal/jobs/{id} for matched events
Pagination container#wh-logs-paginationShows when total > 30 items; hidden otherwise
Pagination info#wh-logs-info"N–M of Total" (e.g. "1–30 of 3769")
Prev buttonbutton "Prev" / #wh-logs-prevDisabled on first page (opacity-30)
Next buttonbutton "Next" / #wh-logs-nextDisabled on last page
Loading statetd (colspan=5)"Loading..." centered text
Empty statetd (colspan=5)"No webhook events recorded yet" centered text
Error statetd (colspan=5)"Failed to load logs ({error})" in red-400 text

Data Model

General Settings

FieldTypeDescription
llm_providerstringLLM provider: "openai", "anthropic", or "openrouter"
modelstringModel identifier (e.g. "gpt-5.4")
api_keystringAPI key (masked in UI, transmitted only when changed)
has_api_keybooleanRead-only; true when key configured
default_effortstring"max" / "high" / "medium"

Jira Integration (Issue Tracking)

FieldTypeDescription
jira_urlstringAtlassian instance URL (e.g. "https://yourcompany.atlassian.net")
jira_emailstringJira account email for API access
jira_api_tokenstringJira API token (masked in UI, transmitted only when changed)
has_jira_tokenbooleanRead-only; true when token configured
webhook_urlstringRead-only; webhook endpoint: https://sidebutton.com/api/webhooks/jira

Agent

FieldTypeDescription
display_namestringEditable display name shown on card (e.g. "dev-agent-1")
namestringAgent hostname/identifier
ipstringAgent IP or DNS address
statusstring"online" / "busy" / "error" / "offline"
capabilitiesstring[]Array of roles: ["se", "qa", "sd", "pm"]
effort_levelstring?Per-agent effort override: "max" / "high" / "medium" / null
agent_envstringEnvironment variable content (~/.agent-env)
avatar_urlstring?Custom avatar URL or null for default
entry_pathsobject[]Array of {path, label, mcp_json, active} objects
is_sharedbooleanWhether agent is shared from another account

Entry Path

FieldTypeDescription
pathstringFilesystem path (e.g. "~/workspace")
labelstringDisplay label
mcp_jsonstringJSON config for MCP servers on this path
activebooleanWhether this path is enabled

Assistant Settings

FieldTypeDescription
namestringBot display name (max 100 chars)
personastringSystem prompt text (max 5000 chars)
avatar_urlstringAvatar image URL (max 500 chars)
active_rolestringSkill pack role: "" (No role), "qa", "sd", "se", "pm", "software-engineer", "product-manager", "sales", "smm"

Slack Channel

FieldTypeDescription
team_idstringSlack team/workspace ID (required)
channel_idstringSlack channel ID (required)
channel_namestringChannel display name (optional)
bot_tokenstringSlack bot token xoxb-... (required, masked in responses)
signing_secretstringSlack signing secret (required, masked in responses)
bot_user_idstringBot user ID (optional, auto-filled by Test Connection)
is_activebooleanWhether channel is active

MCP Connection

FieldTypeDescription
namestringConnection display name (e.g. "SideButton Cloud", "Jira / Atlassian")
descriptionstringWhat tools the connection provides
tool_countnumberNumber of tools available (e.g. 7)
enabledbooleanWhether connection is active (toggle state)
statusstring"active" (green dot) / "inactive" (grey dot)
configure_urlstringTab to navigate to for setup (e.g. Issue Tracking for Jira)

Knowledge Pack

FieldTypeDescription
namestringDisplay name for the pack
typestring"default" (SideButton built-in) or "custom" (uploaded ZIP)
zip_filefileZIP archive; max 10MB; must contain index.json at root

Webhook Log Entry

FieldTypeDescription
idnumberLog entry ID
automation_idnumberID of the automation that evaluated this event
automation_namestringDisplay name of the automation
trigger_eventobjectJSON event payload (webhookEvent, issueKey, projectKey, issueType, assignee, status for Jira; eventType, workflowSlug, agentName for SideButton; type, schedule for cron)
matchedbooleanWhether the event matched the automation criteria
dispatched_job_idnumber?Job ID if a job was dispatched (null for SKIP events)
created_atstring (datetime)When the event was received

States & Variations

StateTriggerVisual Indicator
General tab activeDefault or click GeneralDark tab background; URL ?tab=general
Agents tab activeClick AgentsDark tab background; URL ?tab=agents
Assistant tab activeClick AssistantDark tab background; URL ?tab=assistant
Issue Tracking tab activeClick Issue TrackingDark tab background; URL ?tab=integrations
Slack tab activeClick SlackDark tab background; URL ?tab=slack
Knowledge Packs tab activeClick Knowledge PacksDark tab background; URL ?tab=knowledge-packs
Logs tab activeClick LogsDark tab background; URL ?tab=logs
API key configuredKey existsGreen "API key is configured" text
API key missing (platform)No user key, platform key active"Platform key active — add your own to override"
Effort: selectedClick effort buttonSelected button has orange border/text (orange-500/20 bg, orange-400 text, orange-500/50 border)
Effort: unselectedOther buttonsDark background (slate-800), slate-400 text
Save: SavingClick Save"Saving..." in slate-500 text
Save: SuccessAPI returns OK"Saved" in emerald-400 text
Save: ErrorAPI returns errorError message in red-400 text
Jira token configuredToken existsGreen "API token is configured" text below API Token field
Jira test: successValid credentialsSuccess message with connection details
Jira test: errorInvalid credentialsError message in red
Webhook deploy: successClick Deploy WebhookSuccess status after auto-registering webhook in Jira
Agent onlineAgent connectedGreen "ONLINE" badge
Agent busyAgent running jobAmber "BUSY" badge
Agent errorAgent in error stateRed "ERROR" badge
Agent offlineAgent disconnectedGray "OFFLINE" badge
No agentsNo agents registered"No agents registered yet" text
Agent card collapsedDefaultOnly header row visible
Agent card expandedClick chevronConfig panel visible below card
Agent effort changedChange dropdownBorder flash green (success) or red (error)
Agent role toggledClick role checkboxLabel style updates, outline flash
Agent rename activeHover → click RenameName field becomes editable inline; save/cancel buttons appear
Avatar modal openClick "Set avatar"Modal overlay with heading "Set Agent Avatar", preset grid + upload
RDP modal openClick "RDP"Modal with heading "Download RDP Shortcut", display/resolution/platform options, Copy password/Cancel/Download buttons
Shared agent cardNon-owned agentSky-blue accents, "shared" badge, preferences panel instead of config
No Slack channelsNo channels configured"No channels connected yet." text
Channels connectedChannels existChannel list with status dots above "Add Channel" form
Slack test: testingClick "Test Connection""Testing..." text
Slack test: successValid token"Connected: {team} ({user})" — auto-fills bot_user_id
Slack test: errorInvalid token"Slack error: {message}"
Slack duplicate channelAdd existing channelError 409: "This Slack channel is already connected"
MCP: SideButton Cloud enabledToggle onGreen dot, orange toggle, "7 tools" badge
MCP: SideButton Cloud disabledToggle offGrey dot, slate toggle
MCP: Jira unconfiguredNo Jira credentialsGrey dot, "Configure" link (goes to Issue Tracking tab); no toggle or tool count shown
MCP: Jira configuredJira credentials savedGreen dot, "60 tools" badge, orange toggle switch
Default pack activeNo custom pack uploadedStatus card: "Using SideButton Default Pack" with Sync Now and Remove buttons
Upload & Sync disabledNo file selectedButton grayed out
Upload & Sync enabledZIP file selectedButton becomes orange/clickable
Workflows: default onlyDefault pack"Default workflows are available on the Workflows page." with link
Workflows: custom loadedCustom pack syncedWorkflow list with name/source/domain per item
Logs: loadingTab first opened"Loading..." in table (client-side fetch)
Logs: with dataWebhook events existTable rows with Time/Status/Event/Automation/Job columns
Logs: emptyNo webhook events"No webhook events recorded yet" centered in table
Logs: errorAPI fetch fails"Failed to load logs ({error})" in red text
Logs: matched filter"Matched only" checkedOnly MATCH rows shown; resets pagination to page 1
Logs: paginationTotal > 30 eventsPagination bar visible with "N–M of Total" + Prev/Next buttons
Logs: first pageOffset = 0Prev button disabled (opacity-30)
Logs: last pageOffset + 30 >= totalNext button disabled

Common Tasks

1. Configure LLM provider

  1. Go to Settings > General tab
  2. Select LLM Provider from dropdown
  3. Enter Model name
  4. Enter API Key (or leave blank to keep existing)
  5. Click Save
  6. Verify "Saved" status text appears in green

2. Set default effort level

  1. Go to Settings > General tab
  2. Click Max, High, or Medium button
  3. Click Save
  4. Verify button styling updates and "Saved" appears

3. Configure Jira integration

  1. Go to Settings > Issue Tracking tab
  2. Enter Jira URL (e.g. "https://yourcompany.atlassian.net")
  3. Enter Email (your Jira account email)
  4. Enter API Token (from Jira account settings)
  5. Click "Test Connection" to verify credentials
  6. Click Save
  7. Verify "Saved" and "API token is configured" text

4. Deploy Jira webhook

  1. Go to Settings > Issue Tracking tab (requires saved Jira credentials)
  2. In the Webhook section, click "Deploy Webhook"
  3. Webhook auto-registers in Jira pointing to https://sidebutton.com/api/webhooks/jira
  4. Alternatively, copy the URL and configure manually in Jira

5. Rename an agent

  1. Go to Settings > Agents tab
  2. Hover over the agent card to reveal the pencil icon (Rename button)
  3. Click the Rename button — the name becomes an editable text field
  4. Type the new display name
  5. Click the emerald checkmark to save, or the slate X to cancel
  6. Name updates immediately on the card

6. Change agent avatar

  1. Go to Settings > Agents tab
  2. Click the "Set avatar" button (small square) on the agent card
  3. In the modal ("Set Agent Avatar"), either click a preset avatar or upload a file (max 1 MB)
  4. Verify "Saved" status; click "Cancel" or click outside to close

7. Configure agent roles

  1. Go to Settings > Agents tab
  2. Click role checkboxes (SE/QA/SD/PM) on the agent card header
  3. Changes save immediately via PUT on each toggle (outline flash confirms)

8. Configure agent entry paths

  1. Go to Settings > Agents tab
  2. Click chevron to expand agent card
  3. Click "+ Add Entry Path" to add a new path
  4. Fill in Path (e.g. "~/workspace"), Label (e.g. "Main"), optionally MCP JSON
  5. Toggle active checkbox per path
  6. Click "Save" (DB only) or "Save & Apply" (DB + push to agent VM)

9. Set agent environment variables

  1. Go to Settings > Agents tab
  2. Click chevron to expand agent card
  3. Edit the environment variables textarea
  4. Click "Save & Apply" to push to agent

10. Download RDP connection

  1. Go to Settings > Agents tab
  2. Click "RDP" button for desired agent
  3. In the modal ("Download RDP Shortcut"), choose Display Mode (Fullscreen/Windowed), Resolution, Platform
  4. Optionally check "Save credentials" to embed password in RDP file
  5. Use "Copy password" to copy the RDP password to clipboard
  6. Click "Download" — browser downloads {agentName}.rdp file; or "Cancel" to close

11. Reboot an agent

  1. Go to Settings > Agents tab
  2. Click chevron to expand agent card
  3. In the Danger Zone, click "Reboot"
  4. Confirm in the alert dialog
  5. Agent status changes to offline; agent reboots on its side

12. Delete an agent

  1. Go to Settings > Agents tab
  2. Click chevron to expand agent card
  3. In the Danger Zone, click "Delete"
  4. Confirm in the alert dialog

13. Configure shared agent preferences

  1. Go to Settings > Agents tab
  2. Find a shared agent (sky-blue accent, "shared" badge)
  3. Click chevron to expand preferences panel
  4. Toggle Enabled Roles (unchecking all = enable all)
  5. Set Effort Level override
  6. Toggle Enabled Entry Paths
  7. Click "Save Preferences"

14. Configure assistant persona

  1. Go to Settings > Assistant tab
  2. Set Name (max 100 chars), Persona prompt (max 5000 chars), Avatar URL, and Active Role
  3. Click Save
  4. Verify "Saved" status appears

15. Set assistant active role

  1. Go to Settings > Assistant tab
  2. Select a role from the "Active Role" dropdown (No role, QA Engineer, Skill Discovery, Software Engineer, etc.)
  3. Click Save
  4. The selected role shapes the assistant's domain expertise in chat and Slack

16. Add Slack channel

  1. Go to Settings > Slack tab
  2. Fill in Team ID, Channel ID, Channel Name, Bot Token, Signing Secret
  3. Click "Test Connection" — verify "Connected: {team} ({user})" appears
  4. Bot User ID auto-fills if empty
  5. Click "Add Channel" to save
  6. Verify channel appears in Connected Channels list

17. Remove Slack channel

  1. Go to Settings > Slack tab
  2. Find the channel in Connected Channels list
  3. Click the Remove button next to the channel

18. Upload a knowledge pack

  1. Go to Settings > Knowledge Packs tab
  2. Drop or click to browse for a ZIP file (max 10MB, must contain index.json at root)
  3. Enter Display Name
  4. Click "Upload & Sync"
  5. Workflows from the pack appear in Loaded Workflows section

19. Sync knowledge pack

  1. Go to Settings > Knowledge Packs tab
  2. Click "Sync Now" on the pack card
  3. Workflows refresh from upstream

20. View webhook logs

  1. Go to Settings > Logs tab (or click "View webhook logs" link in Issue Tracking tab)
  2. Table loads automatically via client-side fetch (shows "Loading..." then data)
  3. View incoming webhook events with Time, Status (MATCH/SKIP), Event summary, Automation name, and linked Job
  4. Use "Matched only" checkbox to filter to events that dispatched jobs
  5. Use Prev/Next buttons to paginate (30 per page)

Tips

  • The General tab effort level maps to Claude models: Max/High = Opus, Medium = Sonnet
  • The Assistant persona is the system prompt used when the bot responds in Slack
  • Jira configuration (URL, email, API token) is on the Issue Tracking tab, not General
  • Agent display names are editable via the hover-to-reveal Rename button; the hostname below the name is the permanent identifier
  • RDP files allow direct desktop access to agent VMs; the modal lets you customize resolution and platform; use "Copy password" to get the RDP password
  • Tabs are deep-linkable via ?tab= query parameter — the URL updates when switching tabs
  • "Save" persists config to the database; "Save & Apply" also pushes the config to the agent VM — use Apply when you need the agent to pick up changes immediately
  • Agent role checkboxes and effort dropdown save immediately on change — no explicit Save needed
  • Shared agents show sky-blue accents; you can only change preferences (roles, effort, paths), not the agent config itself
  • Test Connection on the Slack tab calls the Slack API directly from the browser and auto-fills the Bot User ID
  • Deploy Webhook on the Issue Tracking tab auto-registers a Jira webhook — no manual Jira admin needed
  • MCP Connections on the Assistant tab control which tool sources the chat assistant, Slack bot, and MCP clients can use
  • SideButton Cloud connection provides 7 tools for agent dispatch, workflow execution, and fleet monitoring
  • Jira / Atlassian connection requires Jira credentials from the Issue Tracking tab before it can be enabled
  • Active Role on the Assistant tab sets the assistant's domain expertise; options are populated from installed knowledge pack roles
  • Knowledge Packs now use ZIP upload instead of local path attachment; "Sync Now" (was "Pull Updates") refreshes workflows

Gotchas

  • Seven tabs: General, Agents, Assistant, Issue Tracking, Slack, Knowledge Packs, Logs; tab bar may scroll horizontally in narrow viewports
  • Tab label renamed: The 7th tab is now "Logs" (was "Webhook Logs"); URL param is ?tab=logs (was ?tab=webhook-logs)
  • Tab URL param: Issue Tracking tab uses ?tab=integrations (not ?tab=issue-tracking) — the param name doesn't match the visible label
  • Jira moved out of General: Jira URL, email, and API token are now on the Issue Tracking tab, not the General tab — old references to "General > Jira URL" are outdated
  • API key masking: The API Key field shows "(configured — enter new to change)" as placeholder when a key exists — entering a new value overwrites it
  • Platform key fallback: When no user API key is set, shows "(optional — platform key active)" as placeholder and "Platform key active — add your own to override" as hint text
  • Effort is global default: The effort level set in General applies to all jobs unless overridden per-agent or per-dispatch
  • Effort button styling changed: Selected effort button now uses orange border/text accent (orange-500/20 bg) instead of dark/orange solid background
  • Save vs Save & Apply: Agent config has two save actions — "Save" only writes to DB, "Save & Apply" also pushes to the agent VM. Forgetting to Apply means the agent doesn't see changes
  • Role/effort saves immediately: Agent role checkboxes and effort dropdown fire PUT requests on every change — no Save button needed; visual feedback is a border flash
  • Rename agent is hover-reveal: The pencil icon button appears only on hover over the agent card (opacity-0 group-hover/card:opacity-100); clicking it turns the name into an editable inline text field with save/cancel buttons
  • Agent display name vs hostname: Cards show an editable display name (top) and a fixed hostname (below); the hostname is the permanent identifier used for DNS
  • "Shared with N account(s)": Owned agents show a span indicating how many other accounts the agent is shared with
  • Avatar modal heading: Modal heading is "Set Agent Avatar"; remove button text is "Remove avatar (use default)"; modal has a Cancel button
  • Avatar upload limits: Max 1 MB, JPEG/PNG/GIF/WebP/SVG only. Oversized files show error and clear the input
  • RDP modal heading: Modal heading is "Download RDP Shortcut"; includes "Copy password" button to copy RDP credentials and "Cancel" button to close without downloading
  • RDP button text changed: The button on agent cards now shows as "RDP" (was "Download RDP")
  • RDP Save Credentials: Checkbox id is rdp-save-password, label is "Save credentials Embed password in RDP file"
  • RDP modal platform hints: macOS shows "Requires Microsoft Remote Desktop from App Store"; Linux shows "Open with Remmina, xfreerdp..."
  • Shared agent read-only config: Non-owners see a Preferences panel (roles/effort/paths) instead of the full config panel — they cannot edit entry paths, env vars, or use danger zone
  • Slack setup complexity: Adding a Slack channel requires multiple fields from the Slack App configuration — the expandable Setup Guide provides 7-step instructions
  • Slack events URL: Event subscriptions must point to https://sidebutton.com/api/slack/events
  • Slack duplicate channel: Adding a channel that's already connected returns error 409 — "This Slack channel is already connected"
  • Slack Test Connection: Calls Slack auth.test API directly from browser — requires valid bot token
  • No delete for settings: There's no reset/delete for General or Assistant settings — only overwrite via Save
  • Knowledge pack is now ZIP upload: The old "Attach Skill Pack" flow with local path is replaced by ZIP file upload (max 10MB, must contain index.json at root)
  • Sync Now replaced Pull Updates: The button to refresh knowledge pack workflows is now "Sync Now" (was "Pull Updates")
  • Knowledge Pack Remove button: A "Remove" button is now visible on the pack card for removing the knowledge pack (shows confirmation dialog)
  • Knowledge Pack heading level: The "Knowledge Pack" heading is now H3 (was H2)
  • Active Role dropdown: New field on Assistant tab — select#active-role-select with name="active_role" — options are populated from installed skill pack roles
  • Logs table headers: Column headers are now Title Case ("Time", "Status", "Event", "Automation", "Job") — previously documented as UPPERCASE
  • Upload & Sync disabled by default: The button is disabled until a ZIP file is selected
  • Deploy Webhook requires saved credentials: The Deploy Webhook button on the Issue Tracking tab only works after Jira credentials (URL, email, token) are saved
  • Logs tab is client-side rendered: The table fetches data via /api/webhooks/logs on tab open — shows "Loading..." then populates; snapshot may not capture table rows since they're injected via JS
  • Logs empty state: Shows "No webhook events recorded yet" (not a blank area) when no events exist
  • Logs pagination: 30 items per page; Prev/Next buttons appear only when total > 30; "N–M of Total" info text (e.g. "1–30 of 3769")
  • MATCH vs SKIP badges: MATCH (emerald/green) = event triggered a job dispatch; SKIP (slate/grey) = event was evaluated but didn't match automation criteria
  • Logs event summary format: Jira events show "webhookEvent — issueKey (status)"; SideButton events show "eventType — workflowSlug on agentName"; cron events show "cron — schedule"; manual shows "manual trigger"
  • Auth is now Auth0: Portal authentication uses Auth0 (email + password) instead of the old email-only flow; legacy /api/auth/login still works for programmatic access
  • MCP Connections is on Assistant tab: The MCP Connections section is below the persona form on the Assistant tab, under an H3 heading (not H2), separated by a divider line
  • Jira MCP state depends on credentials: When unconfigured, shows grey dot + "Configure" link to Issue Tracking tab; when configured, shows green dot + "60 tools" badge + orange toggle switch
  • SideButton Cloud always available: SideButton Cloud connection is pre-configured and shows green dot; Jira shows grey dot until credentials are configured
  • Confirmation dialogs on destructive actions: Reboot, Delete agent, and Remove pack all show browser confirm() dialogs