From hydra-claude
Onboard a new project by scanning the codebase and seeding initial memory entries. Invoke when the user says 'seed project memory', 'onboard this project', 'set up memory for a new project', or when starting work on a project that has no .claude/memory/plugin/ directory yet.
How this skill is triggered — by the user, by Claude, or both
Slash command
/hydra-claude:seed-memoryThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
> Project-local memory path and output templates are defined in `skills/_shared/workspace-core.md` and `skills/_shared/workspace-templates.md`. Read both files first.
Project-local memory path and output templates are defined in
skills/_shared/workspace-core.mdandskills/_shared/workspace-templates.md. Read both files first.
This skill scans a project's codebase and seeds initial memory at <project-root>/.claude/memory/plugin/ by drafting candidate findings, getting user approval, deduping against any existing memory, and writing approved findings via the learn skill in focused mode.
Project root resolution. Same as the learn skill: if you are inside a linked git worktree (detectable when git rev-parse --git-dir differs from git rev-parse --git-common-dir), the project root is the main worktree — the first entry of git worktree list --porcelain — so memory is written to the main repo rather than the worktree. Otherwise, it is the nearest ancestor of the current working directory containing .git/ (preferred) or .claude/ (fallback); if neither marker is found, use the current working directory. Memory lives at <project-root>/.claude/memory/plugin/.
Read in this priority order, stopping early when a file doesn't exist. Use the Read tool for files, Bash ls -la for directory listings.
package.json, Cargo.toml, pyproject.toml, go.mod, Gemfile, composer.json, mix.exs, etc. Read whichever exists.README.md, README.rst, README.txt. Read if present.ls -la <project-root> plus one level into subdirectories that look like source (src/, lib/, app/, cmd/).tsconfig.json, vite.config.*, webpack.config.*, jest.config.*, vitest.config.*, .eslintrc*, prettier.config.*, tailwind.config.*, next.config.*, pyproject.toml (if not already read as manifest), Dockerfile, docker-compose.yml, .python-version, .nvmrc, Makefile..github/workflows/*.yml, .gitlab-ci.yml, .circleci/config.yml. Read the first 2 workflow files at most.main / module field in package.json, [lib]/[[bin]] in Cargo.toml, etc.). Read just the first 200 lines.tests/, __tests__/, test/, spec/ exists OR any *.test.* / *.spec.* files in src — pick ONE and read its first 200 lines.Bounds:
node_modules, vendor, .venv, target, dist, build, __pycache__.From the scan, draft candidate findings. Each finding is ONE pattern in this form:
PATTERN: <one-line title>
WHY: <one or two sentences explaining why this matters>
Filter for repo-specific patterns only. Same rule as the learn skill: exclude generic best practices. Only save what is specific to THIS repository and would not be obvious from reading any README.
Examples of valid findings:
PATTERN: Tests use vitest with @vitest/coverage-v8 — tech-stack signal.PATTERN: All TypeScript files use ESM imports (type: module in package.json) — convention signal.PATTERN: CI runs npm run lint && npm test on every PR via .github/workflows/ci.yml — workflow signal.PATTERN: Test setup invokes setup_isolated_X for filesystem isolation — testing-pattern signal.Invalid findings (filter these out):
Group findings under a proposed category (a short slug like tech-stack, testing, ci, conventions, or patterns-<domain-slug> following the learn-skill naming convention from workspace-templates.md). Present the list to the user:
Found N candidate memory entries from project scan:
Proposed category: tech-stack
1. <title>
2. <title>
Proposed category: testing
3. <title>
...
Approve all (yes), edit specific entries (e.g., "edit 3"), drop entries (e.g., "drop 5"), or abort (no)?
Iterate until the user responds:
Check whether <project-root>/.claude/memory/plugin/MEMORY.md exists.
If MEMORY.md does NOT exist: First-time init. Skip dedup. All approved candidates go to Phase 4. (You will need to mkdir -p <project-root>/.claude/memory/plugin/ before Phase 4 — but the learn skill in focused mode handles directory creation, so no explicit mkdir is required here.)
If MEMORY.md exists:
## headings. Use semantic judgment (not strict string match) — two phrasings of the same convention count as a duplicate.Filtered: <N_dup> of <N_total> candidates already in memory; writing <N_new>.No new findings — all already captured. Aborting. and exit without writing.For each approved + de-duped finding, invoke the learn skill in focused mode with the PATTERN/WHY block:
/hydra-claude:learn
PATTERN: <one-line title from the candidate>
WHY: <rationale from the candidate>
The learn skill handles category routing (Step 4), new-category creation (Step 5), topic-file writing with dedup (Step 6), and MEMORY.md index updates (Step 7). Do NOT write topic files directly from this skill — always delegate to learn.
Invoke learn ONE finding at a time (one invocation per pattern). Do not batch multiple PATTERN/WHY blocks into a single learn invocation.
After all invocations complete, print a one-line summary:
Wrote <N> entries across <M> categories. See <project-root>/.claude/memory/plugin/MEMORY.md.
npx claudepluginhub son-nguyen-301/hydra-claude --plugin hydra-claudeProvides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
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.