本文へ移動
cccskills
無料GitHub で公開

gpui-rust-console

Build and extend pd-console — Port Daddy's GPU-native macOS operator console (GPUI 0.2.x, Zed's Rust UI). Covers the render-agnostic Block/Pane(Surface) contract, the two-thread reqwest↔smol refresh pipeline, Taffy flexbox layout, uniform_list virtual scroll, focus + keyboard nav, the OKLCH theme and ICS maritime flag badges, GPUI's missing text-input, and the real feature-gated cargo/CI gate. Use when adding panes, visual polish, or debugging GPUI rendering/layout/focus in core/pd-console. NOT for the TypeScript daemon, generic Rust toolchain/borrow-checker help (use rust-with-claude-code), or non-pd GPUI apps with a different theme/architecture.

インストール方法を見る

含まれるファイル(17)

  • SKILL.md12.1 KB
  • .gitignore19 B
  • examples/add-a-pane.md2.8 KB
  • examples/preview-theme.md2.2 KB
  • references/build-and-ci.md4.1 KB
  • references/console-architecture.md6.5 KB
  • references/maritime-flags.md4.5 KB
  • references/render-and-layout.md6.8 KB
  • references/text-input.md4.1 KB
  • schemas/script-io.schema.json1.8 KB
  • scripts/_envelope.py2.9 KB
  • scripts/flag_resolve.py6.5 KB
  • scripts/oklch_to_srgb.py3.2 KB
  • scripts/validate_skill.py4.3 KB
  • scripts/verify_console.py3.4 KB
  • templates/new_pane.rs.tmpl2.5 KB
  • templates/pane_tests.rs.tmpl1.5 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

gpui-rust-console

Authoritative skill for core/pd-console (crate pd-console v0.2.0, ADR-0046): a GPU-native standalone macOS operator console built on GPUI 0.2.2, plus a headless ratatui REPL that renders the same panes. The defining idea: a pane emits render-agnostic Blocks; two renderers paint them. One pane, two faces — which is why every pane is unit-tested on cheap Linux runners while the Metal window builds only on macOS.

When to Use

✅ Use for:

  • Adding or extending a pane/surface in core/pd-console/
  • GPUI layout (Taffy flexbox), scroll (uniform_list/list), focus, keyboard nav
  • The OKLCH theme (theme.rs) and ICS maritime flag badges (maritime.rs)
  • Debugging the reqwest↔smol two-thread refresh pipeline or cx.notify() storms
  • Designing text input where GPUI ships no widget (the pd tube cockpit)
  • Getting the feature-gated cargo/CI gate right

❌ NOT for:

  • The TypeScript daemon, routes, or agent.rs HTTP wiring beyond consuming it
  • Generic Rust (borrow checker, async, FFI, testing idioms) → rust-with-claude-code
  • A non-pd GPUI app — the theme, the 17-pane model, and the daemon contract are specific
  • Generic macOS app packaging / notarization → rust-app-distribution

The Model in One Diagram

flowchart TD
  D["DaemonClient (reqwest)"] -->|"GET /route per pane"| PR
  subgraph PR["Producer: std::thread + current-thread tokio (2s loop)"]
    R["pane.refresh(&client).await"] --> V["pane.view() → Vec<Block>"]
  end
  PR -->|"std::sync::mpsc: Vec<(nav_idx, Vec<Block>)>"| CO
  subgraph CO["Consumer: GPUI foreground (smol, main thread, 500ms)"]
    U["window.update → view.update_panes"] --> N["cx.notify()"]
  end
  N --> PAINT["ConsoleView::render: Block → GPUI element (Tone resolved to OKLCH)"]
  CO -.->|"control_tx: ControlMsg::InterruptLane"| PR

