{"_id":"@diegogbrisa/craft","_rev":"4-a3171a581135e141436379665866d085","name":"@diegogbrisa/craft","dist-tags":{"latest":"0.4.0"},"versions":{"0.1.0":{"name":"@diegogbrisa/craft","version":"0.1.0","keywords":["agent","agents","cli","codex","craft","skills"],"license":"MIT","_id":"@diegogbrisa/craft@0.1.0","maintainers":[{"name":"diegogbrisa","email":"d.garciabrisa@gmail.com"}],"homepage":"https://github.com/DiegoGBrisa/craft#readme","bugs":{"url":"https://github.com/DiegoGBrisa/craft/issues"},"bin":{"craft":"dist/cli.js"},"dist":{"shasum":"09a0c8728fcb51fd9883e5976f0f3f59f2f81cc6","tarball":"https://registry.npmjs.org/@diegogbrisa/craft/-/craft-0.1.0.tgz","fileCount":4,"integrity":"sha512-XO0yl/FYZQ4kxG0KUF7P77iiHMySDoGNc4cueSvKcMK6DFP6t9KdVerhgqWZPqM/Wk6MVBaPZ4jzjdWqjthb1g==","signatures":[{"sig":"MEQCH1NcUbKsu0BmItCUeYuUWdMy64sHinjo2GQAQ6EAQbECIQC/dOg9Nfn0x2Cv/WPvIUiWZLYRPjgOoKW5bOVXumBdHQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11692},"type":"module","_from":"file:diegogbrisa-craft-0.1.0.tgz","engines":{"node":">=20"},"scripts":{"test":"pnpm typecheck && pnpm build && vitest run","build":"pnpm clean && tsc -p tsconfig.json","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","typecheck":"tsc -p tsconfig.test.json","pack:check":"node -e \"const fs = require('node:fs'); fs.rmSync('.pack', { recursive: true, force: true }); fs.mkdirSync('.pack', { recursive: true })\" && pnpm pack --pack-destination .pack"},"_npmUser":{"name":"diegogbrisa","email":"d.garciabrisa@gmail.com"},"_resolved":"/private/var/folders/cz/130v_6117sb8tlnmlyf___n80000gn/T/57a0ec56708e994038406abe0d29cbda/diegogbrisa-craft-0.1.0.tgz","_integrity":"sha512-XO0yl/FYZQ4kxG0KUF7P77iiHMySDoGNc4cueSvKcMK6DFP6t9KdVerhgqWZPqM/Wk6MVBaPZ4jzjdWqjthb1g==","repository":{"url":"git+https://github.com/DiegoGBrisa/craft.git","type":"git"},"_npmVersion":"11.9.0","description":"Install version-matched agent skills from packages into repositories.","directories":{},"_nodeVersion":"24.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.8","typescript":"^5.9.3","@types/node":"^20.19.42"},"_npmOperationalInternal":{"tmp":"tmp/craft_0.1.0_1780904072630_0.27328854763221955","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@diegogbrisa/craft","version":"0.3.0","keywords":["agent","agents","cli","codex","craft","skills"],"license":"MIT","_id":"@diegogbrisa/craft@0.3.0","maintainers":[{"name":"diegogbrisa","email":"d.garciabrisa@gmail.com"}],"homepage":"https://github.com/DiegoGBrisa/craft#readme","bugs":{"url":"https://github.com/DiegoGBrisa/craft/issues"},"bin":{"craft":"dist/cli.js"},"dist":{"shasum":"6a72ff9df1e58fd60f372141e66c6172bfb28498","tarball":"https://registry.npmjs.org/@diegogbrisa/craft/-/craft-0.3.0.tgz","fileCount":5,"integrity":"sha512-BMPXeiLl+TawquS+PSeIVAIFeGy/CHmHiMSUj0keX6m0UYA1mUQ0Oj4mN7rRF390MN28qZkKGgSoE007uZDSmA==","signatures":[{"sig":"MEUCIQDrXPiXjGKXgH7gHphZ+4KqYAyM1h2UhCf7BOxTV98clwIgSSDa/BFlKh2aP4p6hoYcXosxHFurqPmSZGo6RgHV1F0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@diegogbrisa%2fcraft@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":20598},"type":"module","_from":"file:.pack/diegogbrisa-craft-0.3.0.tgz","engines":{"node":">=20"},"scripts":{"test":"pnpm typecheck && pnpm build && vitest run","build":"pnpm clean && tsc -p tsconfig.json","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","typecheck":"tsc -p tsconfig.test.json","pack:check":"node -e \"const fs = require('node:fs'); fs.rmSync('.pack', { recursive: true, force: true }); fs.mkdirSync('.pack', { recursive: true })\" && pnpm pack --pack-destination .pack","release:preflight":"pnpm test && pnpm pack:check && pnpm audit --prod","release:verify-tag":"tsx scripts/verify-release-tag.ts","release:verify-unpublished":"tsx scripts/verify-npm-version-unpublished.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7130e67a-1153-4d9e-a910-680b3dc28693"}},"_resolved":"/home/runner/work/craft/craft/.pack/diegogbrisa-craft-0.3.0.tgz","_integrity":"sha512-BMPXeiLl+TawquS+PSeIVAIFeGy/CHmHiMSUj0keX6m0UYA1mUQ0Oj4mN7rRF390MN28qZkKGgSoE007uZDSmA==","repository":{"url":"git+https://github.com/DiegoGBrisa/craft.git","type":"git"},"_npmVersion":"11.13.0","description":"Install version-matched agent skills from packages into repositories.","directories":{},"_nodeVersion":"24.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","vitest":"^4.1.8","typescript":"^5.9.3","@types/node":"^20.19.42"},"_npmOperationalInternal":{"tmp":"tmp/craft_0.3.0_1780908225567_0.6006472792345676","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@diegogbrisa/craft","version":"0.4.0","keywords":["agent","agents","cli","codex","craft","skills"],"license":"MIT","_id":"@diegogbrisa/craft@0.4.0","maintainers":[{"name":"diegogbrisa","email":"d.garciabrisa@gmail.com"}],"homepage":"https://github.com/DiegoGBrisa/craft#readme","bugs":{"url":"https://github.com/DiegoGBrisa/craft/issues"},"bin":{"craft":"dist/cli.js"},"dist":{"shasum":"378d4b61c022692d0541c840c5839589d7de9187","tarball":"https://registry.npmjs.org/@diegogbrisa/craft/-/craft-0.4.0.tgz","fileCount":5,"integrity":"sha512-furW1C80HriCwLOF80uTTXEKVzn3cDc6fizeMIgUBZi4jWxVQXTGoRyiNU3UXu3/dQ0yM8q2yIpb39Rdvgh/RA==","signatures":[{"sig":"MEUCIGxbq0ZkIK3S+XZjjzlVMZx+eYwPtIykSrw+F0911hKYAiEA//T8zetQfZRI+oJN5zeraiMzbUzriTwBjDccvN/g6GI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@diegogbrisa%2fcraft@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":23627},"type":"module","_from":"file:.pack/diegogbrisa-craft-0.4.0.tgz","engines":{"node":">=20"},"scripts":{"test":"pnpm typecheck && pnpm build && vitest run","build":"pnpm clean && tsc -p tsconfig.json","clean":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"","typecheck":"tsc -p tsconfig.test.json","pack:check":"node -e \"const fs = require('node:fs'); fs.rmSync('.pack', { recursive: true, force: true }); fs.mkdirSync('.pack', { recursive: true })\" && pnpm pack --pack-destination .pack","release:preflight":"pnpm test && pnpm pack:check && pnpm audit --prod","release:verify-tag":"tsx scripts/verify-release-tag.ts","release:verify-unpublished":"tsx scripts/verify-npm-version-unpublished.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:7130e67a-1153-4d9e-a910-680b3dc28693"}},"_resolved":"/home/runner/work/craft/craft/.pack/diegogbrisa-craft-0.4.0.tgz","_integrity":"sha512-furW1C80HriCwLOF80uTTXEKVzn3cDc6fizeMIgUBZi4jWxVQXTGoRyiNU3UXu3/dQ0yM8q2yIpb39Rdvgh/RA==","repository":{"url":"git+https://github.com/DiegoGBrisa/craft.git","type":"git"},"_npmVersion":"11.13.0","description":"Install version-matched agent skills from packages into repositories.","directories":{},"_nodeVersion":"24.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.22.4","vitest":"^4.1.8","typescript":"^5.9.3","@types/node":"^20.19.42"},"_npmOperationalInternal":{"tmp":"tmp/craft_0.4.0_1780909577019_0.18156928622791657","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-06-08T07:34:32.511Z","modified":"2026-06-20T12:07:36.202Z","0.1.0":"2026-06-08T07:34:32.780Z","0.3.0":"2026-06-08T08:43:45.695Z","0.4.0":"2026-06-08T09:06:17.177Z"},"bugs":{"url":"https://github.com/DiegoGBrisa/craft/issues"},"license":"MIT","homepage":"https://github.com/DiegoGBrisa/craft#readme","keywords":["agent","agents","cli","codex","craft","skills"],"repository":{"url":"git+https://github.com/DiegoGBrisa/craft.git","type":"git"},"description":"Install version-matched agent skills from packages into repositories.","maintainers":[{"email":"d.garciabrisa@gmail.com","name":"diegog_08"}],"readme":"# craft\n\nCraft installs version-matched agent skills from npm packages into repositories.\n\nIt was created because some libraries need more than API docs for coding agents\nto use them well. A package can ship a `SKILL.md` that teaches an agent the\nlibrary's public API, naming conventions, examples, and sharp edges. Craft copies\nthat skill into the current repository so local coding agents can use it as part\nof their normal project context.\n\nFor now, Craft supports the `ts-match` skill and writes to `.agents/skills`.\nThe goal is to keep the mechanism small and package-oriented:\n\n- the installed library version decides which skill is installed;\n- the skill comes from the package already installed in the repository;\n- local edits are protected unless `--force` is passed;\n- the installed skill records metadata for future updates.\n\nCraft is not a general skill registry. It is a small bridge between a package\ninstalled in a repository and the agent skill that belongs to that package.\n\n## Install\n\nCraft is published-ready as `@diegogbrisa/craft` while the unscoped `craft` npm\nname is unavailable. The installed binary is still `craft`.\n\nRun it without installing globally:\n\n```sh\npnpm dlx @diegogbrisa/craft help\n```\n\nInstall it globally:\n\n```sh\npnpm add -g @diegogbrisa/craft\n```\n\nWith npm:\n\n```sh\nnpm install -g @diegogbrisa/craft\n```\n\nCheck the installed version:\n\n```sh\ncraft --version\ncraft -v\n```\n\n## Usage\n\nInstall the `ts-match` skill into the current repository:\n\n```sh\ncraft ts-match skill install\n```\n\nUpdate the installed `ts-match` skill after updating `@diegogbrisa/ts-match`:\n\n```sh\ncraft ts-match skill update\n```\n\nCheck what is installed:\n\n```sh\ncraft ts-match skill status\n```\n\nOverwrite a locally edited skill when you intentionally want to replace it:\n\n```sh\ncraft ts-match skill install --force\ncraft ts-match skill update --force\n```\n\n## What Gets Written\n\nCraft reads the installed `@diegogbrisa/ts-match` package in the current\nrepository and copies its bundled `SKILL.md` into:\n\n```txt\n.agents/skills/ts-match/SKILL.md\n.agents/skills/ts-match/metadata.json\n```\n\nThe metadata file records the package name, package version, source, install\ntime, and skill hash. Craft uses that hash to avoid overwriting local edits by\naccident.\n\n## Version Matching\n\nCraft does not fetch an arbitrary latest skill. It uses the package version\nalready installed in the repository.\n\nIf the repository has:\n\n```txt\n@diegogbrisa/ts-match@1.4.0\n```\n\nthen Craft installs the `SKILL.md` bundled with `@diegogbrisa/ts-match@1.4.0`.\nWhen the package is updated, run:\n\n```sh\ncraft ts-match skill update\n```\n\nto sync the local skill to the new installed package version.\n\nIf `@diegogbrisa/ts-match` is not installed, Craft exits with a clear error\ninstead of guessing a version.\n\n## Upgrade Craft\n\nIf Craft is installed globally, update it with:\n\n```sh\ncraft upgrade\n```\n\nPreview the command without running it:\n\n```sh\ncraft upgrade --dry-run\n```\n\nForce a package manager when needed:\n\n```sh\ncraft upgrade --pnpm\ncraft upgrade --npm\n```\n\n`craft upgrade` detects the package manager when it can. Otherwise it prefers\n`pnpm` if available and falls back to `npm`.\n\nDuring a real upgrade, Craft checks the latest published version first. If the\ninstalled version is already current, it prints that no upgrade was performed.\nIf an upgrade is available, it prints the previous version and the version it is\nupgrading to.\n\n## Development\n\n```sh\npnpm install\npnpm test\npnpm pack:check\n```\n\nThe CLI is written in TypeScript under `src/` and compiled to `dist/`. Tests are\nwritten with Vitest and run against the compiled `dist/cli.js` so the published\nbinary path is covered.\n\n`pnpm pack:check` builds the package and verifies that the publish tarball only\ncontains the intended runtime files:\n\n```txt\ndist/cli.js\nCHANGELOG.md\nLICENSE\npackage.json\nREADME.md\n```\n\n## Version Bumps and Releases\n\nCraft uses the same release model as `ts-match`: release-please owns package\nversion bumps and changelog updates.\n\nDo not edit `package.json` versions by hand for normal releases. Use\nconventional commits on `main` instead:\n\n- `feat: ...` creates a minor release.\n- `fix: ...` creates a patch release.\n- breaking changes create a major release.\n- `docs:`, `test:`, `chore:`, and similar commits do not create a release\n  unless they include a breaking change.\n\nOn pushes to `main`, release-please opens or updates a release PR. That PR owns:\n\n```txt\npackage.json\npnpm-lock.yaml\nCHANGELOG.md\n.release-please-manifest.json\n```\n\nMerging the release PR creates the matching GitHub release tag, such as\n`v0.2.0`, and the same workflow validates and publishes that tag to npm.\n\nFor local release validation after release-please has bumped to a new version,\nrun:\n\n```sh\npnpm release:preflight\npnpm release:verify-tag -- v0.2.0\npnpm release:verify-unpublished\n```\n\n## Publishing\n\nPublishing is handled by `.github/workflows/release-please.yml`. Configure npm\ntrusted publishing for:\n\n```txt\nPackage: @diegogbrisa/craft\nRepository: DiegoGBrisa/craft\nWorkflow filename: release-please.yml\nEnvironment: npm\nAllowed action: npm publish\n```\n\nThe publish workflow uses npm's GitHub Actions OIDC trusted publishing path, so\nit does not require an `NPM_TOKEN` secret.\n\nThe GitHub release tag must match the package version:\n\n```txt\npackage.json version 0.2.0 -> release tag v0.2.0\n```\n\nYou can configure trusted publishing from npm's website. If using the npm CLI,\nuse npm `11.10.0` or newer and configure the GitHub workflow:\n\n```sh\nnpx npm@^11.10.0 trust github @diegogbrisa/craft --repo DiegoGBrisa/craft --file release-please.yml --environment npm --allow-publish\n```\n\nThe npm CLI requires the package to already exist on the registry before\ncreating the trusted publishing relationship.\n","readmeFilename":"README.md"}