From career
Flat/local-mode workspace hygiene. Sort loose files into canonical folders (research/, domain-notes/, inbox/, crm/, resume/, snippets/, branding/, cache/), find near-duplicates by name+hash, flag stale inbox entries (>14d), and re-root mis-placed files. Proposes a plan, applies only on confirm. No-op when CONTEXT_STORE != markdown.
npx claudepluginhub danielrosehill/claude-code-plugins --plugin careerThis skill is limited to using the following tools:
`$ARGUMENTS`:
Guides Next.js Cache Components and Partial Prerendering (PPR): 'use cache' directives, cacheLife(), cacheTag(), revalidateTag() for caching, invalidation, static/dynamic optimization. Auto-activates on cacheComponents: true.
Guides building MCP servers enabling LLMs to interact with external services via tools. Covers best practices, TypeScript/Node (MCP SDK), Python (FastMCP).
Share bugs, ideas, or general feedback.
$ARGUMENTS:
--dry-run (default) — propose only, don't move.--apply — execute the proposed moves/dedupes after user confirms each batch.--stale-days=N — inbox staleness threshold (default 14).${CAREER_DATA_DIR}/config.json → WORKING_FOLDER, CONTEXT_STORE. Bail early if CONTEXT_STORE != markdown with: "vector-mode workspace — run /career:vector-conflict-check instead."
find $WORKING_FOLDER -maxdepth 4 -type f excluding .git/, cache/, node_modules/. For each file capture: relative path, size, sha256 (cap to files <1 MB; larger files use size+name only), mtime.
Walk the inventory once and bucket findings:
WORKING_FOLDER/ that isn't ground-truth.md, CLAUDE.md, README.md, .gitignore. Propose a target folder by content sniff (see table below).domain-notes/). Detect via filename pattern + first 200 chars.inbox/*.md with status: pending-route AND mtime older than --stale-days. Propose archiving to inbox/_stale/.| Signal | Target |
|---|---|
frontmatter classification: or filename YYYY-MM-DD-HHMM.md | inbox/ |
heading # Outreach log or rows like | company | date | | crm/ |
heading # Company Overview / # Glassdoor Signal / # Cultural Fit etc. | research/companies/<slug>/ |
heading # Communities / # Conferences / # Hackathons etc. | domain-notes/<slug>/ |
filename cv*, resume* | resume/ |
filename cold-pitch*, *-followup* | templates/ |
| pdf, png, jpg with no clear mate | branding/ if filename suggests a profile asset, else flag as unrouted |
If no signal matches, mark unrouted and surface for user decision.
Print a per-bucket summary (counts) and a per-file table for moves/dedupes:
LOOSE ROOT (3)
notes-from-call.md → inbox/2026-04-29-notes-from-call.md
acme-research.md → research/companies/acme/company-overview.md
cv-final-final.pdf → resume/cv-final-final.pdf
DUPLICATES (2)
resume/cv.pdf == branding/cv.pdf keep resume/cv.pdf, delete branding copy
STALE INBOX (4 older than 14d)
inbox/2026-03-12-1100.md → inbox/_stale/
UNROUTED (1)
weird-file.txt — needs your call
If --dry-run, stop here.
--apply)Confirm per-bucket (AskUserQuestion: apply moves / apply dedupes / archive stale / each separately). Execute confirmed batches. Always mkdir -p the target. Never overwrite — if target exists, append -1, -2, etc. and surface for review.
After apply: print a one-line audit row to ${WORKING_FOLDER}/cache/organize-log.md.
Re-running on a clean workspace finds nothing and exits with "workspace tidy."
/career:onboard instruction.