본문으로 건너뛰기
cccskills
무료GitHub에 공개

cmux-custom-sidebar

Build a custom cmux sidebar from a plain-language request, showing live workspaces, tabs, pull requests, or a clock. It creates and validates the sidebar file, enables the beta feature, and supports clickable actions, reordering, and updates on save.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

원문원문 설명 보기

Build a custom cmux sidebar from a plain-language request. Use when the user asks for a custom sidebar, a sidebar that shows their workspaces/tabs/PRs/clock, a vibe-coded sidebar, or anything involving files in ~/.config/cmux/sidebars/. Covers authoring the interpreted SwiftUI-style file, enabling the beta flag, selecting it, and iterating with hot reload.

설치 방법 보기

이럴 때 유용합니다

  • Creating a workspace switcher sidebar
  • Showing tabs and PR status in one sidebar
  • Adding a clock and unread counts
  • Building a workspace list with drag-and-drop reordering

포함된 파일(1)

  • SKILL.md6.2 KB

SKILL.md(원문)

설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.

cmux Custom Sidebar

cmux renders custom sidebars from a small SwiftUI-style file at runtime: no Xcode, no build step, no signing. The file hot-reloads on save, binds to live cmux state (workspaces, tabs, git, PRs, clock), and runs real cmux commands on tap.

The person asking is describing a result ("a sidebar that shows my workspaces and lets me jump between them"), not an implementation. Make the engineering decisions for them; do not ask them about SwiftUI, files, or syntax.

This skill is the workflow summary. Read the complete authoring contract (every supported view, modifier, language feature, and data field) before writing a non-trivial sidebar:

cmux docs sidebars
curl -fsSL https://raw.githubusercontent.com/manaflow-ai/cmux/main/docs/custom-sidebars.md

Workflow

  1. Enable the beta (once): Settings > Beta features > Custom sidebars (customSidebars.beta.enabled). If a written sidebar does not appear in the picker, check this first.
  2. Write a named file at ~/.config/cmux/sidebars/<name>.swift. The name becomes the menu label; use short kebab-case. The file is a single SwiftUI-style view expression (no struct, no var body, no imports). A .json variant exists for static layouts; prefer .swift for anything dynamic.
  3. Validate and select:
    cmux sidebar validate <name>   # parse/interpret check with real data shapes
    cmux sidebar select <name>
    
    The user can also right-click the sidebar toggle button to pick it.
  4. Iterate. Saving hot-reloads in place (cmux sidebar reload forces it). Verify rows show real data and taps do the right thing before declaring it done.

Authoring rules

  • Bind to the workspaces context instead of hard-coding text, so the sidebar stays correct on its own.
  • Rows that represent something openable run the matching cmux(...) action on tap. A list that only displays text is rarely what they wanted.
  • Use Reorderable for workspace-like lists; it gives persisted drag-and-drop reordering for free.
  • Keep it native and uncluttered: a title, a divider, then the content.
  • Cap long lists (.prefix(20), filter/sort before rendering). The sidebar re-evaluates about once a second.
  • Stay inside the supported subset. Unsupported syntax is skipped gracefully rather than crashing, but choose the closest supported approach instead of shipping a half-blank sidebar.

Quick start

cat > ~/.config/cmux/sidebars/mine.swift <<'SWIFT'
VStack(alignment: .leading, spacing: 8) {
    Text("My sidebar").font(.title3).bold()
    Text(clock.time).font(.caption).foregroundColor(.secondary)
    Divider()
    Reorderable(workspaces, move: "workspace.reorder") { w in
        Button(action: { cmux("workspace.select", workspace_id: w.id) }) {
            HStack {
                Text(w.selected ? "●" : "○").foregroundColor(w.selected ? "#FF8800" : .secondary)
                Text(w.title)
                Spacer()
            }.padding(4)
        }
    }
}
SWIFT
cmux sidebar validate mine && cmux sidebar select mine

Live data context (read-only, refreshes ~1s)

  • workspaces: id, title, selected, pinned, index, directory, ports + portCount, unread, status (todo/working/needs-attention/review/done), tabs + tabCount; when present also description, color, branch + dirty, pr / prs ({number, label, url, status, stale, branch}), progress ({value, label}), latestMessage, latestPrompt, latestAt, remote ({target, state, connected}).
  • workspaces[i].tabs: id, title, focused, pinned; plus directory, branch + dirty, ports when available.
  • clock: {time, hour, minute, second, weekday, epoch}.
  • Scalars: workspaceCount, selectedTitle, selectedId, unreadTotal.

