cmux-sidebar-builder
Skill35 starsChanged 5 months agoMITView on GitHub
Build, inspect, or revise cmux custom sidebar views using the runtime SwiftUI-style interpreter. Use for sidebar vibe coding, custom sidebars in Bonsplit panes, left sidebar picker previews, interpreted Swift sidebars, ~/.config/cmux/sidebars/*.swift, cmux docs sidebars, or Aziz's Swift interpreter work.
We split this skill into the rules it gives an agent
14 rules. About 0 are common, 10 are distinctive, and 4 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈10
Distinctive · estimate
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 15
Start from the cmux app checkout docs: repo/docs/custom-sidebars.md.
- Distinctive: line 27
Follow-up implementation branches to inspect when needed:
- Distinctive: line 40
Create or edit the sidebar file in the user's config directory:
- Very specific: line 48
Use the provided data context instead of shelling out.
- Distinctive: line 50
If you change app/runtime code, follow the cmux repo workflow: create a worktree, read repo-local instructions, localize user-facing …
- Very specific: line 54
Do not use cmux right-sidebar set <name> or right-sidebar configuration for custom sidebars.
- Distinctive: line 56
Do not use ExtensionKit unless the user explicitly asks for that surface.
- Distinctive: line 57
Keep custom sidebar files small and inspectable.
- Distinctive: line 59
Prefer real workspace, surface, notification, port, git, and progress fields from the cmux context.
- Very specific: line 60
When a rendering failure happens, reduce to the smallest sidebar file that reproduces it, then compare against CmuxSwiftRender tests and …
- Distinctive: line 72
Do not change the user's selected/default sidebar as part of normal authoring.
- Distinctive: line 74
After opening, verify the custom sidebar is a pane surface, not the right sidebar:
- Distinctive: line 84
If the running cmux build supports it, reload valid custom sidebars without selecting one:
- Distinctive: line 92
Only when the user explicitly asks to activate the custom sidebar, validate and select it:
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
cmux sidebar builder
Use this skill when the task is to create or modify a cmux custom sidebar view. These are user/agent-authored .swift files in ~/.config/cmux/sidebars/ rendered by cmux's runtime SwiftUI-style interpreter, not compiled app code. The primary dogfood surface is a normal Bonsplit pane tab opened with cmux sidebar open <name>; the left sidebar picker remains useful for previews.
Orientation
- The original work is PR
https://github.com/manaflow-ai/cmux/pull/5254by Aziz Albahar. - The feature is opt-in behind the UserDefaults-backed key
customSidebars.beta.enabled. - Custom sidebars live under
~/.config/cmux/sidebars/. They can be opened as normal Bonsplit pane tabs withcmux sidebar open <name>and appear in the left sidebar picker when the beta is enabled. - Start from the cmux app checkout docs:
repo/docs/custom-sidebars.md.
Important cmux source entrypoints:
repo/Packages/CmuxSwiftRender/Sources/CmuxSwiftRender/SwiftViewInterpreter.swiftrepo/Packages/CmuxSwiftRender/Sources/CmuxSwiftRender/ExpressionEvaluator.swiftrepo/Packages/CmuxSwiftRender/Sources/CmuxSwiftRender/RenderNode.swiftrepo/Packages/CmuxSwiftRenderUI/Sources/CmuxSwiftRenderUI/Sidebar/CustomSidebarView.swiftrepo/Sources/ContentView.swift, aroundcustomSidebarsDirectory,customSidebarDataContext, andCustomSidebarView(...).repo/Sources/Panels/CustomSidebarPanel.swiftfor the Bonsplit pane host.repo/Sources/Workspace+CustomSidebarPane.swiftandrepo/Sources/TerminalController+CustomSidebarCommands.swiftfor thecmux sidebar open <name>path.
Follow-up implementation branches to inspect when needed:
origin/feat-interpreter-primitivesfor the broader supported SwiftUI-ish primitive surface.origin/feat-sidebar-interpreter-isolationfor the out-of-process crash-isolated interpreter worker.
Workflow
- Inspect the current app docs and interpreter surface before authoring:
sed -n '1,220p' repo/docs/custom-sidebars.md rg -n "struct SwiftViewInterpreter|func evaluate|func parse|enum RenderNode|customSidebarDataContext|customSidebarsDirectory" repo/Packages/CmuxSwiftRender repo/Packages/CmuxSwiftRenderUI repo/Sources/ContentView.swift - Create or edit the sidebar file in the user's config directory:
mkdir -p ~/.config/cmux/sidebars $EDITOR ~/.config/cmux/sidebars/<name>.swift - Stay inside the interpreted subset. Prefer simple SwiftUI-style expressions:
VStack,HStack,Text,Image,Button,ForEach, conditionals, supported modifiers, and data from the provided context. Do not assume arbitrary Swift, imports, async work, filesystem access, networking, custom types, or compiled dependencies are available. - Use the provided data context instead of shelling out. If the sidebar needs data that is not exposed, identify the missing field in
customSidebarDataContextand treat adding it as an app code change in a cmux worktree. - If you change app/runtime code, follow the cmux repo workflow: create a worktree, read repo-local instructions, localize user-facing strings, test appropriately, and reload with a tag before dogfood handoff. Config-only sidebar
.swiftedits do not require an app rebuild.
Authoring rules
- Do not use
cmux right-sidebar set <name>or right-sidebar configuration for custom sidebars. Custom sidebars should render in a Bonsplit pane viacmux sidebar open <name>when the user wants to see the sidebar next to their work. - The left sidebar picker is a preview/selection surface. Do not treat the right sidebar as a custom-sidebar host.
- Do not use ExtensionKit unless the user explicitly asks for that surface.
- Keep custom sidebar files small and inspectable. If a design gets complicated, split behavior into simple helper functions only if the interpreter supports them.
- Make every visible action explicit through supported
Buttonaction payloads. Do not invent action ids without checkingrepo/Packages/CmuxSwiftRender/Sources/CmuxSwiftRender/ActionCommand.swiftand app dispatch wiring. - Prefer real workspace, surface, notification, port, git, and progress fields from the cmux context. Avoid placeholder dashboards unless the task is only a mockup.
- When a rendering failure happens, reduce to the smallest sidebar file that reproduces it, then compare against
CmuxSwiftRendertests and corpus examples.
Verification
For config-only sidebars:
ls ~/.config/cmux/sidebars
cmux sidebar validate <name>
cmux sidebar open <name>Do not change the user's selected/default sidebar as part of normal authoring. The original workspaces sidebar should remain the default unless the user explicitly asks to activate the custom sidebar.
After opening, verify the custom sidebar is a pane surface, not the right sidebar:
cmux identify --json --id-format both
cmux tree --workspace <workspace-ref> --json --id-format both
cmux right-sidebar set <name> # should fail on current builds; do not use this for setupFor tagged dogfood, use the tag-bound dev CLI and socket, for example ~/.local/bin/cmux-dev --socket /tmp/cmux-debug-<tag>.sock sidebar open <name> --json, then verify the focused surface reports surface_type: customSidebar.
If the running cmux build supports it, reload valid custom sidebars without selecting one:
cmux sidebar reload --allEditing a sidebar file alone should not be treated as a reload signal. Use the CLI reload command after writes are complete so half-written files do not replace a mounted sidebar.
Only when the user explicitly asks to activate the custom sidebar, validate and select it:
cmux sidebar select <name>For older cmux builds without cmux sidebar, ask the user to pick the named sidebar from the left sidebar picker. Avoid defaults write for sidebar selection unless the user explicitly requests temporary local dogfood setup, and state that it is not a product default.
For interpreter or app changes, prefer focused package tests for CmuxSwiftRender plus the smallest real dogfood reload. Do not run local cmux xcodebuild ... test; use the project's remote or CI test guidance.
In this repository10 other files it gives its agents.
- skills/cmux-artifact/AGENTS.mdAGENTS.md
- skills/cmux-cli/AGENTS.mdAGENTS.md
- cmux-artifactSkill
- cmux-browserSkill
- cmux-cliSkill
- cmux-cloudSkill
- cmux-configSkill
- cmux-freestyleSkill
- cmux-refSkill
- cmux-workspaceSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

