nexu-io/code-import
Read an existing repository's structure into the project cwd as a normalised snapshot the agent can analyse without re-walking the tree on every turn.
npx skills add https://github.com/nexu-io/open-design --skill code-import
Spec §10 / §21.3.2: a code-migration / tune-collab run starts from a
real repo (cloned via od project import or a path the user
provided). This atom turns the raw checkout into a normalised
on-disk record that subsequent atoms (design-extract,
rewrite-plan, patch-edit) operate against. The point is to
stop re-walking the tree on every turn — the agent reads
code/index.json once and trusts the snapshot until the next
explicit re-import.
| Source | Required | Notes |
| --- | --- | --- |
| repoPath | yes | Absolute path to the repo's root, supplied via od project import or an upstream od.context.assets[] reference |
| targetStack | yes | { framework, packageManager, styleSystem, componentLibrary } via the matching form GenUI surface |
project-cwd/
└── code/
├── index.json # { files: { path, size, language, imports[] }[], packageJson?, lockfileKind, framework, styleSystem }
├── components.json # detected components with file path + props snapshot
├── routes.json # detected routing model (next/app, react-router, vite-router, …)
└── meta.json # { repoPath, gitSha, walkedAt, atomDigest, walkBudgetMs }
code/index.json is the input every other Phase 7 atom reads. The
walk respects the runner's budgetMs option (default 60s) so
large monorepos don't burn an entire run on import.
The atom completes when code/index.json exists and contains at
least one entry. Empty repos abort with a clear error event so the
user re-imports.
code/index.json.skipped[] with reason).
package.json's declared dep + a build-config presence
(next.config.*, vite.config.*, etc.).
Implemented by the daemon runner in
apps/daemon/src/plugins/atoms/code-import.ts. The walker enforces its
exclusions and time budget, detects framework evidence, and writes
code/index.json.
Take nexu-io/code-import from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.