본문으로 건너뛰기
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 -->

리뷰

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

댓글

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

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

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

0 / 1,000자

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

같은 저장소의 스킬

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-skills162026년 10월 14일 업데이트

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-skills162026년 10월 14일 업데이트

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-skills162026년 10월 14일 업데이트

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-skills162026년 10월 14일 업데이트

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-skills162026년 10월 14일 업데이트

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-skills162026년 10월 14일 업데이트

curiositech의 스킬 모두 보기

이 스킬의 문제 신고