Optional fields are omitted when absent; guard with if let b = w.branch { ... } or w.pr != nil ? ... : ....

Actions

A button or .onTapGesture body calls cmux("<method>", param: value), dispatched through the same surface as the CLI. Common methods: workspace.select (workspace_id), surface.focus (surface_id), workspace.reorder (workspace_id + index). openURL("https://...") opens links. Full command surface: cmux docs api.

Supported subset

Containers: stacks (including lazy), Group, List, Section, grids, ViewThatFits, ScrollView, HSplitView (two resizable columns). Content: Text, Label, Image(systemName:), Button (title and label form), Menu, ProgressView, Gauge, Spacer, Divider, shapes, gradients via .background. Modifiers: full typography set, colors as hex strings or tokens, .padding/.frame/layout, .background/.overlay/.mask/.contextMenu with arbitrary nested views, shadows/borders/opacity/effects, .onTapGesture, .help, .disabled. Language: let, user func helpers, for/ForEach, if/else, ternary, string interpolation, arithmetic, array methods (filter/map/sorted/prefix), string and number formatting.

Not yet supported (write the natural Swift anyway; it degrades gracefully): @State and input controls (TextField, Toggle, Slider, Picker), custom struct/View definitions, navigation (sheet/popover), AsyncImage. Two-way editing does not work yet; taps that run cmux(...) do.

Troubleshooting

  • Missing from the right-click picker: the beta flag is off, or the file is not directly under ~/.config/cmux/sidebars/.
  • Blank or partial render: run cmux sidebar validate <name>. Errors show inline in the sidebar with the failing location; a broken save keeps the last working render on screen, so re-save after fixing.
  • Rows not tappable: wrap the row in Button(action: { cmux(...) }) { ... } or add .onTapGesture { cmux(...) }.
  • Reorder not persisting: use Reorderable(data, move: "workspace.reorder"), not List/.onMove/.draggable.

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

cmux

무료

Organize cmux windows, workspaces, and split panes so an agent can target the right terminal reliably. Create terminals with startup commands, move or reorder panels, change focus, and flash a panel to identify it.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Arrange terminals for several tasks
  • Start a development command in a new split
  • Move or reorder panels
manaflow-ai/cmux2.8만2026년 10월 22일 업데이트

Guide substantial Swift changes in cmux with rules for package boundaries, dependency direction, state management, concurrency, and API documentation. Structure code so public package types can be tested without launching the app.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Extracting a large app feature into Swift Packages
  • Reviewing dependencies between UI, domain models, and services
  • Restructuring state management and Swift 6 concurrency
manaflow-ai/cmux2.8만2026년 10월 22일 업데이트

Guide cmux backend changes with consistent rules for Effect, a TypeScript library for structured error handling. Covers Cloud VM state, database migrations, provider integrations, and authentication and payment checks so changes follow the intended architecture.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Implementing API error handling
  • Updating Cloud VM lifecycle logic
  • Preparing database migrations
manaflow-ai/cmux2.8만2026년 10월 22일 업데이트

Maintain cmux billing code with guidance on Stripe checkout, pricing, subscriptions, and access rights. It maps the relevant services and provides workflows for testing purchases, handling payment events, and rolling out billing changes.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Debugging checkout and subscription records
  • Updating prices and plan switching
  • Checking paid access and Cloud VM limits
manaflow-ai/cmux2.8만2026년 10월 22일 업데이트

Automate browsing in cmux panels without taking focus away from current work. Target a specific panel to open pages, fill forms, click controls, wait for page changes, extract content, and inspect download history.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Open and inspect sites without changing focus
  • Fill forms and check the result
  • Extract page text or HTML
manaflow-ai/cmux2.8만2026년 10월 22일 업데이트

Capture cmux windows as screenshots or video clips from the CLI. Create visual evidence for pull requests and bug reports, with region selection and captions to explain drags, animations, or layout changes.

한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.

  • Attaching screenshots of visual changes to a pull request
  • Recording drags and animations for a bug report
  • Capturing a specific window region with explanatory captions
manaflow-ai/cmux2.8만2026년 10월 22일 업데이트

manaflow-ai의 스킬 모두 보기

이 스킬의 문제 신고