jason_
Jason Poindexter / PortfolioDesign leadership + production AIStart a conversation
JASONPOINDEXTER
Menu
Case study / Brutal / Solo product, UX, and architecture

The cockpit passed its checks. The workflow still failed.

Brutal is a native cockpit for supervising work written by coding agents. Projects, agent sessions, terminals, changed files, review evidence, and recovery stay in one workspace. It is still in development, so this case separates what I observed, what I reconstructed, what I executed, and what is still proposed.

Role
Solo product, UX, architecture, engineering
Research
13 Claude and 44 Codex sessions
Evidence
2,515 recorded tool calls
Status
16 cards shipped, 4 active on 27 July 2026
01 / Stage setting

The cockpit passed its checks. The workflow still failed.

Brutal is a native cockpit for supervising work written by coding agents. Projects, agent sessions, terminals, changed files, review evidence, and recovery stay in one workspace. It is still in development, so this case separates what I observed, what I reconstructed, what I executed, and what is still proposed.

02 / Problem

The interface could run the work. It could not explain the work.

The first brief was about replacing a pile of editor windows with one multi-pane app. The session record showed a different problem. I kept asking what was left, pasting screenshots to explain defects, and sending a separate push instruction after the work looked finished.

03 / My role

Solo product, UX, architecture, engineering

Solo product, UX, architecture, engineering

04 / Direction

Brutal stopped pretending to be an editor.

The transcripts showed that most of the work happened in the shell. I rarely edited by hand. What I needed was a way to watch the work and correct it. Brutal changed from an editor with agents around it to a supervision cockpit with an editor available when I need to inspect a file.

05 / Impact

The launched artifact, not the roadmap, decides what is real.

A parity audit found fixture data presented as real state and five controls that did nothing, even though fifteen roadmap cards had passed. I listed every visible surface, connected displayed values to production state, and removed unverified claims from the shipped column.

What it is

A native cockpit for directing, watching, and shipping agent work.

I am the primary observed user: one developer running several local coding agents across repositories. Each project and pane keeps its own state. The terminal, agent, editor, diff, review, and workflow evidence stay close enough to supervise as one system.

The problem

The interface could run the work. It could not explain the work.

The first brief was about replacing a pile of editor windows with one multi-pane app. The session record showed a different problem. I kept asking what was left, pasting screenshots to explain defects, and sending a separate push instruction after the work looked finished.

  • 01Current work, failures, changed files, and remaining steps were not visible without another status request.
  • 02A screenshot was the recurring way to point at a visual defect because agent work was not watchable in the cockpit.
  • 03Several panes initially reused one application-level agent, terminal, and editor state instead of owning independent sessions.
  • 04A model response could end while tests, review, commit, push, or remote verification were still incomplete.
Framing and evidence

Start with the problem, not the finished interface.

Brutal began as a way to keep several agents, terminals, and repositories in one native workspace. The transcripts changed the brief. Editing code was not the hard part. The hard part was seeing what the agents were doing, what remained, what failed, and whether the work was ready to ship.

Observed evidence comes from the active repository, packaged-app audits, 13 Claude Code sessions, 44 Codex sessions, 2,515 recorded tool calls, the PRD, decision log, and execution ledger. The sitemap, flows, SWOT, wireflow, and low-fidelity frames are analytical reconstructions. No external usability study or adoption claim is made.

Project frame

Problem, users, team, and method

observed
How might one developer direct, watch, correct, and ship agent-written work without asking the interface what is happening or rebuilding context after every interruption?
  1. 01Observe
  2. 02Frame
  3. 03Map
  4. 04Wireframe
  5. 05Build
  6. 06Verify
Problemobserved

The operator could run several coding agents, but project state, remaining work, changed files, failures, and readiness to ship were scattered across windows and had to be requested in chat.

Goalobserved

Make agent-written work continuously supervisable: show live state without asking, make each agent's work inspectable, preserve recovery context, and make shipping a deliberate verified action.

Team and roleobserved

Solo product, UX, architecture, and engineering. Jason Poindexter defined the product, audited the work sessions, mapped the flows, built the prototypes and native application, and recorded acceptance evidence.

Userobserved

