Skip to content

Document cmux agent skills - #4203

Merged
lawrencecchen merged 3 commits into
mainfrom
task-document-cmux-skills
May 15, 2026
Merged

lawrencecchen merged 3 commits into
mainfrom
task-document-cmux-skills

Conversation

@lawrencecchen

@lawrencecchen lawrencecchen commented May 15, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • Add cmux-settings and cmux-workspace as installable cmux repo skills.
  • Expand the Skills docs page with included skill coverage and end-user future skill ideas.
  • Update the docs sitemap timestamp for /docs/skills.

Testing

  • ./skills.sh --list
  • skills/cmux-settings/scripts/cmux-settings list-supported
  • copied cmux-settings to a temp directory and ran list-supported to verify installed-skill fallback
  • skills/cmux-settings/scripts/cmux-settings --file /tmp/cmux-settings-skill-test.json set app.appearance dark && skills/cmux-settings/scripts/cmux-settings --file /tmp/cmux-settings-skill-test.json validate
  • SKIP_ENV_VALIDATION=1 bun run build (from web/)
  • bun test tests/docs-search-utils.test.ts (from web/)

Note

Medium Risk
Adds a new Python helper that can modify ~/.config/cmux/cmux.json and validate keys; while scoped to the skills tooling, mistakes could impact user configuration. The rest is documentation/i18n updates with low runtime risk.

Overview
Adds two new installable skills: cmux-settings (with a bundled cmux-settings Python helper to read/write JSONC settings, list supported schema paths, validate unknown keys, and open the config) and cmux-workspace (guidance + command reference for scoping automation to the caller workspace/surface and avoiding focus-disrupting commands).

Updates the existing cmux skill to cross-link these new skills, expands /docs/skills to list them and adds new coverage and suggested future skills sections, updates EN/JA translations accordingly, and bumps the sitemap lastModified for /docs/skills.

Reviewed by Cursor Bugbot for commit 0774b13. Bugbot is set up for automated code reviews on this repo. Configure here.


Summary by cubic

Adds two installable repo skills, cmux-settings and cmux-workspace, and expands the skills docs with coverage and suggestions. Documents current‑workspace automation and ships a safe helper to edit and validate ~/.config/cmux/cmux.json.

  • New Features

    • cmux-settings
      • SKILL docs and generated references for settings keys and shortcut action IDs.
      • Bundled helper skills/cmux-settings/scripts/cmux-settings (JSONC‑aware; subcommands: path, dump [--no-comments], get, set, unset, list-supported, validate, open; supports --file).
      • Agent metadata: skills/cmux-settings/agents/openai.yaml.
    • cmux-workspace
      • SKILL docs for caller‑workspace scoping, additive layouts, and right‑side helper‑pane policy.
      • Command reference: skills/cmux-workspace/references/commands.md.
      • Agent metadata: skills/cmux-workspace/agents/openai.yaml.
    • Docs
      • /docs/skills lists the new skills, adds a coverage table and a “suggested future skills” section.
      • i18n updated in web/messages/{en.json,ja.json}; sitemap lastModified bumped; cross‑links added in skills/cmux/SKILL.md.
  • Bug Fixes

    • cmux-settings helper robustness
      • JSONC parsing handles trailing commas; avoids no‑op writes; unset prunes empty parents.
      • Validation ignores non‑settings sections and improves supported‑path discovery (source or generated refs).
      • Editor handling tightened: uses $EDITOR/$VISUAL with safe parsing; pre‑creates the file with schema header if missing; fallbacks to code --wait, cursor --wait, open -e, xdg-open; clearer errors and exit codes.

Written for commit 0774b13. Summary will update on new commits.

Summary by CodeRabbit

  • New Features

    • Added "cmux Settings" skill with a bundled CLI helper to safely inspect, edit, validate, and reload cmux.json.
    • Added "cmux Workspace" skill to scope automation safely to the caller's current workspace.
  • Documentation

    • Added detailed references for all config keys and shortcut actions.
    • Added workspace command reference and skill docs entries.
    • Expanded Skills docs, translations, and sitemap metadata.

Review Change Stack

@vercel

