ソース情報
- リポジトリ
- jwalin-shah/inbox
- ソースの最終更新活動
- 2026年4月10日 17:34
- 検出された SKILL.md の言語
- 英語
- スター
- 0
- フォーク
- 0
インストール方法
デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。
ソースファイルを確認
インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。
メニュー
デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。
インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
直接コマンドでは確認用 Prompt が省略されます。実行前にソースを確認してください。
npx skills add https://github.com/jwalin-shah/inbox --skill fullstack-workerコマンドは1行のまま表示されます。コピー前に横へスクロールして全体を確認してください。
ローカルで確認しますか?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"