reqwest needs tokio; GPUI runs smol; they cannot share an executor. The producer owns the daemon + all 17 panes and mpscs Blocks to the consumer; control flows back on a second channel. Use channels, never Arc<Mutex<State>> (it blocks the renderer — the #1 GPUI perf bug). Full detail: references/console-architecture.md.

Task Branches

BranchDoLoad
add-paneNew surface end to endexamples/add-a-pane.md, templates/new_pane.rs.tmpl, templates/pane_tests.rs.tmpl
layoutTaffy flexbox, three-panel skeletonreferences/render-and-layout.md
scrolluniform_list vs list, bounded parentsreferences/render-and-layout.md
themeAdd/preview an OKLCH tonereferences/maritime-flags.md, examples/preview-theme.md, scripts/oklch_to_srgb.py
maritimeICS flag mapping / badgereferences/maritime-flags.md, scripts/flag_resolve.py
text-inputCockpit chat / command entryreferences/text-input.md
verifyRun the real CI gate locallyreferences/build-and-ci.md, scripts/verify_console.py

The Contracts You Must Not Break

  • Panes are render-agnostic. Emit Blocks with a Tone (meaning), never a color. The renderer resolves Tone → theme OKLCH → rgb(u32) in one place (pane.rs::Tone::color).
  • trait Pane is object-safe (Box<dyn Pane> registry). refresh is a hand-rolled boxed future (no #[async_trait]); mutate/subscription/on_stream have defaults so read-only panes need zero changes. SurfaceAction is an enum, never a generic.
  • view() is sync and IO-free. All fetching is in refresh() on the producer thread. A failed fetch is recorded in last_error and rendered as an error state — never propagated (one bad route must not blank the console).
  • cx.notify() only on real state change. Never mutate self inside render.

Anti-Patterns

Sharing state with Arc<Mutex<T>> across the two threads

Novice: "Wrap the pane state in Arc<Mutex> so both threads can touch it." Expert: The producer owns the panes; it mpscs Vec<Block> snapshots to the consumer. A mutex under refresh contention stalls the GPUI render loop — visible jank. Detection: any Mutex / RwLock reachable from a pane; reqwest called off the producer thread.

Hardcoding a hex in a pane

Novice: div().bg(rgb(0xe3b56d)) inside a pane's view. Expert: Emit Block::Chip { tone: Tone::Accent }. The amber lives once in theme.rs (DARK.accent, which oklch_to_srgb.py confirms is e3b56d). Color resolves at paint time so retheme/light-mode is free; an inline hex also trips the brand-color guard. Detection: rgb(0x…) literals in *_pane.rs.

RUST_MIN_STACK for the "gpui stack overflow"

Novice: "GPUI macros overflow the stack — set RUST_MIN_STACK=16777216." Expert: The error is a compile-time recursion limit, fixed by #![recursion_limit = "512"] at the top of main.rs. RUST_MIN_STACK resizes a runtime thread stack and does nothing for a compile error. CI sets neither — it runs plain cargo check + cargo test with gpui feature-gated off on Linux. Timeline: this corrected an earlier draft of this very skill; see references/build-and-ci.md.

Expecting a built-in text input

Novice: "Use GPUI's text field for the cockpit." Expert: GPUI 0.2.x ships no text-input widget. Use the full-screen entry overlay pattern (state on the view, not the busy stream pane) or build an Element (~300 LOC). Detection: searching the API for text_input(); cursor state bolted onto the Lane pane.

Quality Gates

□ Pane emits Block+Tone only — zero rgb(0x…) in the pane
□ view() is sync and IO-free; refresh() records errors, never propagates
□ trait stays object-safe (boxed future; enum actions; no generics on dyn methods)
□ New pane proves 3 states (empty/error/populated) — templates/pane_tests.rs.tmpl
□ NAV index (app.rs) == producer slot index (main.rs)
□ Theme change is OKLCH in theme.rs, never inline hex; previewed via oklch_to_srgb.py
□ Maritime change keeps flag_resolve.py --selftest green (HITL→Foxtrot, mayday→Juliett)
□ python3 scripts/verify_console.py run --crate core/pd-console  → cargo check + test ok
□ python3 scripts/validate_skill.py  → 0 errors
□ No retired cinnabar hex / no daemon-URL literal outside agent.rs

Reference Files

FileConsult When
references/console-architecture.mdTwo-thread pipeline, Block/Pane(Surface) contract, registry, FsAssets, window bootstrap
references/render-and-layout.mdRender vs RenderOnce, Taffy flexbox, uniform_list/list, focus, keyboard, notify discipline, perf anti-patterns
references/maritime-flags.mdICS flag mapping + badge colors, the OKLCH theme and to_srgb8(), Tone→color resolution
references/build-and-ci.mdThe feature-gate, the real cargo/CI jobs, recursion_limit vs RUST_MIN_STACK, brand/URL guards
references/text-input.mdGPUI has no input widget — defer / overlay / build-an-Element decision tree

Scripts

ScriptPurpose
scripts/_envelope.pyShared stdin/stdout script-io envelope (imported by the others)
scripts/oklch_to_srgb.pyFaithful port of theme.rs::to_srgb8; preview an OKLCH token's hex (oklch.to_srgb)
scripts/flag_resolve.pyFaithful port of maritime.rs; resolve agent-state → ICS flag + meanings (flag.resolve)
scripts/verify_console.pyRun the real CI gate locally: cargo check+test (+--features gpui on macOS)
scripts/validate_skill.pySkill self-check: frontmatter, refs, schema, no phantom citations, script selftests

Schemas

FileUsed By
schemas/script-io.schema.jsonThe Request/Response envelope every script wraps stdin/stdout against

Templates

TemplateOutput
templates/new_pane.rs.tmplA read-only Pane skeleton (error/empty/populated states, boxed-future refresh)
templates/pane_tests.rs.tmplThe three-state pane test suite (sync, no tokio, Linux-CI-safe)

Examples

ExampleWalks Through
examples/add-a-pane.mdAdding a "Voyages" pane end to end with real main.rs/app.rs cites
examples/preview-theme.mdDesigning a new OKLCH status tone and seeing its hex before touching Rust
<!-- BEGIN BUNDLE INDEX (auto: index_references.py) -->

Skill Bundle Index

Every file in this skill, and when to open it. Auto-generated; run scripts/index_references.py --fix.

root

examples/

  • examples/add-a-pane.md — Example: Add a new pane to pd-console end to end — Goal: add a "Voyages" pane that lists active voyages from GET /voyages, slotted after Lane, fully unit-tested, no gpui needed for the test
  • examples/preview-theme.md — Example: Preview a new OKLCH status tone without compiling Rust — Goal: you want to add a Stalled status tone (a desaturated amber, distinct from the warning amber) and see its hex before wiring it into `

references/

  • references/build-and-ci.md — Building pd-console & the Real CI Gate — > Source of truth: core/pd-console/Cargo.toml and the rust-console / > rust-console-gpui jobs in .github/workflows/ci.yml.
  • references/console-architecture.md — pd-console Architecture — The Unified Model — > Source of truth: core/pd-console/src/ (crate pd-console v0.2.0, ADR-0046).
  • references/maritime-flags.md — ICS Maritime Flags & the OKLCH Theme — > Source: core/pd-console/src/maritime.rs and core/pd-console/src/theme.rs.
  • references/render-and-layout.md — GPUI 0.2.x Rendering & Layout — the idioms that compile — > GPUI 0.2.2 (Cargo.toml: gpui = { version = "0.2.2", optional = true }).
  • references/text-input.md — Text Input in GPUI 0.2.x — There Is No Widget — > The single most surprising gap for anyone coming from web/Qt/SwiftUI: GPUI 0.2.x ships > no text-input widget. Zed builds its own.

schemas/

scripts/

templates/

<!-- END BUNDLE INDEX -->

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Expert in 2000s-era music visualization (Milkdrop, AVS, Geiss) and modern WebGL implementations. Specializes in Butterchurn integration, Web Audio API AnalyserNode FFT data, GLSL shaders for audio-reactive visuals, and psychedelic generative art. Activate on "Milkdrop", "music visualization", "WebGL visualizer", "Butterchurn", "audio reactive", "FFT visualization", "spectrum analyzer". NOT for simple bar charts/waveforms (use basic canvas), video editing, or non-audio visuals.

日本語の概要は準備中です。原文の説明を表示しています。

curiositech/windags-skills132026年10月1日 更新

Expert legal research agent for finding and scraping expungement data state by state. Knows authoritative sources, URL patterns, Firecrawl configuration, and 2026 legal landscape.

日本語の概要は準備中です。原文の説明を表示しています。

curiositech/windags-skills132026年10月1日 更新

Expert in 3D computer vision labeling tools, workflows, and AI-assisted annotation for LiDAR, point clouds, and sensor fusion. Covers SAM4D/Point-SAM, human-in-the-loop architectures, and vertical-specific training strategies. Activate on '3D labeling', 'point cloud annotation', 'LiDAR labeling', 'SAM 3D', 'SAM4D', 'sensor fusion annotation', '3D bounding box', 'semantic segmentation point cloud'. NOT for 2D image labeling (use clip-aware-embeddings), general ML training (use ml-engineer), video annotation without 3D (use computer-vision-pipeline), or VLM prompt engineering (use prompt-engineer).

日本語の概要は準備中です。原文の説明を表示しています。

curiositech/windags-skills132026年10月1日 更新

Apply crisis decision-making research to agent routing, uncertainty triage, and coordination failure analysis in time-pressured systems. Use when diagnosing handoff failures, analytical paralysis, or expert judgment under incomplete information. NOT for routine coding, simple CRUD design, or static single-agent tasks with complete information.

日本語の概要は準備中です。原文の説明を表示しています。

curiositech/windags-skills132026年10月1日 更新

Use for insight, reframing, contradiction, impasse, and anomaly-driven problem solving when execution effort no longer helps. NOT for routine optimization, error correction, or well-specified tasks with known solution paths.

日本語の概要は準備中です。原文の説明を表示しています。

curiositech/windags-skills132026年10月1日 更新

Apply normative BDI reasoning to agents that must detect norms, choose which commitments to internalize, and resolve conflicts by comparing consequences. Use when obligations, prohibitions, or policies collide in autonomous systems. NOT for simple fixed-priority rules, pure constraint satisfaction, or domains where no real normative conflict exists.

日本語の概要は準備中です。原文の説明を表示しています。

curiositech/windags-skills132026年10月1日 更新

curiositech のスキルをすべて見る

このスキルの問題を報告する