vercel Bot commented May 15, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
cmux Ready Ready Preview, Comment May 15, 2026 1:52pm
cmux-staging Building Building Preview, Comment May 15, 2026 1:52pm

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@coderabbitai

coderabbitai Bot commented May 15, 2026 •

Copy link
Copy Markdown
📝 Walkthrough

Walkthrough

Adds two new cmux skills: cmux-settings (Python CLI for safely viewing/editing ~/.config/cmux/cmux.json with JSONC support, dotted-path operations, and validation) and cmux-workspace (workspace-scoped automation rules and command reference). Integrates both into the web docs and updated English/Japanese translations.

Changes

cmux-settings and cmux-workspace skills

Layer / File(s) Summary
cmux-settings Python CLI implementation
skills/cmux-settings/scripts/cmux-settings
Core tool provides JSONC normalization (comment/trailing-comma stripping), atomic file writes, dotted-path get/set/unset with auto-creation/pruning, JSON-first value parsing, supported-path discovery (Swift source or reference fallback), validation, and subcommands (path/dump/get/set/unset/list-supported/validate/open) with editor/open integration.
cmux-settings documentation and skill registration
skills/cmux-settings/SKILL.md, skills/cmux-settings/agents/openai.yaml, skills/cmux-settings/references/all-keys.md, skills/cmux-settings/references/shortcut-actions.md
Skill page, OpenAI agent interface with default prompt, full configuration key reference with types/defaults, and enumerated keyboard shortcut actions with allowed binding formats.
cmux-workspace documentation and automation rules
skills/cmux-workspace/SKILL.md, skills/cmux-workspace/agents/openai.yaml, skills/cmux-workspace/references/commands.md
Workspace scope model with env-var anchors (CMUX_WORKSPACE_ID/CMUX_SURFACE_ID/CMUX_SOCKET_PATH), non-disruptive automation rules (avoid speculative focus changes, prefer additive layout), helper-pane reuse policy, caller-targeting rules, safe surface movement guidance, sidebar/reload/socket guidance, agent interface, and concrete command examples.
Web UI and internationalization
web/app/[locale]/docs/skills/page.tsx, web/messages/en.json, web/messages/ja.json, web/app/sitemap.ts, skills/cmux/SKILL.md
Skills page extended with new skill entries and translation keys, adds coverage and suggestions tables rendered from new constants, expands English and Japanese messages with coverage/suggestions content, links to new skill references, and updates sitemap lastModified.

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant CLI as cmux-settings CLI
  participant JSONC as JSONC Parser
  participant Settings as cmux.json
  participant Editor
  User->>CLI: subcommand (get/set/validate/open)
  CLI->>Settings: load file
  Settings-->>JSONC: raw JSONC content
  JSONC->>JSONC: strip comments, trailing commas
  JSONC-->>CLI: parsed JSON dict
  alt get/set/unset
    CLI->>CLI: navigate dotted path
    CLI->>CLI: return value or update dict
  else validate
    CLI->>CLI: compare keys vs schema sources
    CLI-->>User: validation result
  else open
    CLI->>Editor: launch $EDITOR/$VISUAL
    Editor->>Settings: user edits
  end
  CLI->>Settings: atomic write (temp + replace)
  Settings-->>User: success/unchanged feedback
Loading
graph TD
  A["Automation Request"] --> B{Scope specified?}
  B -->|No| C["Use CMUX_WORKSPACE_ID<br/>or cmux identify --json"]
  B -->|Yes| D["Use specified workspace"]
  C --> E["Check Caller Panes"]
  D --> E
  E --> F{Helper pane<br/>exists?}
  F -->|Yes| G["Reuse helper pane<br/>route output there"]
  F -->|No| H["Create right-side<br/>helper pane"]
  G --> I["Execute action"]
  H --> I
  I --> J{Focus change<br/>requested?}
  J -->|No| K["Use --focus false"]
  J -->|Yes| L["Explicit user ask<br/>required"]
  K --> M["Complete without<br/>disruption"]
  L --> M
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • manaflow-ai/cmux#3409: The new cmux-settings skill and CLI tool align with the canonical ~/.config/cmux/cmux.json and schema migration introduced in #3409.

Poem

