一键导入
tui-workspaces
Implement workspace and space selection screens with async data loading in clickup-tui. Use this when building the first TUI data screens.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Implement workspace and space selection screens with async data loading in clickup-tui. Use this when building the first TUI data screens.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
SPECTRA v4 — vendor-agnostic specification and planning methodology for AI agents.
Implement typed async endpoint methods on ClickUpClient in clickup-api. Use this when creating or modifying files in clickup-api/src/endpoints/.
Create serde model structs for all ClickUp API entities in clickup-api. Use this when creating or modifying files in clickup-api/src/models/.
Build the core HTTP client with rate limiting, retry, and pagination in clickup-api. Use this when creating client.rs, rate_limiter.rs, or pagination.rs.
Implement authentication commands for clickup-cli. Use this when creating auth.rs, output.rs, or client_factory.rs in the CLI crate.
Implement space, list, and task browsing commands with rich output for clickup-cli. Use this when creating data browsing commands in the CLI crate.
| name | tui-workspaces |
| description | Implement workspace and space selection screens with async data loading in clickup-tui. Use this when building the first TUI data screens. |
This skill creates the first real data-driven TUI screens — workspace selection and space listing — along with the async data loading system and keyboard input routing.
clickup-tuitui-scaffold completed — app skeleton, event loop, layout framework existcrates/clickup-tui/src/data.rs — Async loader functions that send DataPayload eventscrates/clickup-tui/src/ui/workspace_select.rs — Selectable workspace listcrates/clickup-tui/src/ui/space_list.rs — Selectable space list with private indicatorscrates/clickup-tui/src/input.rs — Key routing per screenAsync loading pattern — never block the main thread:
pub fn load_workspaces(client: Arc<ClickUpClient>, tx: mpsc::Sender<AppEvent>) {
tokio::spawn(async move {
match client.get_workspaces().await {
Ok(workspaces) => { tx.send(AppEvent::Data(DataPayload::Workspaces(workspaces))).await.ok(); }
Err(e) => { tx.send(AppEvent::Data(DataPayload::Error(e.to_string()))).await.ok(); }
}
});
}
load_workspaces, load_spaces, load_tasks, etc.Arc<ClickUpClient> and mpsc::Sender<AppEvent>DataPayload variants through the event channelDataPayload::Error(String) — displayed in the status barDispatch key events based on current Screen:
pub fn handle_key(app: &mut App, key: KeyEvent, /* ... */) {
match app.screen {
Screen::WorkspaceSelect => handle_workspace_keys(app, key),
Screen::SpaceList => handle_space_keys(app, key),
// ...
}
}
Navigation keys (consistent across all list screens):
j / ↓: select next item (wrap to top)k / ↑: select previous item (wrap to bottom)Enter: drill into selected item (push breadcrumb, change screen, load data)Esc: go back one screen (pop breadcrumb)q / Ctrl+C: quitr: refresh current dataratatui::widgets::List of workspace namesEnter: store selected workspace, push breadcrumb, switch to SpaceList, load spacesratatui::widgets::List of space namesEnter: store selected space, push breadcrumb, switch to ListView, load lists/tasksj/k navigate the workspace list with wrappingEnter on a workspace → spaces load → space list appearsEsc from space list → back to workspace list (no re-fetch)r refreshes current data