Primary observed user: Jason, a keyboard-and-mouse developer supervising several local coding agents across repositories. This is evidence from self-use, not a stand-in for external interviews or a market persona.

Research methodobserved

Repository and decision audit, transcript analysis, packaged-app launches, interaction and parity checks, responsive comparisons, failure review, and repeated screenshot-based critique.

Constraintsobserved

Local-first, native Rust and GPUI, provider-neutral agent contracts, real persistent PTYs, project-scoped state, explicit human gates, and no success claim without executed evidence.

Research findings

What the evidence says is broken

6 issues
01P0proposed

The operator had to ask what was left.

Evidence
Across the observed sessions, “what's left” or status was requested 12 times because current work, blockers, changes, and completion state were not visible.
Design response
Add an always-visible state strip with running work, repository state, failures, changes, and remaining steps.
02P0partial

A screenshot was the main defect-reporting channel.

Evidence
The observed loop repeatedly moved from long command runs to visual inspection and a pasted screenshot when the interface missed the mark.
Design response
Make agent work watchable in the product: surface commands, changed files, visual output, failed checks, and a compact review path beside the run.
03P0partial

Demo parity did not prove product fit.

Evidence
Fifteen roadmap cards passed their named criteria while five demo controls were inert and two surfaces rendered fabricated fixture data.
Design response
Enumerate every visible control, derive displayed values from production state, and test the launched artifact rather than trusting the roadmap or screenshot.
04P1executed

Several panes could show the same underlying session.

Evidence
The packaged-app audit found application-level agent, terminal, and editor state reused across panes.
Design response
Key agent, terminal, editor, transcript, draft, and execution state by pane identity.
05P1executed

Switching projects did not switch the workspace.

Evidence
Project selection changed the active label while one global pane tree and one active pane continued to render.
Design response
Give every project its own pane tree, sessions, layout, drafts, and persistence boundary.
06P1executed

A model response could end without verified success.

Evidence
The runtime had treated provider completion as if the requested work had passed its tests and review contract.
Design response
Separate model completion from workflow success. Require observed command evidence and independent review before a graph can succeed.

Status reports the July 2026 audit record. Proposed work is not presented as shipped.

Constraint analysis

SWOT reconstructed from the project record

reconstructed

Strengths

Internal / helpful
  • A native shell owns panes, sessions, persistence, permissions, and rendering.
  • Agent, terminal, editor, diff, review, and workflow are peer surfaces.
  • The graph contract separates model completion from evidence-backed success.

Weaknesses

Internal / harmful
  • The cockpit is still in development and has no user adoption evidence.
  • The foundation changed repeatedly before the current boundaries settled.
  • A mature terminal, editor, persistence, and agent host create a broad quality surface.

Opportunities

External / helpful
  • Parallel coding agents need a workspace built around independent session state.
  • Persistent local workflows can reduce the cost of reconstructing work after interruption.
  • Provider-neutral contracts can keep product behavior stable while runtimes change.

Threats

External / harmful
  • Provider-owned tools do not all expose the same pre-execution control.
  • Editor and terminal expectations are set by mature products with years of integration.
  • A multi-pane interface can become visual noise without strict focus and ownership cues.
This is an analytical reconstruction, not a claim that a formal SWOT workshop occurred.
Structure and interaction

Map the work before showing the finish.

The information architecture, user tasks, screen inventory, connected wireflow, individual frames, and implementation boundary are kept in one sequence.

Information architecture

Brutal sitemap

reconstructed
  • Brutal
    • Workspace
      • Project launcher
      • Project tabs
      • Session navigator
      • Pane tree
      • State strip
    • Supervise
      • Agent work
      • Live commands
      • Changed files
      • Failures
      • Workflow evidence
    • Inspect
      • Files
      • Editor
      • Diff
      • Review
      • Search
      • Git
    • Control
      • Approval
      • Retry or stop
      • Ship
      • Recovery
    • System
      • Providers and permissions
      • Persistent runtime
      • Settings and shortcuts
      • Help and diagnostics
The hierarchy is redrawn as a semantic tree. Connectors show parent and child relationships and collapse into a vertical reading order on narrow screens.
User flows

3 complete paths, including recovery

reconstructed
01

Direct and supervise agent-written work

