anolilab/lunora/lunora-create-package
Claude Code and agent skill by anolilab/lunora
- community
Checking that the SKILL.md file is still in the repository.
Builds a reusable Lunora capability, either as a registry item that
Install
npx vskill@latest install anolilab/lunora/lunora-create-packageSKILL.md
Lunora Create Package
Pick the shape by whether the code is copied into the user's lunora/ or imported as a dependency:
| Shape | Distribution | Use for | |
|---|---|---|---|
| Registry item | lunora registry add <name> | App-owned code (schema/functions) the user edits | |
| Workspace pkg | import … from "@lunora/<name>" | Library code consumed as a versioned dependency |
Many capabilities use both: a @lunora/<name> package holds the runtime and a registry item scaffolds the glue (files under lunora/<name>/, bindings, env vars). auth, mail, ratelimit and storage follow this pattern.
Skip this skill for a one-off feature in a single app (write it in lunora/), or when the capability already exists (lunora registry list).
Path A: registry item
An item is a directory registry/<name>/ holding registry.json, the source files it copies, and a README.md. Validate against registry/schema/registry-item.schema.json.
files[].merge:create-or-skipwrites whole files and never clobbers a file
the user edited; schema-extension AST-merges into lunora/schema.ts.
envVarsland in.dev.vars. Non-secret vars get theirvalue; secrets get
an empty placeholder plus a wrangler secret put <NAME> reminder.
entrypointReexports([{ "module": "_generated/workflows" }]) injects
export * from './lunora/<module>' into the worker entry of framework (class B/C) projects, for items whose generated classes the worker must export. No shipped item uses it yet.
- Function files import builders from
#lunora/_generated/server.js, the
module codegen emits in a consumer project. registry/tsconfig.json stubs that module so the item typechecks here.
depsranges are copied verbatim into the user'spackage.json. Use
workspace:* for @lunora/* (resolved at publish); any other range must admit the version the workspace resolves, or pnpm install fails (scripts/check-registry-catalog-ranges.js).
Verify:
registry/index.json is generated; do not hand-edit it.
Path B: workspace package (Lunora monorepo)
Pass every option as --name=value; vis reads --name search as --name=true plus a stray positional.
This writes packages/search/ with package.json (ESM-only, "sideEffects": false, catalog versions), src/index.ts, tsconfig.json, vitest.config.ts, packem.config.ts, eslint.config.js, prettier.config.js, project.json (tags type:package + category:<category>) and README.md. It does not create __tests__/ or LICENSE.md, and no release config — vis release releases every non-private package from the root vis.config.ts. Then:
cp packages/config/LICENSE.md packages/search/LICENSE.md(packem and
files expect it).
- Add a row to
.agents/docs/packages.md, and list the directory in one tier
of scripts/api-snapshot.js and the matching tier in ROADMAP.md. The pnpm install postinstall checks (check-agents-md-packages, check-roadmap-tiers) fail until both are done.
pnpm install, then add tests under__tests__/.
Repo conventions: relative imports without .js, named exports only (a default only as a file's sole export), dependency versions via catalog:* from pnpm-workspace.yaml.
Verify:
Wiring a ctx.* capability into codegen
Codegen decides which ctx.* fields exist by detecting usage, so a new binding-backed helper is a literal row in CAPABILITY_ROWS (packages/codegen/src/capabilities.ts; CAPABILITIES is a read-only view of it): its package, ctx property, tier ("every" or "action"-only), ctx type fragment, ShardDO binding, and defineApp method. Rate the feature for every target in the PlatformCapabilities matrices in @lunora/platform (packages/platform/src/capabilities/) as native, emulated or unsupported in the same change. A feature a target leaves unrated is dropped from that target's generated surface with a diagnostic. Declaration-gated surfaces (flags, notify, containers, workflows, queues, agents) also have their own emitters; some of them (flags, notify, containers, workflows) keep a row too, for usage probing, so a row and a dedicated emitter can coexist.
Document in the README any lunora/*.ts declaration the user must add for codegen to emit the typed surface.
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingpackages/cli/skills/lunora-create-package/SKILL.md
Popularity
- 7-day trend score
- 5
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/anolilab/lunora/lunora-create-package)