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/.
How 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.
_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.
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.
Generates daily or weekly digests of activity from connected sources (chat, email, docs, tasks, CRM), highlighting action items, decisions, mentions, and project updates.
npx claudepluginhub runemarklabs/runesmith --plugin runesmith-workspace