Give one directive and keep the work visible without asking for status.

  1. 01Operator

    Give one short directive

  2. 02Brutal

    Bind the task to a project, pane, agent, and completion contract

  3. 03Agent

    Run commands and stream work evidence

  4. 04Brutal

    Keep process, changes, failures, and remaining work visible

  5. 05Operator

    Inspect, steer, approve, or stop

  6. 06Operator

    Accept the result or continue the loop

Recovery branch

If a command, provider, or check fails, preserve the transcript, changed files, and terminal reason. Return the failed step to the operator with retry, revise, fork, and stop choices.

02

Run several independent agents

Run several agents without mixing their transcripts, processes, drafts, or writers.

  1. 01Operator

    Split the workspace or open another project

  2. 02Brutal

    Create a new pane identity

  3. 03Operator

    Choose agent, terminal, editor, or review

  4. 04Runtime

    Create independent transcript, PTY, draft, and execution state

  5. 05Brutal

    Check the repository writer boundary

  6. 06Operator

    Supervise both sessions from one cockpit

Recovery branch

If a writer lease conflicts, the new agent stays read-only until the user isolates a worktree, transfers the lease, or cancels the write path.

03

Review and ship verified work

Commit and push only after the named checks pass.

  1. 01Operator

    Open changed files, commands, and the completion contract

  2. 02Brutal

    Run deterministic checks and independent review

  3. 03Evidence gate

    Compare observed results with the declared contract

  4. 04Operator

    Review the diff and shipping scope

  5. 05Brutal

    Commit, push, and verify the remote result

  6. 06Operator

    See an honest shipped or refused outcome

Recovery branch

A failed check, review, commit, push, or remote verification refuses the ship action, preserves the evidence, and routes back to the exact failed step.

Application map

Screens, purposes, and routes

9 screens

Enter and orient

Project launcherproposed

Open a repository or return to a persistent session.

Primary actionOpen or resume a project
emptyloadingmissing path
WorkspaceRecent projectSettings
Workspaceobserved

Hold project tabs, navigator, pane tree, utilities, and persistent status.

Primary actionChoose active work
restoredrunninginterrupted
Agent workTerminalEditor and diffWorkflow
State stripproposed

Show what is running, what changed, what failed, and what remains.

Primary actionOpen the item needing attention
idleactiveblockedready to ship
Agent workChanged filesFailure detailShip

Direct and watch

Agent workobserved

Direct one agent and inspect its transcript, tool events, commands, and result.

Primary actionSend, steer, or stop
readystreamingwaitingfailedcomplete
TerminalChanged filesReviewPermission
Terminalobserved

Run and inspect one persistent real process attached to the project.

Primary actionRun or inspect a command
idlerunningexiteddetached
Agent workEditor and diffRuntime status
Editor and diffproposed

Inspect changed files without turning the cockpit into an editor-first IDE.

Primary actionReview a change
cleandirtyconflictread-only
Agent workReviewGit

Decide, ship, recover

Approval and reviewproposed

Hold risky action, diff, scope, test evidence, and reviewer decision together.

Primary actionApprove, reject, or revise
waitingapprovedrejectedstale
Agent workEvidenceRetry
Shipproposed

Commit, push, and verify through one deliberate action with an honest result.

Primary actionShip verified work
not readyreadyshippingfailedshipped
ReviewFailure detailWorkspace
Session recoveryproposed

Restore projects, panes, drafts, processes, and checkpoints without hiding incomplete work.

Primary actionResume, fork, or stop
interruptedprovider unavailabletool failed
WorkspaceRuntime statusStop
Route labels describe the next reachable state. They are not navigation labels unless the current product uses the same wording.
Connected wireflow

The supervision loop keeps execution, correction, recovery, and shipping connected.

reconstructed

The main path follows the observed work pattern. Interruptions and corrections stay visible instead of sending the operator back to chat for status.

Low-fidelity screens connected from setup and work through approvals, outputs, receipts, and recovery.startreport live stateopen evidencejudge workrevisesteerinterruptedresume or forkaccept for checksverifiedfailed01Task entryShort directive02Active cockpitAgent and terminal running03State stripWork, changes, failures, remaining04Agent workCommands, files, visual result05Operator reviewAccept, steer, or stop06CorrectionPrompt, screenshot, or scoped note07RecoveryResume, fork, retry, or stop08VerificationChecks and independent review09Ship resultCommitted, pushed, verified
01
Task entryShort directive
  • startActive cockpit