🐰 I hopped through JSONC, comments swept away,
I pruned empty branches where stray keys used to play,
Workspace rules keep actions gentle and kind,
Two new skills for cmux, tidy by design.
Happy hops and safe edits — settings aligned!


Caution

Pre-merge checks failed

Please resolve all errors before merging. Addressing warnings is optional.

  • Ignore

❌ Failed checks (1 error, 1 warning)

Check name Status Explanation Resolution
Cmux Swift Blocking Runtime ❌ Error Diff introduces DispatchSemaphore.wait() in CLI/CMUXCLI+Process.swift and NSLock in multiple CLI files for thread-blocking synchronization, violating swift-blocking-runtime.md rule. Replace semaphores/locks with async patterns: structured concurrency for processes, async delegates for sockets, completion handlers instead of blocking waits.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (14 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Cmux Swift Actor Isolation ✅ Passed No Swift files modified in PR. Check for Swift 6 actor isolation is not applicable; all changes are documentation, YAML config, Python, TypeScript, and JSON.
Cmux No Hacky Sleeps ✅ Passed No sleep(), setTimeout, setInterval, polling loops, or timing patterns found in production code. Python script uses legitimate subprocess calls; no hacky synchronization workarounds detected.
Cmux Swift Concurrency ✅ Passed PR contains no Swift code changes—only documentation, configuration, localization, Python scripts, and TypeScript. Custom check not applicable.
Cmux Swift @Concurrent ✅ Passed No Swift files are modified in this PR. The @concurrent annotation rule applies only to Swift code changes. This PR is docs and config only.
Cmux Swift File And Package Boundaries ✅ Passed No Swift code changes in this PR. The custom check applies only to Swift files, which are not present in these changes (documentation, config, Python, TypeScript only).
Cmux Swift Logging ✅ Passed No Swift files are modified in this PR. Changes include documentation, Python CLI script, TypeScript/JavaScript web code, and JSON i18n strings. The Swift logging rule does not apply.
Cmux User-Facing Error Privacy ✅ Passed User-facing messages comply with privacy rules. Editor tools mentioned as user configuration options only. No secrets, vendor errors, or internal details exposed.
Cmux Swiftui State Layout ✅ Passed PR contains no SwiftUI code changes. All changes are documentation, configuration, Python scripting, and React/TypeScript web code. Custom check is not applicable.
Cmux Architecture Rethink ✅ Passed PR contains no Swift code modifications. Changes are documentation, Python helper script, TypeScript/React web components, and JSON localization. Swift architecture rethink check is not applicable.
Cmux Swift Auxiliary Window Close Shortcuts ✅ Passed No Swift files are modified in this PR. The check applies only to Swift changes affecting standalone windows, which are not present here.
Title check ✅ Passed The title directly describes the main change: adding and documenting two new cmux agent skills (cmux-settings and cmux-workspace), which is the primary focus of the changeset.
Description check ✅ Passed The pull request provides a comprehensive description covering changes, testing approach, and a detailed summary via automated tools. All required sections are present and substantially filled.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch task-document-cmux-skills

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Comment thread skills/cmux-settings/scripts/cmux-settings Outdated
@greptile-apps

greptile-apps Bot commented May 15, 2026 •

Copy link
Copy Markdown
Contributor

Greptile Summary

Adds two installable repo skills — cmux-workspace (scoping automation to the caller's workspace without disrupting focus or layout) and cmux-settings (safe cmux.json editing via a bundled Python CLI) — and expands the /docs/skills page with a coverage table and suggested future skills.

  • cmux-settings Python CLI (skills/cmux-settings/scripts/cmux-settings): JSONC-aware get/set/unset/validate with atomic writes, supported-path discovery from either the Swift source or the bundled references/all-keys.md, and editor-open fallback chain; previous review rounds addressed false-positive path detection, silent scalar-to-dict clobbering, and implementation-path leakage in error messages — all three fixes are present in this revision.
  • cmux-workspace SKILL.md: Documents the caller-workspace scoping rule, non-disruptive pane creation, right-side helper pane policy, CMUX_WORKSPACE_ID/CMUX_SURFACE_ID anchoring, and focus-verb restrictions.
  • Docs + i18n: web/app/[locale]/docs/skills/page.tsx adds coverage and suggestions tables; en.json and ja.json supply all new string keys; sitemap.ts bumps lastModified for /docs/skills.

Confidence Score: 5/5

Safe to merge. The new Python CLI writes atomically, validates keys against a known schema, and guards intermediate path rewrites; three issues found in earlier review rounds are all resolved in this revision.

Changes are additive — two new skills, reference docs, web page tables, and i18n strings. The Python helper correctly strips JSONC, uses os.replace for atomic writes, filters source-derived supported paths to known settings sections only, and raises a clean error instead of silently clobbering scalars. No existing behaviour is altered.

No files require special attention.

Important Files Changed

Filename Overview
skills/cmux-settings/scripts/cmux-settings Python CLI for JSONC-aware cmux.json editing; atomic writes, key validation, and JSONC stripping are all correctly implemented. Previous review issues (false-positive supported-path detection, silent scalar clobbering, implementation-path in error messages) have been resolved.
skills/cmux-settings/SKILL.md Agent-facing documentation for cmux-settings skill; subcommand table, workflow, quick reference, and rules are accurate and consistent with the bundled script.
skills/cmux-workspace/SKILL.md Workspace-scoping rules for agents, covering caller-context anchoring, non-disruptive pane creation, right-side helper pane policy, focus-verb restrictions, and socket selection. Well-structured and self-consistent.
web/app/[locale]/docs/skills/page.tsx Adds two new skills to the install table plus new coverage and suggestions tables. Uses established component patterns; all new i18n keys are backed by en.json and ja.json entries.
web/messages/en.json Adds workspace, settings, coverage, and suggestions string keys. All keys referenced from page.tsx are present; Japanese counterparts are consistent.
skills/cmux-settings/references/all-keys.md Generated settings key reference used by the bundled script's supported-path fallback. Covers all nine settings sections; row format matches the regex in supported_paths_from_reference.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A([cmux-settings subcommand]) --> B{subcommand}
    B --> P[path: print config path]
    B --> D[dump: print raw or parsed JSON]
    B --> G[get key: read value at dotted path]
    B --> S[set key value: write value]
    B --> U[unset key: remove key, prune empty parents]
    B --> L[list-supported: print all recognized paths]
    B --> V[validate: check all set keys are known]
    B --> O[open: open in $EDITOR or fallback chain]
    S --> LS[load_settings: strip_jsonc then json.loads]
    U --> LS
    G --> LS
    LS --> |file missing| NF[return default skeleton]
    LS --> |parse error| ERR[SystemExit: not valid JSONC]
    LS --> DATA[(parsed dict)]
    DATA --> SA[set_at: create intermediates or error if non-dict]
    DATA --> UA[unset_at: delete key, prune empty ancestors]
    SA --> |changed| AW[atomic_write: json.dumps to tempfile then os.replace]
    UA --> |changed| AW
    SA --> |no-op| NOOP[print unchanged]
    UA --> |not present| NOOP
    V --> SP[supported_paths: try Swift source, fallback to all-keys.md]
    SP --> |found| VALIDATE[flatten set keys, check supported set plus prefix]
    SP --> |not found| WARN[warn: schema unavailable]
    O --> ED{$EDITOR set?}
    ED --> |yes| RUN[subprocess.call editor]
    ED --> |no| FB[try code then cursor then open -e then xdg-open]
Loading

Reviews (3): Last reviewed commit: "Tighten cmux settings editor handling" | Re-trigger Greptile


def supported_paths_from_source(source: Path) -> list[str]:
text = source.read_text()
return sorted(set(re.findall(r'"([a-zA-Z]+\.[a-zA-Z0-9_.]+)"', text)))

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 The regex scans for any double-quoted dotted string in the Swift source file, so it will match non-settings strings like "com.apple.Foundation", "github.manaflow.cmux", or other literals that happen to contain a dot. False positives end up in supported_paths(), which causes validate to accept those spurious paths as recognized keys and silently swallow validation errors for typos that share the same prefix.

Suggested change
return sorted(set(re.findall(r'"([a-zA-Z]+\.[a-zA-Z0-9_.]+)"', text)))
# Match only strings that start with a known top-level settings section so
# we don't pick up bundle IDs, module names, or other dotted literals.
_KNOWN_SECTIONS = (
"app.", "terminal.", "notifications.", "sidebar.", "sidebarAppearance.",
"workspaceColors.", "automation.", "browser.", "shortcuts.",
)
candidates = re.findall(r'"([a-zA-Z]+\.[a-zA-Z0-9_.]+)"', text)
return sorted({p for p in candidates if any(p.startswith(s) for s in _KNOWN_SECTIONS)})

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed by filtering source-derived supported paths to known cmux settings sections only.

— Claude Code

Comment on lines +123 to +126
for p in parts[:-1]:
if p not in cur or not isinstance(cur[p], dict):
cur[p] = {}
cur = cur[p]

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 When an intermediate path component already exists in the config but is not a dict (e.g. a scalar left by a previous bulk edit), set_at silently replaces it with an empty dict {} without any warning, discarding the previous value. A user running cmux-settings set automation.portBase 9200 on a file where automation somehow held a string would lose that value with no diagnostic.

Suggested change
for p in parts[:-1]:
if p not in cur or not isinstance(cur[p], dict):
cur[p] = {}
cur = cur[p]
for p in parts[:-1]:
if p not in cur:
cur[p] = {}
elif not isinstance(cur[p], dict):
raise SystemExit(
f"error: intermediate key '{p}' is not an object (got {type(cur[p]).__name__}); "
f"cannot set nested path"
)
cur = cur[p]

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed by rejecting nested writes when an intermediate key exists but is not an object, preserving the existing value.

— Claude Code

Comment on lines +269 to +272
print(
"error: could not locate Sources/CmuxSettingsJSONPathSupport.swift or references/all-keys.md",
file=sys.stderr,
)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 The list-supported error message mentions the internal Swift source file path Sources/CmuxSettingsJSONPathSupport.swift in command output read directly by agents. Per the project's error-copy policy, command output should not expose internal implementation paths; a user-oriented message about the missing reference file is sufficient.

Suggested change
print(
"error: could not locate Sources/CmuxSettingsJSONPathSupport.swift or references/all-keys.md",
file=sys.stderr,
)
print(
"error: could not load the supported-paths list; "
"run from a cmux checkout or reinstall the cmux-settings skill",
file=sys.stderr,
)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed by replacing the implementation-path error with a user-facing reinstall-or-run-from-checkout message.

— Claude Code

coderabbitai[bot]
coderabbitai Bot previously requested changes May 15, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@skills/cmux-settings/scripts/cmux-settings`:
- Around line 106-109: The split_path function currently allows empty segments
like "a..b", ".a", and "a."; update split_path to validate the result of
dotted.split(".") and reject any empty segment (e.g., any s == "" in the list)
by raising SystemExit with a clear error message (e.g., "error: empty key path
segment" or similar); keep the initial empty-string check for the whole input
and ensure callers of split_path continue to receive a list[str] only when all
segments are non-empty.
- Around line 121-130: The change detection in set_at is unsafe because it uses
the string sentinel "__cmux_missing__" which can equal a legitimate value;
update set_at (function name set_at) to detect changes without a colliding
sentinel — e.g., compute changed by checking presence or inequality (changed =
(leaf not in cur) or cur[leaf] != value) or use a unique object() sentinel —
then assign cur[leaf] = value and return changed.
- Around line 81-82: The global regex r",(\s*[}\]])" used in the return
statement can remove commas that appear inside string literals; replace that
single re.sub call with a small scanner that walks the joined output string,
tracks whether you're inside a quoted string (respecting backslash escapes) and
only removes a trailing comma when it is encountered outside of a string (i.e.
when not in-string and the next non-space char is ']' or '}'); update the code
that currently contains the return re.sub(...) expression to call this scanner
or inline the logic so only commas outside string literals are stripped.
- Around line 331-335: The fallback that calls subprocess.call(["open",
str(path)]) can raise FileNotFoundError on systems without an "open" binary;
update the logic around the apps loop (the list ["code","cursor","open"], the
shutil.which checks, and the subprocess.call invocation) to first try a
platform-appropriate editor lookup (check shutil.which for "open" before calling
it), then fall back to checking the $EDITOR environment variable, and wrap the
final subprocess call in a try/except that catches FileNotFoundError and returns
or exits with a clean non-zero error message via the same logging/return path
used elsewhere.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: bb94ddeb-09c6-43f9-af8d-cc8d2cc7160d

📥 Commits

Reviewing files that changed from the base of the PR and between 94c0b70 and 586c3c9.

📒 Files selected for processing (13)
  • skills/cmux-settings/SKILL.md
  • skills/cmux-settings/agents/openai.yaml
  • skills/cmux-settings/references/all-keys.md
  • skills/cmux-settings/references/shortcut-actions.md
  • skills/cmux-settings/scripts/cmux-settings
  • skills/cmux-workspace/SKILL.md
  • skills/cmux-workspace/agents/openai.yaml
  • skills/cmux-workspace/references/commands.md
  • skills/cmux/SKILL.md
  • web/app/[locale]/docs/skills/page.tsx
  • web/app/sitemap.ts
  • web/messages/en.json
  • web/messages/ja.json

Comment thread skills/cmux-settings/scripts/cmux-settings Outdated
Comment thread skills/cmux-settings/scripts/cmux-settings Outdated
Comment thread skills/cmux-settings/scripts/cmux-settings
Comment thread skills/cmux-settings/scripts/cmux-settings Outdated

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

4 issues found across 13 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="skills/cmux-settings/scripts/cmux-settings">

<violation number="1" location="skills/cmux-settings/scripts/cmux-settings:128">
P2: `set` can incorrectly report "unchanged" and skip writing when the new value equals the string sentinel `"__cmux_missing__"`. Use a unique object sentinel instead of a user-representable string.</violation>
</file>

<file name="skills/cmux-workspace/references/commands.md">

<violation number="1" location="skills/cmux-workspace/references/commands.md:25">
P2: `new-workspace` example uses unsupported `--cwd`; use `--working-directory` so the command actually runs.</violation>

<violation number="2" location="skills/cmux-workspace/references/commands.md:44">
P2: `new-split` does not accept `--workspace`; this example is invalid and will error at runtime.</violation>

<violation number="3" location="skills/cmux-workspace/references/commands.md:53">
P2: `close-surface` example includes unsupported `--workspace`, so the documented command will not execute.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.

Comment thread skills/cmux-settings/scripts/cmux-settings Outdated

cmux focus-pane --workspace "$CMUX_WORKSPACE_ID" --pane pane:2
cmux focus-panel --workspace "$CMUX_WORKSPACE_ID" --panel surface:3
cmux close-surface --workspace "$CMUX_WORKSPACE_ID" --surface surface:3

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: close-surface example includes unsupported --workspace, so the documented command will not execute.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At skills/cmux-workspace/references/commands.md, line 53:

<comment>`close-surface` example includes unsupported `--workspace`, so the documented command will not execute.</comment>

<file context>
@@ -0,0 +1,110 @@
+
+cmux focus-pane --workspace "$CMUX_WORKSPACE_ID" --pane pane:2
+cmux focus-panel --workspace "$CMUX_WORKSPACE_ID" --panel surface:3
+cmux close-surface --workspace "$CMUX_WORKSPACE_ID" --surface surface:3
+cmux move-surface --surface surface:7 --pane pane:2 --focus true
+cmux reorder-surface --surface surface:7 --before surface:3
</file context>
Suggested change
cmux close-surface --workspace "$CMUX_WORKSPACE_ID" --surface surface:3
cmux close-surface --surface surface:3

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Verified against CLI help and implementation: close-surface accepts --workspace, so this example is valid as written.

— Claude Code

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the feedback! I've saved this as a new learning to improve future reviews.

cmux list-panels --workspace "$CMUX_WORKSPACE_ID"
cmux tree --workspace "$CMUX_WORKSPACE_ID"

cmux new-split right --workspace "$CMUX_WORKSPACE_ID"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: new-split does not accept --workspace; this example is invalid and will error at runtime.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At skills/cmux-workspace/references/commands.md, line 44:

<comment>`new-split` does not accept `--workspace`; this example is invalid and will error at runtime.</comment>

<file context>
@@ -0,0 +1,110 @@
+cmux list-panels --workspace "$CMUX_WORKSPACE_ID"
+cmux tree --workspace "$CMUX_WORKSPACE_ID"
+
+cmux new-split right --workspace "$CMUX_WORKSPACE_ID"
+cmux new-split down --workspace "$CMUX_WORKSPACE_ID" --surface "$CMUX_SURFACE_ID"
+cmux new-pane --workspace "$CMUX_WORKSPACE_ID" --type terminal --direction right
</file context>
Suggested change
cmux new-split right --workspace "$CMUX_WORKSPACE_ID"
cmux new-split right --surface "$CMUX_SURFACE_ID"


cmux list-workspaces
cmux list-workspaces --json
cmux new-workspace --name "task" --cwd "$PWD"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2: new-workspace example uses unsupported --cwd; use --working-directory so the command actually runs.

Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At skills/cmux-workspace/references/commands.md, line 25:

<comment>`new-workspace` example uses unsupported `--cwd`; use `--working-directory` so the command actually runs.</comment>

<file context>
@@ -0,0 +1,110 @@
+
+cmux list-workspaces
+cmux list-workspaces --json
+cmux new-workspace --name "task" --cwd "$PWD"
+cmux new-workspace --command "npm run dev"
+cmux new-workspace --layout '{"root":{"type":"terminal"}}'
</file context>
Suggested change
cmux new-workspace --name "task" --cwd "$PWD"
cmux new-workspace --name "task" --working-directory "$PWD"

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit fe15f6b. Configure here.

Comment thread skills/cmux-settings/scripts/cmux-settings Outdated
coderabbitai[bot]
coderabbitai Bot previously requested changes May 15, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@skills/cmux-settings/scripts/cmux-settings`:
- Around line 385-391: The code uses editor.split() when launching the editor
(the editor variable passed to subprocess.call), which fails for editor paths
containing spaces; replace editor.split() with shlex.split(editor) to parse
quoted/complex EDITOR values robustly and pass the resulting list plus str(path)
to subprocess.call; also update the FileNotFoundError error message (inside the
except block that currently prints "error: editor not found:
{editor.split()[0]}") to extract the executable name from shlex.split(editor)[0]
(or otherwise use the parsed tokens) so the error reports the correct program
name.
- Around line 348-358: The hard-coded structural set named "structural" lists
schema keys that must be kept in sync with schema changes; add a concise
maintenance comment directly above the structural declaration referencing that
this list must be updated whenever the schema evolves (and ideally point
maintainers to the canonical schema source or file and to run any relevant
validation/update steps), so future changes to keys like "$schema",
"schemaVersion", "actions", "ui", "commands", "vault", "newWorkspaceCommand",
"surfaceTabBarButtons", and "rightSidebar" are not missed.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 0e5fe7b4-5532-482c-ac81-b54c09b5c940

📥 Commits

Reviewing files that changed from the base of the PR and between 586c3c9 and fe15f6b.

📒 Files selected for processing (1)
  • skills/cmux-settings/scripts/cmux-settings

Comment thread skills/cmux-settings/scripts/cmux-settings
Comment thread skills/cmux-settings/scripts/cmux-settings

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 issue found across 1 file (changes from recent commits).

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="skills/cmux-settings/scripts/cmux-settings">

<violation number="1" location="skills/cmux-settings/scripts/cmux-settings:388">
P2: Parse `$EDITOR` with shell-style splitting instead of `str.split()`, otherwise quoted editor commands (especially paths with spaces) fail to execute.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.

Comment thread skills/cmux-settings/scripts/cmux-settings Outdated
@lawrencecchen
lawrencecchen dismissed stale reviews from coderabbitai[bot] and coderabbitai[bot] May 15, 2026 13:57

Addressed in follow-up commits; latest CodeRabbit check is passing.

@lawrencecchen
lawrencecchen merged commit fd4899e into main May 15, 2026
24 checks passed
@lawrencecchen
lawrencecchen deleted the task-document-cmux-skills branch May 15, 2026 13:57

This branch was successfully deployed

1 active deployment
Preview – cmux — 0774b13b Deployed May 15, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant