Help us improve
Share bugs, ideas, or general feedback.
From runesmith-workspace
Process files in _INBOX/ - classify each per lib/folder-conventions.md, propose a destination, route on consent. Use when the user says "process inbox", "check inbox", "sort inbox", "what's in the inbox", "deal with inbox", "route these files", or after dropping new files into _INBOX/.
npx claudepluginhub runemarklabs/runesmith --plugin runesmith-workspaceHow this skill is triggered — by the user, by Claude, or both
Slash command
/runesmith-workspace:inboxThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
`_INBOX/` is the workspace drop zone - a permanent feature of the canonical structure where the user places files for the inbox skill to classify and route. The skill reads each file, identifies its category via filename + content + frontmatter, proposes a target per the destination map in `lib/folder-conventions.md`, and moves on consent.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
Applies a firm's KYC/AML rules grid to parsed onboarding records: assigns risk rating, checks required documents, outputs rule outcomes with citations, and routes for escalation.
Designs test strategies and plans with testing pyramid. Covers APIs, frontend, data pipelines, infrastructure; outputs plans including coverage targets, examples, and gaps.
Share bugs, ideas, or general feedback.
_INBOX/ is the workspace drop zone - a permanent feature of the canonical structure where the user places files for the inbox skill to classify and route. The skill reads each file, identifies its category via filename + content + frontmatter, proposes a target per the destination map in lib/folder-conventions.md, and moves on consent.
After every run, _INBOX/ ends empty except for items the user explicitly opted to leave (unclassifiable + user passes).
lib/folder-conventions.md - single source of truth for the destination map. Inbox is the executor.lib/plan-format.md - for routing plan-bound content into plans/active/<slug>/lib/comms-check.md - runs firstlib/user-prompts.md - structured-input requirement for any user promptlib/consent.md - consent-trigger phrases for sensitive routesEvery user prompt MUST use the host client's structured input UI (single-pick, multi-pick, or text-input form). Never freeform plain-text yes/no questions. The only exception is the consent-trigger gate documented in lib/consent.md, which waits for user-initiated phrases like "make the ticket".
See lib/comms-check.md. Pause for to: user items.
_INBOX/Workspace root must have _INBOX/. If missing, suggest /runesmith-workspace:reallocate.
If empty: report "Inbox empty. Nothing to process." and exit clean.
Use for:
_INBOX/ to be sortedDo not use for:
plans/, drafts/, etc. - those are already routedrunesmith-devtools:tech-debt)Read every file in _INBOX/ (recurse one level for user-created subdirs).
For each file, determine category by filename + content sniff + frontmatter. Order of evaluation:
| Signal | Category |
|---|---|
Filename starts with <YYYY-MM-DD>-handoff- OR content describes a session-bridge state (status / what's done / what's next) | handoff |
Frontmatter has slug: + status: + Problem/Decision sections (matches lib/plan-format.md) | plan-proposal |
Filename matches decisions*.md or content has ## YYYY-MM-DD - decision-log headers | decision-record |
Frontmatter has from: + to: + type: matching comms types | misplaced-comm |
JSON with Jira issue fields (fields.summary, fields.issuetype, etc.) | ticket-draft |
| Markdown matching feature/bug/architecture template structure (Confluence draft) | draft-feature / draft-bug / draft-project-doc |
| Markdown content reads as analysis / comparison / evaluation (no plan frontmatter) | research |
| PDF, DOCX, XLSX, audio, raw transcript, vendor doc - external source | source-doc |
| Image (PNG/JPG/SVG), screenshot | image |
| Plain markdown - no other category fits | note |
| Anything else | unclassifiable |
Per lib/folder-conventions.md destination map:
handoff → notes/<YYYY-MM-DD>-handoff-<slug>.md. Add date prefix if missing; derive slug from filename or content title.plan-proposal → plans/active/<slug>/plan.md (slug from frontmatter). If slug exists, structured prompt: replace / version / rename.decision-record → structured prompt: which active plan? Append to plans/active/<slug>/decisions.md, or fall back to notes/<YYYY-MM-DD>-decisions.md if not plan-bound.misplaced-comm → {PROJECT}.cc/comms/open/<filename>. Warn user: comms shouldn't normally arrive via inbox.ticket-draft → structured prompt: which plan slug does this ticket belong to? Route to plans/active/<slug>/tickets/<KEY>.json. If user can't say, offer archive/superseded/<YYYY-MM>/tickets-orphan/.draft-feature → drafts/features/<slug>/<slug>.md.draft-bug → drafts/bugs/<slug>/<slug>.md.draft-project-doc → drafts/project-docs/<slug>/<slug>.md.research → structured prompt: is this tied to an active plan?
plans/active/<slug>/refs/<filename>research/<topic>/<filename> (prompt for topic)source-doc → structured prompt for topic: source-docs/<topic>/<filename>.image → structured prompt: is this still needed?
drafts/<bucket>/<slug>/assets/<filename> (prompt for bucket+slug)archive/superseded/<YYYY-MM>/images/<filename>source-docs/<topic>/<filename>note → notes/<YYYY-MM-DD>-<slug>.md. Add date prefix if missing.unclassifiable → leave in _INBOX/. Surface to user with file head + filename for manual review.Group up to 10 routes per consent prompt. Show:
{N} files to route:
[handoff] 2026-05-10-handoff-pre-publish.md → notes/2026-05-10-handoff-pre-publish.md
[plan-proposal] plan-acme-portal-rewrite.md → plans/active/acme-portal-rewrite/plan.md
[research] edge-comparison.md → plans/active/acme-portal-rewrite/refs/edge-comparison.md
[source-doc] vendor-api-spec.pdf → source-docs/acme-portal-rewrite/vendor-api-spec.pdf
[draft-feature] billing-integration.md → drafts/features/billing-integration/billing-integration.md
[image] screenshot-2026-04-06.png → archive/superseded/2026-05/images/screenshot-2026-04-06.png
[note] standup-notes.md → notes/2026-05-10-standup-notes.md
[unclassifiable] random-attachment.zip → leave in _INBOX/
Surface a structured single-pick prompt: question "Apply these routes?", options "Apply all" / "Edit per-file" / "Cancel".
"Edit per-file" lets the user override individual targets before applying via per-row structured prompts.
Per row:
Append to notes/<YYYY-MM-DD>-inbox.md (one log file per day, append across runs):
## <ISO timestamp> - inbox run
- moved {N} files
- left {M} unclassifiable
| source | target | category |
| --- | --- | --- |
| _INBOX/plan-acme-portal-rewrite.md | plans/active/acme-portal-rewrite/plan.md | plan-proposal |
| _INBOX/edge-comparison.md | plans/active/acme-portal-rewrite/refs/edge-comparison.md | research |
| _INBOX/screenshot-2026-04-06.png | archive/superseded/2026-05/images/screenshot-2026-04-06.png | image |
| _INBOX/random-attachment.zip | (left in inbox) | unclassifiable |
✓ Inbox processed
Routed: {N} files
Left in inbox: {M} unclassifiable
Audit log: notes/<YYYY-MM-DD>-inbox.md
Next: /runesmith-core:plan, /runesmith-workspace:reallocate, or run inbox again to handle remainder.
lib/folder-conventions.md destination mapplans/active/<slug>/tickets/), never to a root tickets/Inbox empty: "Nothing to process." Exit clean.
Plan slug doesn't exist for a routing target: Structured prompt - pick existing plan / create new plan via /runesmith-core:plan / route to research/<topic>/ if research / route to archive/superseded/<YYYY-MM>/ if stale.
Filename collision at destination: Show diff if both are text; structured prompt: keep existing / replace / rename.
File appears to be a comm: "This file looks like a comms message. It belongs in {PROJECT}.cc/comms/open/. Move there or treat as note?" Structured single-pick.
Permission error on move: Skip that file, log, continue with the rest, report skipped at end.
User wants to defer all routing: Structured "Cancel" option exits without moves. Items remain in _INBOX/ for next run.