02
Active cockpitAgent and terminal running
  • report live stateState strip
  • interruptedRecovery
03
State stripWork, changes, failures, remaining
  • open evidenceAgent work
04
Agent workCommands, files, visual result
  • judge workOperator review
05
Operator reviewAccept, steer, or stop
  • reviseCorrection
  • accept for checksVerification
06
CorrectionPrompt, screenshot, or scoped note
  • steerActive cockpit
07
RecoveryResume, fork, retry, or stop
  • resume or forkActive cockpit
08
VerificationChecks and independent review
  • verifiedShip result
  • failedCorrection
09
Ship resultCommitted, pushed, verified

End state

The desktop canvas keeps every connector attached to its frame. Narrow screens use the same routes as a vertical wireflow so the sequence stays readable without sideways scrolling.
Wireframes

Structure and state before visual finish

8 frames
01

Project launcher

Recent projects, runtime health, and one clear open action.

proposed
Brand, runtime, and settings
Recent projects and sessions
Open repository
02

Cockpit

Navigator, independent panes, live state, and bottom utilities in one native window.

reconstructed
Project tabs and search
Live state: running, changed, failed, remaining
Project and session navigator
Active pane tree
Utilities and runtime health
Primary actionChoose work needing attention
States

idle / running / blocked / ready to ship

03

Agent work

The operator can judge the work without asking for another status summary.

proposed
Agent, task, model, state, stop
Transcript, commands, and tool events
Changed files, checks, and visual output
Context, correction, and next action
Primary actionInspect, steer, approve, or stop
States

ready / streaming / waiting / failed / complete

04

Two-agent split

Each pane has its own identity, model, transcript, status, and writer lease.

reconstructed
Project tabs
Navigator
Agent A
Agent B
Utilities and health
05

Agent and terminal

A scoped agent works beside the persistent process it controls.

proposed
Pane identity and permissions
Agent transcript and tool events
Persistent terminal
06

Build-review workflow

Human gate, builder, deterministic checks, reviewer, and bounded retry.

proposed
Workflow status and stop
Graph nodes and current edge
Completion contract
Observed evidence
Review and retry state
07

Ship review

A single action may commit and push only when scope and evidence are ready.

proposed
Repository, branch, remote, and readiness
Diff, changed files, and commit scope
Tests, review, and blockers
Return to work
Commit, push, and verify
Primary actionShip verified work
States

not ready / ready / shipping / failed / shipped

08

Narrow workspace

One focused pane stays visible while background work continues.

proposed
Project and pane switcher
Focused pane
Background status and utilities
Reconstructed frames document current structure. Proposed frames name an unresolved or future state and should not be read as shipped UI.
System architecture

The native shell composes panes. Core contracts remain independent of the UI.

observed

This comes from the active Rust workspace and PRD. Provider SDKs and GPUI types stay outside the core contracts.

01
Native applicationWindow, lifecycle, workspace, pane tree, focus, and rendering
brutal_appbrutal_uibrutal_terminal
02
Product contractsProvider-neutral behavior and state
brutal_agentbrutal_graphbrutal_statebrutal_editor
03
Execution boundaryPersistent processes, capabilities, and supervised commands
brutal_runtimebrutal_capabilitiesWriter leases
04
AdaptersModels, signed-in runtimes, local endpoints, and platform policy
brutal_providersClaude adapterCodex adapterLocal models
05
Persistence and operating systemVersioned recovery and enforced resources
SQLiteDetached PTYsRepository jailPlatform sandbox
Execution sequence
  1. User opens a project and selects a pane
  2. Pane identity owns transcript, process, draft, and execution state
  3. Agent or workflow requests a scoped capability
  4. Capability broker checks filesystem, process, executable, and network policy
  5. Runtime executes through a detached session
  6. Events and evidence update the pane, graph, and persistent checkpoint
The product correction

Brutal stopped pretending to be an editor.

The transcripts showed that most of the work happened in the shell. I rarely edited by hand. What I needed was a way to watch the work and correct it. Brutal changed from an editor with agents around it to a supervision cockpit with an editor available when I need to inspect a file.

