用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/jwalin-shah/inbox --skill fullstack-worker命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | fullstack-worker |
| description | Fullstack worker for features touching both server API and TUI |
NOTE: Startup and cleanup are handled by worker-base. This skill defines the WORK PROCEDURE.
Use for features that modify BOTH backend (services/server/client) AND the TUI (inbox.py). This includes:
None — but workers should use tuistory skill if available for visual verification of TUI changes.
Read the feature description carefully. Understand the full scope: which server endpoints are needed, which TUI widgets/views change, what the user flow looks like.
Investigate the current code:
inbox.py to understand the TUI structure (widgets, tabs, CSS, bindings)inbox_server.py and services.py for the backendinbox_client.py for client methods you'll need to add/modify.factory/library/architecture.md, .factory/services.yamlPlan the implementation — identify ALL files that need changes:
services.py — new data access functionsinbox_server.py — new endpointsinbox_client.py — new client methodsinbox.py — new widgets, tabs, bindings, CSStests/ — new test files or additions to existing onesBackend first — write failing tests, then implement:
services.py (with tests)inbox_server.py (with TestClient tests)inbox_client.py (with mocked tests)uv run pytest -x -q — verify tests passTUI implementation:
ConversationItem, EventItem, NoteItem)compose() method if adding new tabs/viewsCSS class attributeBINDINGS list@work(thread=True) for any blocking I/Ocall_from_thread to update UI from worker threadsreactive for data that triggers re-rendersWrite TUI tests using Textual Pilot:
async def test_reminders_tab(self):
async with InboxApp().run_test() as pilot:
await pilot.press("ctrl+6")
# Assert tab switched, widgets rendered
Mock the InboxClient to avoid needing a real server.
Run full validation:
uv run pytest -x -q — all tests passuv run pyright — 0 errorsuv run ruff check . — 0 errorsManual verification:
uv run python inbox_server.py & then test API with curllsof -ti :9849 | xargs killVerify ALL items in the feature's expectedBehavior and verificationSteps.
Commit your changes.
class ReminderItem(ListItem):
def __init__(self, data: dict) -> None:
super().__init__()
self.data = data
def compose(self) -> ComposeResult:
d = self.data
t = Text()
t.append("icon ", style="dim")
t.append(d.get("title", ""), style="bold white")
# ... format additional fields
yield Static(t)
# In Tabs widget:
Tab("Reminders", id="tab-rem"),
# In BINDINGS:
Binding("ctrl+6", "filter_rem", "Reminders"),
# In tab_map:
"tab-rem": "reminders",
# In _render_sidebar:
if self._active_filter == "reminders":
for r in self.reminders_data:
lv.append(ReminderItem(r))
if self._active_filter == "reminders":
compose_input.placeholder = "New reminder title (Enter to create)"
{
"salientSummary": "Added Reminders tab to TUI with full CRUD: list display (title, due date, list name), create from compose input, complete via 'c' key, filter by list. Added 3 new server endpoints (PUT /reminders/{id}, DELETE /reminders/{id}, GET /reminders/search). 8 backend tests + 4 TUI pilot tests, all passing.",
"whatWasImplemented": "New ReminderItem widget in inbox.py with title/due_date/list_name display. Reminders tab accessible via Ctrl+6. Compose input creates reminders when on Reminders tab. 'c' key completes selected reminder, 'd' key deletes. Filter by list via input. Empty state shows 'No reminders'. Backend: PUT /reminders/{id} for edit, DELETE /reminders/{id} for delete, search endpoint. Client methods: edit_reminder(), delete_reminder().",
"whatWasLeftUndone": "",
"verification": {
"commandsRun": [
{"command": "uv run pytest -x -q", "exitCode": 0, "observation": "205 passed in 4.1s"},
{"command": "uv run pyright", "exitCode": 0, "observation": "0 errors"