diff --git a/.pql/changelog/ticket_deps/2026-05.sql b/.pql/changelog/ticket_deps/2026-05.sql index 55784c37..c7405430 100644 --- a/.pql/changelog/ticket_deps/2026-05.sql +++ b/.pql/changelog/ticket_deps/2026-05.sql @@ -31,3 +31,6 @@ INSERT INTO ticket_deps (blocker_id, blocked_id, created_at, updated_at, deleted INSERT INTO ticket_deps (blocker_id, blocked_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-169', 'T-171', '2026-05-24 16:27:46', '2026-05-24 16:27:46', NULL, '6f283faa601b8cbccc50d9a4c9a49ee2', 1) ON CONFLICT(blocker_id, blocked_id) DO UPDATE SET updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_deps.updated_at OR (excluded.updated_at = ticket_deps.updated_at AND excluded.hash > ticket_deps.hash); INSERT INTO ticket_deps (blocker_id, blocked_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-170', 'T-171', '2026-05-24 16:27:52', '2026-05-24 16:27:52', NULL, '1815c2248aebfb6e4806d1dffb9e3ea2', 1) ON CONFLICT(blocker_id, blocked_id) DO UPDATE SET updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_deps.updated_at OR (excluded.updated_at = ticket_deps.updated_at AND excluded.hash > ticket_deps.hash); INSERT INTO ticket_deps (blocker_id, blocked_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-169', 'T-172', '2026-05-24 16:27:56', '2026-05-24 16:27:56', NULL, '9bb8d0b4d690668248a8e1b063103bcd', 1) ON CONFLICT(blocker_id, blocked_id) DO UPDATE SET updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_deps.updated_at OR (excluded.updated_at = ticket_deps.updated_at AND excluded.hash > ticket_deps.hash); +INSERT INTO ticket_deps (blocker_id, blocked_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-170', 'T-180', '2026-05-25 09:16:24', '2026-05-25 09:16:24', NULL, '532f10087fe5c703f64b9d7b69abd3ac', 1) ON CONFLICT(blocker_id, blocked_id) DO UPDATE SET updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_deps.updated_at OR (excluded.updated_at = ticket_deps.updated_at AND excluded.hash > ticket_deps.hash); +INSERT INTO ticket_deps (blocker_id, blocked_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-169', 'T-181', '2026-05-25 09:16:24', '2026-05-25 09:16:24', NULL, '9db789b59940b908f0f57750820b3a35', 1) ON CONFLICT(blocker_id, blocked_id) DO UPDATE SET updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_deps.updated_at OR (excluded.updated_at = ticket_deps.updated_at AND excluded.hash > ticket_deps.hash); +INSERT INTO ticket_deps (blocker_id, blocked_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-182', 'T-183', '2026-05-25 09:26:48', '2026-05-25 09:26:48', NULL, '5f87cfd814f3f69900a306714a6b5816', 1) ON CONFLICT(blocker_id, blocked_id) DO UPDATE SET updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_deps.updated_at OR (excluded.updated_at = ticket_deps.updated_at AND excluded.hash > ticket_deps.hash); diff --git a/.pql/changelog/tickets/2026-05.sql b/.pql/changelog/tickets/2026-05.sql index 538cf027..6f8471c8 100644 --- a/.pql/changelog/tickets/2026-05.sql +++ b/.pql/changelog/tickets/2026-05.sql @@ -2751,3 +2751,7 @@ INSERT INTO tickets (id, type, parent_id, title, description, status, priority, INSERT INTO tickets (id, type, parent_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-176', 'task', 'T-164', 'AskUserQuestion native picker: stepper + review, Other, per-choice note', 'Overhaul the AskUserQuestion bottom-zone card (prompt_card.dart). Single question -> no stepper, bare question + options. Multiple (2-4) -> stepper: top nav showing "N - Header" per step (check on answered, box on current) + prev/next arrows, one question at a time with Back/Next, then a Review screen (question -> answer, Back / Submit answers). Each question: numbered option buttons (1-4) + an Other choice that reveals a free-text field (typed text becomes the answer value, not the word Other) + a +note affordance on a picked option (answer becomes Label - note). multiSelect toggles and comma-joins labels. A chat-instead escape denies the prompt (message: user chose to chat instead) and refocuses the composer. On submit -> allow{updatedInput:{questions, answers}} -> card closes -> clide appends a compact answered echo item to the conversation log. Acceptance: single vs multi layouts; Other + note produce correct answer strings; review step; chat-instead denies + refocuses; widget tests. Wireframes: docs/design/wireframes/claude-prompts/ (01 single, 02 stepper, 03 review).', 'done', 'high', NULL, NULL, 'D-78', '2026-05-25 07:11:16', '2026-05-25 07:27:57', NULL, 'c63148c0b3d03a97b5ccc7e75133916d', 1) ON CONFLICT(id) DO UPDATE SET type=excluded.type, parent_id=excluded.parent_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash); INSERT INTO tickets (id, type, parent_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-178', 'task', 'T-164', 'De-emphasize harness-injected user messages (skill/command injects)', 'When a skill or slash-command is invoked, Claude injects its content as a user-role message (e.g. skill text begins "Base directory for this skill:", commands wrap content in //, system reminders in ). These are NOT typed by the user but render as a normal blue "you" card. Detect injected user messages (content markers; also isMeta when present) and render them de-emphasized: a collapsed, muted "context" card (bare variant), NOT the blue "you" accent. UserMessage gains an injected flag set in parseTranscriptChunk; conversation_view renders injected user messages collapsed/muted. Acceptance: a skill-inject user message renders collapsed + muted + not labelled "you"; a normal typed message still renders as "you"; widget + parser tests.', 'done', 'medium', NULL, NULL, 'D-78', '2026-05-25 08:10:10', '2026-05-25 08:21:46', NULL, '0fdbcde0168c2563152bbd862fc69d50', 1) ON CONFLICT(id) DO UPDATE SET type=excluded.type, parent_id=excluded.parent_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash); INSERT INTO tickets (id, type, parent_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-179', 'task', 'T-164', 'Permission prompt shows the command; resolved tool-use collapses with green/red border', 'Two parts. (1) The permission prompt UI must show what is being permitted: render the tool input (e.g. the Bash command / Write content) in the prompt card as a collapsible, trimmed code block, so the user can see what they approve. (2) Replace the current full-hide of a permission-prompted tool-use card: while the prompt is open, keep the payload in the prompt (hidden from the log); after resolution, show a COLLAPSED one-line summary in the log with a green border when approved and a red border when denied. Requires the session to track per-tool_use_id outcome (pending/allow/deny) and expose it; the conversation view renders prompted tool-use cards collapsed + colour-bordered by outcome (and keeps the result). Acceptance: prompt shows the command (collapsible); after allow the tool-use shows collapsed with a green border, after deny a red border; widget tests.', 'done', 'medium', NULL, NULL, 'D-78', '2026-05-25 08:10:18', '2026-05-25 08:26:21', NULL, 'b0679e5eaf9cc6cff3ccecde0ed31909', 1) ON CONFLICT(id) DO UPDATE SET type=excluded.type, parent_id=excluded.parent_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash); +INSERT INTO tickets (id, type, parent_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-180', 'task', 'T-164', 'Team message inbox — broker chat (sidebar widget + poppable pane)', 'A team chat / message inbox: render the clide broker traffic as a chat-client timeline and make the user a first-class participant. (1) Timeline: every inter-agent message (send_message/broadcast) shown as chat rows with a colour-coded sender chip (tyre/gestalt/lead/you/...). (2) User as a broker participant: extend the T-170 broker so send_message(to: user) delivers into the inbox, and the team-awareness roster injected into each agent lists "you" as addressable; the user can post into the channel. (3) @-routing from the user: a recipient picker / @name parses to a broker route, @team (or no tag) broadcasts; reuse the slash-typeahead machinery for @-completion. (4) Interrupt tickbox on the composer: unchecked queues the message into the target next turn (normal broker delivery); checked sends an interrupt control_request to the target session (cancels its current turn) then delivers; default OFF. (5) One chat model, two surfaces: a compact sidebar widget in the cockpit (live feed + quick @-post) that pops out into a full chat pane. Wireframes: docs/design/wireframes/claude-prompts/05-team-cockpit-sidebar.png (widget) + 06-team-chat-pane.png (pane). Acceptance: broker messages render as chat; user posts route by @tag (one agent) or broadcast; interrupt tickbox cancels+delivers vs queues; widget and pane share one model; tests for routing + interrupt + render. Resolves the user-participation gaps from the team-mode screen analysis. Blocked by T-170 (broker).', 'backlog', 'medium', NULL, NULL, 'D-77', '2026-05-25 09:15:58', '2026-05-25 09:15:58', NULL, '7ab0fe757562e3b3b89398697e15e0a1', 1) ON CONFLICT(id) DO UPDATE SET type=excluded.type, parent_id=excluded.parent_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash); +INSERT INTO tickets (id, type, parent_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-181', 'task', 'T-164', 'Per-agent permission-mode cycle badge in the cockpit roster', 'Per-agent permission-mode control in the cockpit roster (extends T-171). Each roster row shows a mode badge (D default / A acceptEdits / P plan). Click cycles the SAFE trio default -> acceptEdits -> plan and sends set_permission_mode to that agent session (a confirmed stream-json control subtype). bypassPermissions is a footgun, so it is reachable only on SHIFT-click (behind a confirm), and the tooltip documents both behaviours. Acceptance: clicking the badge cycles the safe modes and the session receives set_permission_mode; shift-click can reach bypass behind a confirm; the badge reflects the live mode (T-157 status); tooltip explains click vs shift-click; widget + transport tests. Wireframe: docs/design/wireframes/claude-prompts/05-team-cockpit-sidebar.png. Blocked by T-169 (orchestrator).', 'backlog', 'low', NULL, NULL, 'D-77', '2026-05-25 09:16:05', '2026-05-25 09:16:05', NULL, '1223cc1467844aea060d17e4724d28bc', 1) ON CONFLICT(id) DO UPDATE SET type=excluded.type, parent_id=excluded.parent_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash); +INSERT INTO tickets (id, type, parent_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-182', 'task', 'T-164', 'Claude sidebar sub-tabs: Activity / Team / Config', 'The Claude meta-sidebar is overloaded (roster + tasks + messages + stats + config do not fit one scroll). Split it into a sub-tab strip (reuse the search-panel mode-strip pattern) with three tabs: (1) Activity — stats + live runtime visibility (T-141/T-157); (2) Team — roster + tasks + message-feed widget (T-171 + T-180), mostly hidden when solo and auto-fronted when a team is live; (3) Config — the Claude-environment view. Default to Activity. Acceptance: a sub-tab strip switches the sidebar body between the three surfaces; existing stats/team content slots into Activity/Team unchanged; Team auto-fronts on team spawn; widget tests for tab switching. Wireframes: docs/design/wireframes/claude-prompts/07-sidebar-activity-tab.png, 08-sidebar-team-tab.png, 09-sidebar-config-tab.png. Relates to T-141, T-157, T-171, T-180.', 'backlog', 'medium', NULL, NULL, 'D-77', '2026-05-25 09:26:31', '2026-05-25 09:26:31', NULL, 'bd3215543c20c774969362dc59dad249', 1) ON CONFLICT(id) DO UPDATE SET type=excluded.type, parent_id=excluded.parent_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash); +INSERT INTO tickets (id, type, parent_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('T-183', 'task', 'T-164', 'Claude Config sidebar tab — skills/agents/commands/settings/permissions/hooks/MCP', 'A comprehensive read view (with edit affordances where sensible) of the Claude environment, as the Config sub-tab of the sidebar (T-182). Sources: ClaudeConfig (D-76 / T-151, already reads skills, commands, settings, permissions from ~/.claude + .claude layered) plus the stream-json init/initialize payloads (agents, output styles + available styles, MCP servers, models, plugins). Sections: SKILLS, AGENTS, COMMANDS, PERMISSIONS (allow/ask/deny, colour-coded), HOOKS, MCP SERVERS, SETTINGS (model, output style). Show local+global layering (local wins) and that it is watched/live. Covers the interaction-type surfaces documented on anthropic.com so the user can see everything configured for Claude in one place. Acceptance: each section lists its entries from ClaudeConfig + init data; permissions colour-coded by rule kind; layering + source shown; updates live on a watched .claude change; widget tests. Wireframe: docs/design/wireframes/claude-prompts/09-sidebar-config-tab.png. Blocked by T-182 (sub-tab shell).', 'backlog', 'medium', NULL, NULL, 'D-76', '2026-05-25 09:26:40', '2026-05-25 09:26:40', NULL, '9cbe6736b38163e60c448b0e0af3153d', 1) ON CONFLICT(id) DO UPDATE SET type=excluded.type, parent_id=excluded.parent_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash); diff --git a/docs/design/wireframes/claude-prompts/05-team-cockpit-sidebar.json b/docs/design/wireframes/claude-prompts/05-team-cockpit-sidebar.json new file mode 100644 index 00000000..6213dcb1 --- /dev/null +++ b/docs/design/wireframes/claude-prompts/05-team-cockpit-sidebar.json @@ -0,0 +1,63 @@ +{ + "name": "Clide — team cockpit sidebar", + "shapes": { + "panel": {"type": "Rectangle", "left": 40, "top": 24, "width": 340, "height": 740, "fillColor": "#1a1e24", "strokeColor": "#333340", "corners": [8, 8, 8, 8]}, + + "h-team": {"type": "Text", "parent": "panel", "left": 58, "top": 40, "text": "TEAM", "fontColor": "#7a8290", "fontSize": 12}, + + "d-main": {"type": "Rectangle", "parent": "panel", "left": 58, "top": 70, "width": 9, "height": 9, "fillColor": "#d97757", "strokeColor": "#d97757", "corners": [2, 2, 2, 2]}, + "n-main": {"type": "Text", "parent": "panel", "left": 74, "top": 66, "text": "main · lead", "fontColor": "#c8d0e0", "fontSize": 13}, + "s-main": {"type": "Text", "parent": "panel", "left": 170, "top": 67, "text": "synthesizing", "fontColor": "#7a8290", "fontSize": 11}, + "p-main": {"type": "Rectangle", "parent": "panel", "left": 336, "top": 64, "width": 22, "height": 18, "fillColor": "#1f2a44", "strokeColor": "#5aa0e0", "corners": [3, 3, 3, 3]}, + "pt-main": {"type": "Text", "parent": "panel", "left": 343, "top": 65, "text": "P", "fontColor": "#5aa0e0", "fontSize": 12}, + + "d-tyre": {"type": "Rectangle", "parent": "panel", "left": 58, "top": 104, "width": 9, "height": 9, "fillColor": "#b08cff", "strokeColor": "#b08cff", "corners": [2, 2, 2, 2]}, + "n-tyre": {"type": "Text", "parent": "panel", "left": 74, "top": 100, "text": "tyre", "fontColor": "#c8d0e0", "fontSize": 13}, + "s-tyre": {"type": "Text", "parent": "panel", "left": 170, "top": 101, "text": "thinking · 38%", "fontColor": "#7a8290", "fontSize": 11}, + "p-tyre": {"type": "Rectangle", "parent": "panel", "left": 336, "top": 98, "width": 22, "height": 18, "fillColor": "#1d2e22", "strokeColor": "#5cb87a", "corners": [3, 3, 3, 3]}, + "pt-tyre": {"type": "Text", "parent": "panel", "left": 343, "top": 99, "text": "A", "fontColor": "#5cb87a", "fontSize": 12}, + + "d-burn": {"type": "Rectangle", "parent": "panel", "left": 58, "top": 138, "width": 9, "height": 9, "fillColor": "#e0a04a", "strokeColor": "#e0a04a", "corners": [2, 2, 2, 2]}, + "n-burn": {"type": "Text", "parent": "panel", "left": 74, "top": 134, "text": "burnelli", "fontColor": "#c8d0e0", "fontSize": 13}, + "s-burn": {"type": "Text", "parent": "panel", "left": 170, "top": 135, "text": "writing · 26%", "fontColor": "#7a8290", "fontSize": 11}, + "p-burn": {"type": "Rectangle", "parent": "panel", "left": 336, "top": 132, "width": 22, "height": 18, "fillColor": "#1d2e22", "strokeColor": "#5cb87a", "corners": [3, 3, 3, 3]}, + "pt-burn": {"type": "Text", "parent": "panel", "left": 343, "top": 133, "text": "A", "fontColor": "#5cb87a", "fontSize": 12}, + + "d-gest": {"type": "Rectangle", "parent": "panel", "left": 58, "top": 172, "width": 9, "height": 9, "fillColor": "#e36fb0", "strokeColor": "#e36fb0", "corners": [2, 2, 2, 2]}, + "n-gest": {"type": "Text", "parent": "panel", "left": 74, "top": 168, "text": "gestalt", "fontColor": "#c8d0e0", "fontSize": 13}, + "s-gest": {"type": "Text", "parent": "panel", "left": 170, "top": 169, "text": "reading · 26%", "fontColor": "#7a8290", "fontSize": 11}, + "p-gest": {"type": "Rectangle", "parent": "panel", "left": 336, "top": 166, "width": 22, "height": 18, "fillColor": "#22262e", "strokeColor": "#7a8290", "corners": [3, 3, 3, 3]}, + "pt-gest": {"type": "Text", "parent": "panel", "left": 343, "top": 167, "text": "D", "fontColor": "#9aa4b2", "fontSize": 12}, + + "d-nig": {"type": "Rectangle", "parent": "panel", "left": 58, "top": 206, "width": 9, "height": 9, "fillColor": "#3fb9b0", "strokeColor": "#3fb9b0", "corners": [2, 2, 2, 2]}, + "n-nig": {"type": "Text", "parent": "panel", "left": 74, "top": 202, "text": "nigel", "fontColor": "#c8d0e0", "fontSize": 13}, + "s-nig": {"type": "Text", "parent": "panel", "left": 170, "top": 203, "text": "thinking · 32%", "fontColor": "#7a8290", "fontSize": 11}, + "p-nig": {"type": "Rectangle", "parent": "panel", "left": 336, "top": 200, "width": 22, "height": 18, "fillColor": "#1d2e22", "strokeColor": "#5cb87a", "corners": [3, 3, 3, 3]}, + "pt-nig": {"type": "Text", "parent": "panel", "left": 343, "top": 201, "text": "A", "fontColor": "#5cb87a", "fontSize": 12}, + + "perm-note": {"type": "Text", "parent": "panel", "left": 58, "top": 232, "text": "click the mode badge to cycle (D→A→P) · shift-click for bypass", "fontColor": "#5b6470", "fontSize": 10}, + + "div1": {"type": "Line", "parent": "panel", "left": 58, "top": 256, "width": 304, "height": 1, "strokeColor": "#2a3038"}, + + "h-tasks": {"type": "Text", "parent": "panel", "left": 58, "top": 268, "text": "TASKS", "fontColor": "#7a8290", "fontSize": 12}, + "t1": {"type": "Text", "parent": "panel", "left": 58, "top": 294, "text": "◐ tile-type taxonomy", "fontColor": "#c8d0e0", "fontSize": 12}, + "t1a": {"type": "Text", "parent": "panel", "left": 330, "top": 294, "text": "tyre", "fontColor": "#b08cff", "fontSize": 11}, + "t2": {"type": "Text", "parent": "panel", "left": 58, "top": 318, "text": "○ reverse requirements", "fontColor": "#c8d0e0", "fontSize": 12}, + "t2a": {"type": "Text", "parent": "panel", "left": 322, "top": 318, "text": "gestalt", "fontColor": "#e36fb0", "fontSize": 11}, + "t3": {"type": "Text", "parent": "panel", "left": 58, "top": 342, "text": "✓ water-model brief", "fontColor": "#7a8290", "fontSize": 12}, + + "div2": {"type": "Line", "parent": "panel", "left": 58, "top": 372, "width": 304, "height": 1, "strokeColor": "#2a3038"}, + + "h-msg": {"type": "Text", "parent": "panel", "left": 58, "top": 384, "text": "MESSAGES", "fontColor": "#7a8290", "fontSize": 12}, + "popout": {"type": "Text", "parent": "panel", "left": 300, "top": 384, "text": "⤢ pop out", "fontColor": "#5aa0e0", "fontSize": 11}, + "m1n": {"type": "Text", "parent": "panel", "left": 58, "top": 410, "text": "tyre → lead", "fontColor": "#b08cff", "fontSize": 11}, + "m1t": {"type": "Text", "parent": "panel", "left": 58, "top": 426, "text": "opening position: tiles are a discrete…", "fontColor": "#9aa4b2", "fontSize": 11}, + "m2n": {"type": "Text", "parent": "panel", "left": 58, "top": 452, "text": "lead → you", "fontColor": "#d97757", "fontSize": 11}, + "m2t": {"type": "Text", "parent": "panel", "left": 58, "top": 468, "text": "relaying gestalt's flat-taxonomy take…", "fontColor": "#9aa4b2", "fontSize": 11}, + "m3n": {"type": "Text", "parent": "panel", "left": 58, "top": 494, "text": "you → team", "fontColor": "#5aa0e0", "fontSize": 11}, + "m3t": {"type": "Text", "parent": "panel", "left": 58, "top": 510, "text": "focus on tile types only", "fontColor": "#9aa4b2", "fontSize": 11}, + + "postbox": {"type": "Rectangle", "parent": "panel", "left": 58, "top": 700, "width": 304, "height": 36, "fillColor": "#14181d", "strokeColor": "#333340", "corners": [4, 4, 4, 4]}, + "post-t": {"type": "Text", "parent": "panel", "left": 70, "top": 710, "text": "@team message…", "fontColor": "#5b6470", "fontSize": 12} + } +} diff --git a/docs/design/wireframes/claude-prompts/05-team-cockpit-sidebar.png b/docs/design/wireframes/claude-prompts/05-team-cockpit-sidebar.png new file mode 100644 index 00000000..f95125dd Binary files /dev/null and b/docs/design/wireframes/claude-prompts/05-team-cockpit-sidebar.png differ diff --git a/docs/design/wireframes/claude-prompts/06-team-chat-pane.json b/docs/design/wireframes/claude-prompts/06-team-chat-pane.json new file mode 100644 index 00000000..fdd3a6c2 --- /dev/null +++ b/docs/design/wireframes/claude-prompts/06-team-chat-pane.json @@ -0,0 +1,36 @@ +{ + "name": "Clide — team chat pane", + "shapes": { + "panel": {"type": "Rectangle", "left": 40, "top": 30, "width": 860, "height": 540, "fillColor": "#1a1e24", "strokeColor": "#333340", "corners": [8, 8, 8, 8]}, + "accent": {"type": "Rectangle", "left": 40, "top": 30, "width": 860, "height": 4, "fillColor": "#5aa0e0", "strokeColor": "#5aa0e0", "corners": [8, 8, 0, 0]}, + "title": {"type": "Text", "parent": "panel", "left": 60, "top": 48, "text": "team chat", "fontColor": "#5aa0e0", "fontSize": 13}, + + "c1": {"type": "Text", "parent": "panel", "left": 60, "top": 80, "text": "tyre → lead", "fontColor": "#b08cff", "fontSize": 12}, + "m1": {"type": "Text", "parent": "panel", "left": 60, "top": 98, "text": "Opening position: a tile is a discrete surface kind on a body; propose 7 base kinds + 2 modifiers.", "fontColor": "#c8d0e0", "fontSize": 13}, + + "c2": {"type": "Text", "parent": "panel", "left": 60, "top": 134, "text": "gestalt → lead", "fontColor": "#e36fb0", "fontSize": 12}, + "m2": {"type": "Text", "parent": "panel", "left": 60, "top": 152, "text": "I'd keep it flat — a composable set bloats to hundreds of near-duplicates. One rationale per kind.", "fontColor": "#c8d0e0", "fontSize": 13}, + + "c3": {"type": "Text", "parent": "panel", "left": 60, "top": 188, "text": "you → team", "fontColor": "#5aa0e0", "fontSize": 12}, + "m3": {"type": "Text", "parent": "panel", "left": 60, "top": 206, "text": "Let's focus on tile types only this round — hold the broader derivation for later.", "fontColor": "#c8d0e0", "fontSize": 13}, + + "c4": {"type": "Text", "parent": "panel", "left": 60, "top": 242, "text": "lead → you", "fontColor": "#d97757", "fontSize": 12}, + "m4": {"type": "Text", "parent": "panel", "left": 60, "top": 260, "text": "On it — refocusing the room to a tile-type taxonomy; I'll relay each opening position as it lands.", "fontColor": "#c8d0e0", "fontSize": 13}, + + "c5": {"type": "Text", "parent": "panel", "left": 60, "top": 296, "text": "nigel → you", "fontColor": "#3fb9b0", "fontSize": 12}, + "m5": {"type": "Text", "parent": "panel", "left": 60, "top": 314, "text": "@you do types combine/compose for variety, or is a flat list enough? It changes my taxonomy.", "fontColor": "#c8d0e0", "fontSize": 13}, + + "divider": {"type": "Line", "parent": "panel", "left": 60, "top": 470, "width": 820, "height": 1, "strokeColor": "#2a3038"}, + + "to": {"type": "Rectangle", "parent": "panel", "left": 60, "top": 488, "width": 110, "height": 34, "fillColor": "#1f2a3a", "strokeColor": "#3a4250", "corners": [4, 4, 4, 4]}, + "to-t": {"type": "Text", "parent": "panel", "left": 74, "top": 496, "text": "@nigel ▾", "fontColor": "#9aa4b2", "fontSize": 13}, + "input": {"type": "Rectangle", "parent": "panel", "left": 178, "top": 488, "width": 470, "height": 34, "fillColor": "#14181d", "strokeColor": "#333340", "corners": [4, 4, 4, 4]}, + "input-t": {"type": "Text", "parent": "panel", "left": 192, "top": 496, "text": "they compose — pick from 7 base + 2 modifiers", "fontColor": "#5b6470", "fontSize": 13}, + + "intr-box": {"type": "Rectangle", "parent": "panel", "left": 660, "top": 494, "width": 16, "height": 16, "fillColor": "#14181d", "strokeColor": "#7a8290", "corners": [3, 3, 3, 3]}, + "intr-t": {"type": "Text", "parent": "panel", "left": 682, "top": 496, "text": "interrupt", "fontColor": "#9aa4b2", "fontSize": 12}, + + "send": {"type": "Rectangle", "parent": "panel", "left": 770, "top": 488, "width": 90, "height": 34, "fillColor": "#3b5bdb", "strokeColor": "#3b5bdb", "corners": [4, 4, 4, 4]}, + "send-t": {"type": "Text", "parent": "panel", "left": 794, "top": 496, "text": "Send", "fontColor": "#ffffff", "fontSize": 14} + } +} diff --git a/docs/design/wireframes/claude-prompts/06-team-chat-pane.png b/docs/design/wireframes/claude-prompts/06-team-chat-pane.png new file mode 100644 index 00000000..57a31662 Binary files /dev/null and b/docs/design/wireframes/claude-prompts/06-team-chat-pane.png differ diff --git a/docs/design/wireframes/claude-prompts/07-sidebar-activity-tab.json b/docs/design/wireframes/claude-prompts/07-sidebar-activity-tab.json new file mode 100644 index 00000000..0c599df4 --- /dev/null +++ b/docs/design/wireframes/claude-prompts/07-sidebar-activity-tab.json @@ -0,0 +1,28 @@ +{ + "name": "Clide — sidebar Activity tab", + "shapes": { + "panel": {"type": "Rectangle", "left": 40, "top": 24, "width": 340, "height": 740, "fillColor": "#1a1e24", "strokeColor": "#333340", "corners": [8, 8, 8, 8]}, + + "tab-a": {"type": "Text", "parent": "panel", "left": 58, "top": 40, "text": "Activity", "fontColor": "#5aa0e0", "fontSize": 13}, + "tab-a-u": {"type": "Rectangle", "parent": "panel", "left": 56, "top": 60, "width": 60, "height": 2, "fillColor": "#5aa0e0", "strokeColor": "#5aa0e0", "corners": [0, 0, 0, 0]}, + "tab-t": {"type": "Text", "parent": "panel", "left": 140, "top": 40, "text": "Team", "fontColor": "#7a8290", "fontSize": 13}, + "tab-c": {"type": "Text", "parent": "panel", "left": 210, "top": 40, "text": "Config", "fontColor": "#7a8290", "fontSize": 13}, + "strip": {"type": "Line", "parent": "panel", "left": 40, "top": 62, "width": 340, "height": 1, "strokeColor": "#2a3038"}, + + "h-today": {"type": "Text", "parent": "panel", "left": 58, "top": 82, "text": "TODAY", "fontColor": "#7a8290", "fontSize": 12}, + "t1": {"type": "Text", "parent": "panel", "left": 58, "top": 106, "text": "142 messages", "fontColor": "#c8d0e0", "fontSize": 13}, + "t2": {"type": "Text", "parent": "panel", "left": 58, "top": 130, "text": "12 sessions", "fontColor": "#c8d0e0", "fontSize": 13}, + "t3": {"type": "Text", "parent": "panel", "left": 58, "top": 154, "text": "318 tool calls", "fontColor": "#c8d0e0", "fontSize": 13}, + + "div1": {"type": "Line", "parent": "panel", "left": 58, "top": 186, "width": 304, "height": 1, "strokeColor": "#2a3038"}, + "h-life": {"type": "Text", "parent": "panel", "left": 58, "top": 200, "text": "LIFETIME", "fontColor": "#7a8290", "fontSize": 12}, + "l1": {"type": "Text", "parent": "panel", "left": 58, "top": 224, "text": "4,120 messages", "fontColor": "#c8d0e0", "fontSize": 13}, + "l2": {"type": "Text", "parent": "panel", "left": 58, "top": 248, "text": "286 sessions", "fontColor": "#c8d0e0", "fontSize": 13}, + + "div2": {"type": "Line", "parent": "panel", "left": 58, "top": 280, "width": 304, "height": 1, "strokeColor": "#2a3038"}, + "h-run": {"type": "Text", "parent": "panel", "left": 58, "top": 294, "text": "RUNTIME · primary", "fontColor": "#7a8290", "fontSize": 12}, + "r1": {"type": "Text", "parent": "panel", "left": 58, "top": 318, "text": "claude-opus-4-7 [1M]", "fontColor": "#d97757", "fontSize": 13}, + "r2": {"type": "Text", "parent": "panel", "left": 58, "top": 342, "text": "ctx 54% · accept-edits", "fontColor": "#c8d0e0", "fontSize": 13}, + "r3": {"type": "Text", "parent": "panel", "left": 58, "top": 366, "text": "14 skills configured", "fontColor": "#9aa4b2", "fontSize": 12} + } +} diff --git a/docs/design/wireframes/claude-prompts/07-sidebar-activity-tab.png b/docs/design/wireframes/claude-prompts/07-sidebar-activity-tab.png new file mode 100644 index 00000000..233c104d Binary files /dev/null and b/docs/design/wireframes/claude-prompts/07-sidebar-activity-tab.png differ diff --git a/docs/design/wireframes/claude-prompts/08-sidebar-team-tab.json b/docs/design/wireframes/claude-prompts/08-sidebar-team-tab.json new file mode 100644 index 00000000..dc567d65 --- /dev/null +++ b/docs/design/wireframes/claude-prompts/08-sidebar-team-tab.json @@ -0,0 +1,54 @@ +{ + "name": "Clide — sidebar Team tab", + "shapes": { + "panel": {"type": "Rectangle", "left": 40, "top": 24, "width": 340, "height": 740, "fillColor": "#1a1e24", "strokeColor": "#333340", "corners": [8, 8, 8, 8]}, + + "tab-a": {"type": "Text", "parent": "panel", "left": 58, "top": 40, "text": "Activity", "fontColor": "#7a8290", "fontSize": 13}, + "tab-t": {"type": "Text", "parent": "panel", "left": 140, "top": 40, "text": "Team", "fontColor": "#5aa0e0", "fontSize": 13}, + "tab-t-u": {"type": "Rectangle", "parent": "panel", "left": 138, "top": 60, "width": 44, "height": 2, "fillColor": "#5aa0e0", "strokeColor": "#5aa0e0", "corners": [0, 0, 0, 0]}, + "tab-c": {"type": "Text", "parent": "panel", "left": 210, "top": 40, "text": "Config", "fontColor": "#7a8290", "fontSize": 13}, + "strip": {"type": "Line", "parent": "panel", "left": 40, "top": 62, "width": 340, "height": 1, "strokeColor": "#2a3038"}, + + "d-main": {"type": "Rectangle", "parent": "panel", "left": 58, "top": 88, "width": 9, "height": 9, "fillColor": "#d97757", "strokeColor": "#d97757", "corners": [2, 2, 2, 2]}, + "n-main": {"type": "Text", "parent": "panel", "left": 74, "top": 84, "text": "main · lead", "fontColor": "#c8d0e0", "fontSize": 13}, + "s-main": {"type": "Text", "parent": "panel", "left": 180, "top": 85, "text": "synthesizing", "fontColor": "#7a8290", "fontSize": 11}, + "p-main": {"type": "Rectangle", "parent": "panel", "left": 336, "top": 82, "width": 22, "height": 18, "fillColor": "#1f2a44", "strokeColor": "#5aa0e0", "corners": [3, 3, 3, 3]}, + "pt-main": {"type": "Text", "parent": "panel", "left": 343, "top": 83, "text": "P", "fontColor": "#5aa0e0", "fontSize": 12}, + + "d-tyre": {"type": "Rectangle", "parent": "panel", "left": 58, "top": 120, "width": 9, "height": 9, "fillColor": "#b08cff", "strokeColor": "#b08cff", "corners": [2, 2, 2, 2]}, + "n-tyre": {"type": "Text", "parent": "panel", "left": 74, "top": 116, "text": "tyre", "fontColor": "#c8d0e0", "fontSize": 13}, + "s-tyre": {"type": "Text", "parent": "panel", "left": 180, "top": 117, "text": "thinking · 38%", "fontColor": "#7a8290", "fontSize": 11}, + "p-tyre": {"type": "Rectangle", "parent": "panel", "left": 336, "top": 114, "width": 22, "height": 18, "fillColor": "#1d2e22", "strokeColor": "#5cb87a", "corners": [3, 3, 3, 3]}, + "pt-tyre": {"type": "Text", "parent": "panel", "left": 343, "top": 115, "text": "A", "fontColor": "#5cb87a", "fontSize": 12}, + + "d-gest": {"type": "Rectangle", "parent": "panel", "left": 58, "top": 152, "width": 9, "height": 9, "fillColor": "#e36fb0", "strokeColor": "#e36fb0", "corners": [2, 2, 2, 2]}, + "n-gest": {"type": "Text", "parent": "panel", "left": 74, "top": 148, "text": "gestalt", "fontColor": "#c8d0e0", "fontSize": 13}, + "s-gest": {"type": "Text", "parent": "panel", "left": 180, "top": 149, "text": "reading · 26%", "fontColor": "#7a8290", "fontSize": 11}, + "p-gest": {"type": "Rectangle", "parent": "panel", "left": 336, "top": 146, "width": 22, "height": 18, "fillColor": "#22262e", "strokeColor": "#7a8290", "corners": [3, 3, 3, 3]}, + "pt-gest": {"type": "Text", "parent": "panel", "left": 343, "top": 147, "text": "D", "fontColor": "#9aa4b2", "fontSize": 12}, + + "d-nig": {"type": "Rectangle", "parent": "panel", "left": 58, "top": 184, "width": 9, "height": 9, "fillColor": "#3fb9b0", "strokeColor": "#3fb9b0", "corners": [2, 2, 2, 2]}, + "n-nig": {"type": "Text", "parent": "panel", "left": 74, "top": 180, "text": "nigel", "fontColor": "#c8d0e0", "fontSize": 13}, + "s-nig": {"type": "Text", "parent": "panel", "left": 180, "top": 181, "text": "thinking · 32%", "fontColor": "#7a8290", "fontSize": 11}, + "p-nig": {"type": "Rectangle", "parent": "panel", "left": 336, "top": 178, "width": 22, "height": 18, "fillColor": "#1d2e22", "strokeColor": "#5cb87a", "corners": [3, 3, 3, 3]}, + "pt-nig": {"type": "Text", "parent": "panel", "left": 343, "top": 179, "text": "A", "fontColor": "#5cb87a", "fontSize": 12}, + + "div1": {"type": "Line", "parent": "panel", "left": 58, "top": 214, "width": 304, "height": 1, "strokeColor": "#2a3038"}, + "h-tasks": {"type": "Text", "parent": "panel", "left": 58, "top": 226, "text": "TASKS", "fontColor": "#7a8290", "fontSize": 12}, + "t1": {"type": "Text", "parent": "panel", "left": 58, "top": 250, "text": "◐ tile-type taxonomy", "fontColor": "#c8d0e0", "fontSize": 12}, + "t1a": {"type": "Text", "parent": "panel", "left": 330, "top": 250, "text": "tyre", "fontColor": "#b08cff", "fontSize": 11}, + "t2": {"type": "Text", "parent": "panel", "left": 58, "top": 274, "text": "○ reverse requirements", "fontColor": "#c8d0e0", "fontSize": 12}, + "t2a": {"type": "Text", "parent": "panel", "left": 322, "top": 274, "text": "gestalt", "fontColor": "#e36fb0", "fontSize": 11}, + + "div2": {"type": "Line", "parent": "panel", "left": 58, "top": 306, "width": 304, "height": 1, "strokeColor": "#2a3038"}, + "h-msg": {"type": "Text", "parent": "panel", "left": 58, "top": 318, "text": "MESSAGES", "fontColor": "#7a8290", "fontSize": 12}, + "popout": {"type": "Text", "parent": "panel", "left": 300, "top": 318, "text": "⤢ pop out", "fontColor": "#5aa0e0", "fontSize": 11}, + "m1n": {"type": "Text", "parent": "panel", "left": 58, "top": 344, "text": "tyre → lead", "fontColor": "#b08cff", "fontSize": 11}, + "m1t": {"type": "Text", "parent": "panel", "left": 58, "top": 360, "text": "opening position: tiles are a discrete…", "fontColor": "#9aa4b2", "fontSize": 11}, + "m2n": {"type": "Text", "parent": "panel", "left": 58, "top": 386, "text": "lead → you", "fontColor": "#d97757", "fontSize": 11}, + "m2t": {"type": "Text", "parent": "panel", "left": 58, "top": 402, "text": "relaying gestalt's flat-taxonomy take…", "fontColor": "#9aa4b2", "fontSize": 11}, + + "postbox": {"type": "Rectangle", "parent": "panel", "left": 58, "top": 700, "width": 304, "height": 36, "fillColor": "#14181d", "strokeColor": "#333340", "corners": [4, 4, 4, 4]}, + "post-t": {"type": "Text", "parent": "panel", "left": 70, "top": 710, "text": "@team message…", "fontColor": "#5b6470", "fontSize": 12} + } +} diff --git a/docs/design/wireframes/claude-prompts/08-sidebar-team-tab.png b/docs/design/wireframes/claude-prompts/08-sidebar-team-tab.png new file mode 100644 index 00000000..733d0be7 Binary files /dev/null and b/docs/design/wireframes/claude-prompts/08-sidebar-team-tab.png differ diff --git a/docs/design/wireframes/claude-prompts/09-sidebar-config-tab.json b/docs/design/wireframes/claude-prompts/09-sidebar-config-tab.json new file mode 100644 index 00000000..360e4f7a --- /dev/null +++ b/docs/design/wireframes/claude-prompts/09-sidebar-config-tab.json @@ -0,0 +1,38 @@ +{ + "name": "Clide — sidebar Config tab", + "shapes": { + "panel": {"type": "Rectangle", "left": 40, "top": 24, "width": 340, "height": 740, "fillColor": "#1a1e24", "strokeColor": "#333340", "corners": [8, 8, 8, 8]}, + + "tab-a": {"type": "Text", "parent": "panel", "left": 58, "top": 40, "text": "Activity", "fontColor": "#7a8290", "fontSize": 13}, + "tab-t": {"type": "Text", "parent": "panel", "left": 140, "top": 40, "text": "Team", "fontColor": "#7a8290", "fontSize": 13}, + "tab-c": {"type": "Text", "parent": "panel", "left": 210, "top": 40, "text": "Config", "fontColor": "#5aa0e0", "fontSize": 13}, + "tab-c-u": {"type": "Rectangle", "parent": "panel", "left": 208, "top": 60, "width": 52, "height": 2, "fillColor": "#5aa0e0", "strokeColor": "#5aa0e0", "corners": [0, 0, 0, 0]}, + "strip": {"type": "Line", "parent": "panel", "left": 40, "top": 62, "width": 340, "height": 1, "strokeColor": "#2a3038"}, + "scope": {"type": "Text", "parent": "panel", "left": 58, "top": 76, "text": "local + global (layered, local wins)", "fontColor": "#5b6470", "fontSize": 10}, + + "h-skills": {"type": "Text", "parent": "panel", "left": 58, "top": 100, "text": "SKILLS (14)", "fontColor": "#7a8290", "fontSize": 12}, + "skills": {"type": "Text", "parent": "panel", "left": 58, "top": 120, "text": "pql · whats-next · git-commit · ui-design …", "fontColor": "#c8d0e0", "fontSize": 12}, + + "h-agents": {"type": "Text", "parent": "panel", "left": 58, "top": 150, "text": "AGENTS (5)", "fontColor": "#7a8290", "fontSize": 12}, + "agents": {"type": "Text", "parent": "panel", "left": 58, "top": 170, "text": "claude · Explore · general-purpose · Plan …", "fontColor": "#c8d0e0", "fontSize": 12}, + + "h-cmds": {"type": "Text", "parent": "panel", "left": 58, "top": 200, "text": "COMMANDS (28)", "fontColor": "#7a8290", "fontSize": 12}, + "cmds": {"type": "Text", "parent": "panel", "left": 58, "top": 220, "text": "clear · compact · review · security-review …", "fontColor": "#c8d0e0", "fontSize": 12}, + + "h-perms": {"type": "Text", "parent": "panel", "left": 58, "top": 250, "text": "PERMISSIONS", "fontColor": "#7a8290", "fontSize": 12}, + "perm-allow": {"type": "Text", "parent": "panel", "left": 58, "top": 270, "text": "allow: Bash(pql *), Bash(git *), Read", "fontColor": "#5cb87a", "fontSize": 12}, + "perm-ask": {"type": "Text", "parent": "panel", "left": 58, "top": 290, "text": "ask: Write, Edit, Bash", "fontColor": "#e0a04a", "fontSize": 12}, + "perm-deny": {"type": "Text", "parent": "panel", "left": 58, "top": 310, "text": "deny: —", "fontColor": "#9aa4b2", "fontSize": 12}, + + "h-hooks": {"type": "Text", "parent": "panel", "left": 58, "top": 340, "text": "HOOKS", "fontColor": "#7a8290", "fontSize": 12}, + "hooks": {"type": "Text", "parent": "panel", "left": 58, "top": 360, "text": "SessionStart · PreToolUse · Stop", "fontColor": "#c8d0e0", "fontSize": 12}, + + "h-mcp": {"type": "Text", "parent": "panel", "left": 58, "top": 390, "text": "MCP SERVERS (5)", "fontColor": "#7a8290", "fontSize": 12}, + "mcp": {"type": "Text", "parent": "panel", "left": 58, "top": 410, "text": "Drive · Gmail · Calendar · Housekeeping …", "fontColor": "#c8d0e0", "fontSize": 12}, + + "h-settings": {"type": "Text", "parent": "panel", "left": 58, "top": 440, "text": "SETTINGS", "fontColor": "#7a8290", "fontSize": 12}, + "s-model": {"type": "Text", "parent": "panel", "left": 58, "top": 460, "text": "model: opus · output style: default", "fontColor": "#c8d0e0", "fontSize": 12}, + + "edit-hint": {"type": "Text", "parent": "panel", "left": 58, "top": 700, "text": "↳ source: ~/.claude + .claude · watched", "fontColor": "#5b6470", "fontSize": 10} + } +} diff --git a/docs/design/wireframes/claude-prompts/09-sidebar-config-tab.png b/docs/design/wireframes/claude-prompts/09-sidebar-config-tab.png new file mode 100644 index 00000000..337cd4f5 Binary files /dev/null and b/docs/design/wireframes/claude-prompts/09-sidebar-config-tab.png differ