01

Make supervision the product boundary

The observed loop became the brief. Across 13 Claude Code sessions and 44 Codex sessions, the pattern stayed the same: a short instruction, a long run, visual inspection, a status question, and a deliberate ship command. I put that loop ahead of editor chrome. The interface shows the state, the work, the correction path, and the ship step.

2,515 tool calls analyzed in the project record12 status prompts and 14 push prompts recorded
02

Make the pane the unit of session

Parallel views are not parallel agents. Every pane owns its agent, terminal, editor, transcript, draft, process, and execution state. The pane is part of the runtime identity. Two panes on one repository can no longer collapse onto the same terminal or conversation.

Per-pane agents and terminals verified in the packaged appProject switching now switches the complete workspace
03

Separate model completion from verified success

A response ending is a checkpoint, not an outcome. The build-review flow requires a plan, human approval, scoped work, deterministic checks, independent review, and evidence for the completion claim. If the evidence fails, the work returns to a bounded correction loop. It does not get renamed as success.

Build-review exercised end to end with every human-gate outcomeWriter path reached tests passing in packaged runs
04

Keep the mature substrate, replace the product surface

Do not rebuild years of terminal and editor integration. The first Rust and GPUI shell proved the interaction model. It also showed how much mature rendering, terminal, editor, focus, accessibility, and restoration behavior I would have to rebuild. Brutal now owns the product and application contracts while using a pinned editor codebase for those lower-level parts.

Decision history preserves both rejected foundationsStandalone Rust and GPUI shell runs from a pinned substrate
Interactive wireframe

The mapped screens became a testable cockpit.

This prototype connects the sitemap, pane model, recovery routes, and screen inventory. The sample repositories and transcripts are fixtures, not product data. It tests the interaction shape. It does not mean every surface is shipped.

WireframeBrutal clickable wireframe. Tabs, panes, flow map, screen inventory, and handoff notes.
Rejected direction

A dashboard organized information, not concurrent work.

I kept the rejected dashboard because it makes the wrong model obvious. Cards and summaries pushed the active agents away from the work. I replaced it with project tabs, a quiet navigator, peer panes, contextual evidence, and one persistent state boundary.

ArchivedRejected dashboard direction, retained as decision evidence.
Current interaction contract

Chrome is necessary. The supervision loop decides whether it works.

The current contract covers project tabs, session navigation, peer panes, utilities, overlays, responsive focus, and recovery. A later audit showed that visual parity was not enough. Visible state, watchable work, and the ship action are now part of the contract too.

PrototypeInteractive cockpit contract for the native application.
Verification

The launched artifact, not the roadmap, decides what is real.

A parity audit found fixture data presented as real state and five controls that did nothing, even though fifteen roadmap cards had passed. I listed every visible surface, connected displayed values to production state, and removed unverified claims from the shipped column.

Evidence boundary recorded on 27 July 2026
CapabilityEvidence statusBoundary
Independent pane sessionsExecutedAgent and terminal state keyed by pane
Project-scoped workspacesExecutedTabs switch panes, sessions, layout, and drafts
Build-review workflowExecutedHuman gates and terminal outcomes exercised
Visible work stateActiveContract exists; production surface remains in progress
Watchable agent workPartialHarness evidence exists; final surface remains active
One-action shipActiveShell path exists; product control remains in progress
External usability or adoptionNot establishedNo external study or adoption claim
Planning and evidence

The roadmap stays inspectable because green cards were not enough.

The roadmap keeps shipped, active, blocked, and superseded work with its acceptance evidence. It is a trace of the work. It does not replace launching the product and running the operator path.

RoadmapBrutal roadmap. Open a card for scope, evidence, and residual risk.
Limits

What remains unproven.

Brutal has one observed primary user: me. I have no external usability or adoption evidence yet. This case covers self-use, architecture, executed acceptance, and the gaps that remain. Dates matter because the repository moves quickly. Proposed frames stay separate from shipped behavior.

Brutal

Make the work visible before calling it done.

I stopped treating Brutal as another editor. The product is the supervision loop: direct the work, watch it happen, correct it, and ship only after the checks pass.

Active development. One observed primary user. No external adoption claim.