{"_id":"@pen.dev/cli","_rev":"13-42e4dda830e8087d8e0764638f4d46fa","name":"@pen.dev/cli","dist-tags":{"latest":"0.3.9"},"versions":{"0.2.8":{"name":"@pen.dev/cli","version":"0.2.8","keywords":["pen.dev","pencil","design","ai","cli","pen"],"author":{"name":"High Agency, Inc."},"license":"UNLICENSED","_id":"@pen.dev/cli@0.2.8","maintainers":[{"name":"pserb","email":"pavel@pencil.dev"}],"bin":{"pen":"dist/index.mjs","pencil":"dist/index.mjs"},"dist":{"shasum":"86051b926f920561ad12c2fe830337a1e0735171","tarball":"https://registry.npmjs.org/@pen.dev/cli/-/cli-0.2.8.tgz","fileCount":94,"integrity":"sha512-DjUF3xYWMSsI842SNsRDGhjjRzCoAOJTJMIHsYkrYeSnFyy2PTahiJpNNEv+i5QKoiwh3IMQFQjBxkrynD4Uqw==","signatures":[{"sig":"MEUCIFNyBsupSY4UR3pDNGg4OjpmfSbp+aH1evSDRFwIkWMQAiEAg29IIq3vTFChXn3jCRlBgUnyHlOmsUeFiv/rGjimVWA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":61654841},"main":"dist/index.mjs","type":"module","engines":{"node":">=18.0.0"},"gitHead":"df9c83047ed0712797451db8ca12bfb7c43d0144","scripts":{"dev":"npm run build && cross-env NODE_ENV=development npm run start --","lint":"biome check","build":"tsdown && npm run bundle:chmod && npm run bundle:mcp && npm run bundle:wasm && npm run bundle:pen-libs && npm run bundle:skill","start":"node dist/index.mjs","lint:ci":"biome ci","build:prod":"npm run build && node scripts/obfuscate.js","bundle:mcp":"mkdir -p dist/out && cp ../../servers/mcp/mcp-server-* dist/out/ && chmod +x dist/out/mcp-server-*","bundle:wasm":"node scripts/copy-pencil-wasm.mjs","bundle:chmod":"node scripts/chmod-dist-entry.mjs","bundle:skill":"cp ../../SKILL.md ./SKILL.md","test:package":"bash scripts/test-package-docker.sh","bundle:pen-libs":"mkdir -p dist/out/data && cp ../../lib/pencil-editor/data/*.lib.pen dist/out/data/","test:interactive":"bash scripts/test-interactive.sh"},"_npmUser":{"name":"pserb","email":"pavel@pencil.dev"},"_npmVersion":"11.9.0","description":"CLI tool for running the pen.dev AI agent manipulating .pen design files","directories":{},"_nodeVersion":"24.14.0","dependencies":{"svgo":"^4.0.0","sharp":"^0.34.5","semver":"^7.7.4","eventemitter3":"^5.0.1","@inquirer/prompts":"^8.3.0","@openai/codex-sdk":"^0.142.5","@node-ipc/node-ipc":"^11.0.3","@anthropic-ai/claude-agent-sdk":"^0.3.197"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.20.1","@ha/ipc":"file:../../lib/ipc","@ha/mcp":"file:../../lib/mcp","@ha/agent":"file:../../lib/agent","cross-env":"^10.1.0","@ha/schema":"file:../../lib/schema","@ha/shared":"file:../../lib/shared","typescript":"^5.0.0","@types/node":"^20.0.0","@types/semver":"^7.7.1","@biomejs/biome":"^2.4.5","@types/node-ipc":"^9.2.3","@ha/pencil-editor":"file:../../lib/pencil-editor","javascript-obfuscator":"^4.2.2"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.2.8_1783583596905_0.7560443316828058","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@pen.dev/cli","version":"0.3.0","keywords":["pen.dev","pencil","design","ai","cli","pen"],"author":{"name":"High Agency, Inc."},"license":"UNLICENSED","_id":"@pen.dev/cli@0.3.0","maintainers":[{"name":"gerhardberger","email":"93.morph@gmail.com"},{"name":"pserb","email":"pavel@pencil.dev"}],"bin":{"pen":"dist/index.mjs","pencil":"dist/index.mjs"},"dist":{"shasum":"55739fdb025dfdacc4b29ad7172933a71012036e","tarball":"https://registry.npmjs.org/@pen.dev/cli/-/cli-0.3.0.tgz","fileCount":103,"integrity":"sha512-+mC+7wW49iGrzH/VsT32OPZjegGyFRJlGfbVoS8TrYug8x/zAzo2P3hz9hPc7vYN/XFyM14npQBEETwvQvUh/g==","signatures":[{"sig":"MEQCIBLrH+KBOQTCRifQ4mghOnjr0upzwuO2Yzoin5//8+GdAiBwmMSQ1a0JoVpDgKjOQ9zYR8yDH3Aa3gTs0oLLgxDYbw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":60122306},"main":"dist/index.mjs","type":"module","engines":{"node":">=18.0.0"},"gitHead":"7576949553ba100713208e28110fce0cad1a9878","scripts":{"dev":"npm run build && cross-env NODE_ENV=development npm run start --","lint":"biome check","build":"tsdown && npm run bundle:chmod && npm run bundle:mcp && npm run bundle:wasm && npm run bundle:pen-libs && npm run bundle:skill","start":"node dist/index.mjs","lint:ci":"biome ci","build:prod":"npm run build && node scripts/obfuscate.js","bundle:mcp":"mkdir -p dist/out && cp ../../servers/mcp/mcp-server-* dist/out/ && chmod +x dist/out/mcp-server-*","bundle:wasm":"node scripts/copy-pencil-wasm.mjs","bundle:chmod":"node scripts/chmod-dist-entry.mjs","bundle:skill":"cp ../../SKILL.md ./SKILL.md","test:package":"bash scripts/test-package-docker.sh","bundle:pen-libs":"mkdir -p dist/out/data && cp ../../lib/pencil-editor/data/*.lib.pen dist/out/data/","test:interactive":"bash scripts/test-interactive.sh"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:547dc7e3-9452-4430-b3b9-b94a4642c021"}},"_npmVersion":"12.0.1","description":"CLI tool for running the pen.dev AI agent manipulating .pen design files","directories":{},"_nodeVersion":"22.22.3","dependencies":{"svgo":"^4.0.0","sharp":"^0.34.5","semver":"^7.7.4","eventemitter3":"^5.0.1","@inquirer/prompts":"^8.3.0","@openai/codex-sdk":"^0.144.1","@node-ipc/node-ipc":"^11.0.3","@anthropic-ai/claude-agent-sdk":"^0.3.206"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.20.1","@ha/ipc":"file:../../lib/ipc","@ha/mcp":"file:../../lib/mcp","@ha/agent":"file:../../lib/agent","cross-env":"^10.1.0","@ha/schema":"file:../../lib/schema","@ha/shared":"file:../../lib/shared","typescript":"^5.0.0","@types/node":"^20.0.0","@types/semver":"^7.7.1","@biomejs/biome":"^2.4.5","@types/node-ipc":"^9.2.3","@ha/pencil-editor":"file:../../lib/pencil-editor","javascript-obfuscator":"^4.2.2"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.3.0_1784561468976_0.8687352264315258","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@pen.dev/cli","version":"0.3.1","keywords":["pen.dev","pencil","design","ai","cli","pen"],"author":{"name":"High Agency, Inc."},"license":"UNLICENSED","_id":"@pen.dev/cli@0.3.1","maintainers":[{"name":"gerhardberger","email":"93.morph@gmail.com"},{"name":"pserb","email":"pavel@pencil.dev"}],"bin":{"pen":"dist/index.mjs","pencil":"dist/index.mjs"},"dist":{"shasum":"804ba7bf804803ba3eab945b6a9ae4e7fa4629c8","tarball":"https://registry.npmjs.org/@pen.dev/cli/-/cli-0.3.1.tgz","fileCount":70,"integrity":"sha512-PCDT4/+hn4nyXXQoDraQhDljQP3QCsPNQ2mWIx2+1Gq4oT2adPzMuIeo0zEYiYF4M4c0w7jq6vUqIIcbKv7ubA==","signatures":[{"sig":"MEYCIQDhVFGqheGwwy5/jLWr86HQK7NezfgWwstcimbyHeO3tgIhAPLKsOwfa9iEdK5ymEBu6k2uoa8Pdw8oxfS8Qsp0LM/R","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58274828},"main":"dist/index.mjs","type":"module","engines":{"node":">=18.0.0"},"gitHead":"4927f2ab1393b2b4ebe28ef1dfc4f21ad420787f","scripts":{"dev":"npm run build && cross-env NODE_ENV=development npm run start --","lint":"biome check","build":"tsdown && npm run bundle:chmod && npm run bundle:mcp && npm run bundle:wasm && npm run bundle:pen-libs && npm run bundle:skill","start":"node dist/index.mjs","lint:ci":"biome ci","build:prod":"npm run build && node scripts/obfuscate.js","bundle:mcp":"mkdir -p dist/out && cp ../../servers/mcp/mcp-server-* dist/out/ && chmod +x dist/out/mcp-server-*","bundle:wasm":"node scripts/copy-pencil-wasm.mjs","bundle:chmod":"node scripts/chmod-dist-entry.mjs","bundle:skill":"cp ../../SKILL.md ./SKILL.md","test:package":"bash scripts/test-package-docker.sh","bundle:pen-libs":"mkdir -p dist/out/data && cp ../../lib/pencil-editor/data/*.lib.pen dist/out/data/","test:interactive":"bash scripts/test-interactive.sh"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:547dc7e3-9452-4430-b3b9-b94a4642c021"}},"_npmVersion":"12.0.2","description":"CLI tool for running the pen.dev AI agent manipulating .pen design files","directories":{},"_nodeVersion":"22.22.3","dependencies":{"svgo":"^4.0.0","sharp":"^0.34.5","semver":"^7.7.4","eventemitter3":"^5.0.1","@inquirer/prompts":"^8.3.0","@openai/codex-sdk":"^0.144.1","@node-ipc/node-ipc":"^11.0.3","@anthropic-ai/claude-agent-sdk":"^0.3.206"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.20.1","@ha/ipc":"file:../../lib/ipc","@ha/mcp":"file:../../lib/mcp","@ha/agent":"file:../../lib/agent","cross-env":"^10.1.0","@ha/schema":"file:../../lib/schema","@ha/shared":"file:../../lib/shared","typescript":"^5.0.0","@types/node":"^20.0.0","@types/semver":"^7.7.1","@biomejs/biome":"^2.4.5","@types/node-ipc":"^9.2.3","@ha/pencil-editor":"file:../../lib/pencil-editor","javascript-obfuscator":"^4.2.2"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.3.1_1785579465724_0.06679854317595835","host":"s3://npm-registry-packages-npm-production"}},"0.3.2":{"name":"@pen.dev/cli","version":"0.3.2","keywords":["pen.dev","pencil","design","ai","cli","pen"],"author":{"name":"High Agency, Inc."},"license":"UNLICENSED","_id":"@pen.dev/cli@0.3.2","maintainers":[{"name":"gerhardberger","email":"93.morph@gmail.com"},{"name":"pserb","email":"pavel@pencil.dev"}],"bin":{"pen":"dist/index.mjs","pencil":"dist/index.mjs"},"dist":{"shasum":"98b35b8302980b526a765957ec930df096703b98","tarball":"https://registry.npmjs.org/@pen.dev/cli/-/cli-0.3.2.tgz","fileCount":70,"integrity":"sha512-3wjsaQ5Ojh27Z6XdwhjVifIe3J3hqHgmyymT7ARSFx7F+FM79fuMWCqX5GyCUg/aaJVhSbdcsdzrKYQ6dB5Zsw==","signatures":[{"sig":"MEUCIFZ/Mb039WGiTD3H6ouy+u3NE/4nTy/MauY6Supma4USAiEA6gf21KGKObmYuLok/ZCt4WH41ZDIMINf3CuSFsgsdf0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58392878},"main":"dist/index.mjs","type":"module","engines":{"node":">=18.0.0"},"gitHead":"8609c7288f970ee83e19ab424d9f8968750440bd","scripts":{"dev":"npm run build && cross-env NODE_ENV=development npm run start --","lint":"biome check","build":"tsdown && npm run bundle:chmod && npm run bundle:mcp && npm run bundle:wasm && npm run bundle:pen-libs && npm run bundle:skill","start":"node dist/index.mjs","lint:ci":"biome ci","build:prod":"npm run build && node scripts/obfuscate.js","bundle:mcp":"mkdir -p dist/out && cp ../../servers/mcp/mcp-server-* dist/out/ && chmod +x dist/out/mcp-server-*","bundle:wasm":"node scripts/copy-pencil-wasm.mjs","bundle:chmod":"node scripts/chmod-dist-entry.mjs","bundle:skill":"cp ../../SKILL.md ./SKILL.md","test:package":"bash scripts/test-package-docker.sh","bundle:pen-libs":"mkdir -p dist/out/data && cp ../../lib/pencil-editor/data/*.lib.pen dist/out/data/","test:interactive":"bash scripts/test-interactive.sh"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:547dc7e3-9452-4430-b3b9-b94a4642c021"}},"_npmVersion":"12.0.2","description":"CLI tool for running the pen.dev AI agent manipulating .pen design files","directories":{},"_nodeVersion":"22.22.3","dependencies":{"svgo":"^4.0.0","sharp":"^0.34.5","semver":"^7.7.4","eventemitter3":"^5.0.1","@inquirer/prompts":"^8.3.0","@openai/codex-sdk":"^0.144.1","@node-ipc/node-ipc":"^11.0.3","@anthropic-ai/claude-agent-sdk":"^0.3.222"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.20.1","@ha/ipc":"file:../../lib/ipc","@ha/mcp":"file:../../lib/mcp","@ha/agent":"file:../../lib/agent","cross-env":"^10.1.0","@ha/schema":"file:../../lib/schema","@ha/shared":"file:../../lib/shared","typescript":"^5.0.0","@types/node":"^20.0.0","@types/semver":"^7.7.1","@biomejs/biome":"^2.4.5","@types/node-ipc":"^9.2.3","@ha/pencil-editor":"file:../../lib/pencil-editor","javascript-obfuscator":"^4.2.2"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.3.2_1786111371895_0.40132973198641286","host":"s3://npm-registry-packages-npm-production"}},"0.3.3":{"name":"@pen.dev/cli","version":"0.3.3","keywords":["pen.dev","pencil","design","ai","cli","pen"],"author":{"name":"High Agency, Inc."},"license":"UNLICENSED","_id":"@pen.dev/cli@0.3.3","maintainers":[{"name":"gerhardberger","email":"93.morph@gmail.com"},{"name":"pserb","email":"pavel@pencil.dev"}],"bin":{"pen":"dist/index.mjs","pencil":"dist/index.mjs"},"dist":{"shasum":"2115eb7b026cc45b7e79be698551ef067085ab94","tarball":"https://registry.npmjs.org/@pen.dev/cli/-/cli-0.3.3.tgz","fileCount":70,"integrity":"sha512-/JT7Ir3KelG0G5V7lfvpciWTTOa205IfqS/iMVT8XhbGc25Llo1D1nAooEffh9gMgVdOD9oWKPDeIGnYhHcAtQ==","signatures":[{"sig":"MEUCIQCJlpXU7jGJMxd4kfS5daUhoEt4wS+aPp+rlgWglAsiCAIgPGfeDivI7whE9x7POtBYzIA2NyMeetwbKiZyq7IA2qI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57963015},"main":"dist/index.mjs","type":"module","engines":{"node":">=18.0.0"},"gitHead":"33f79f55e2649e217b752e87979db0d1425f80af","scripts":{"dev":"npm run build && cross-env NODE_ENV=development npm run start --","lint":"biome check","build":"tsdown && npm run bundle:chmod && npm run bundle:mcp && npm run bundle:wasm && npm run bundle:pen-libs && npm run bundle:skill","start":"node dist/index.mjs","lint:ci":"biome ci","typecheck":"tsc --noEmit","build:prod":"npm run build && node scripts/obfuscate.js","bundle:mcp":"mkdir -p dist/out && cp ../../servers/mcp/mcp-server-* dist/out/ && chmod +x dist/out/mcp-server-*","bundle:wasm":"node scripts/copy-pencil-wasm.mjs","bundle:chmod":"node scripts/chmod-dist-entry.mjs","bundle:skill":"cp ../../SKILL.md ./SKILL.md","test:package":"bash scripts/test-package-docker.sh","bundle:pen-libs":"mkdir -p dist/out/data && cp ../../lib/pencil-editor/data/*.lib.pen dist/out/data/","test:interactive":"bash scripts/test-interactive.sh"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:547dc7e3-9452-4430-b3b9-b94a4642c021"}},"_npmVersion":"12.0.2","description":"CLI tool for running the pen.dev AI agent manipulating .pen design files","directories":{},"_nodeVersion":"22.22.3","dependencies":{"svgo":"^4.0.0","sharp":"^0.34.5","semver":"^7.7.4","eventemitter3":"^5.0.1","@inquirer/prompts":"^8.3.0","@openai/codex-sdk":"^0.144.1","@node-ipc/node-ipc":"^11.0.3","@anthropic-ai/claude-agent-sdk":"^0.3.222"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.20.1","@ha/ipc":"file:../../lib/ipc","@ha/mcp":"file:../../lib/mcp","@ha/agent":"file:../../lib/agent","cross-env":"^10.1.0","@ha/schema":"file:../../lib/schema","@ha/shared":"file:../../lib/shared","typescript":"^5.0.0","@types/node":"^20.0.0","@types/semver":"^7.7.1","@biomejs/biome":"^2.4.5","@types/node-ipc":"^9.2.3","@ha/pencil-editor":"file:../../lib/pencil-editor","javascript-obfuscator":"^4.2.2"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.3.3_1786715771536_0.5512978744159525","host":"s3://npm-registry-packages-npm-production"}},"0.3.4":{"name":"@pen.dev/cli","version":"0.3.4","keywords":["pen.dev","pencil","design","ai","cli","pen"],"author":{"name":"High Agency, Inc."},"license":"UNLICENSED","_id":"@pen.dev/cli@0.3.4","maintainers":[{"name":"gerhardberger","email":"93.morph@gmail.com"},{"name":"pserb","email":"pavel@pencil.dev"}],"bin":{"pen":"dist/index.mjs","pencil":"dist/index.mjs"},"dist":{"shasum":"917c0b0cc3fc05f1a46de01e1b4e566bead9f42b","tarball":"https://registry.npmjs.org/@pen.dev/cli/-/cli-0.3.4.tgz","fileCount":82,"integrity":"sha512-olBsnXELHNmDVyKGE3xjc6dbAVYg1wQ3EkFnomnMGs1KcK1gXlR3fprTkH6DFtp25PriIudixEVOhRUwiRUxwg==","signatures":[{"sig":"MEUCIFTebviETdq7yFTXZf1f47QejC1gG04QY4UmBRLW8CEiAiEA9qfADeasj9JlTafSxSb4nemzg+tob0mhtPtOQxDALAQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57343308},"main":"dist/index.mjs","type":"module","engines":{"node":">=22.0.0"},"gitHead":"cb668b4bdd02f6639ef3824a75b7d656c6b63f5c","scripts":{"dev":"npm run build && cross-env NODE_ENV=development npm run start --","lint":"biome check","build":"tsdown && npm run bundle:chmod && npm run bundle:mcp && npm run bundle:wasm && npm run bundle:pen-libs && npm run bundle:skill","start":"node dist/index.mjs","lint:ci":"biome ci","typecheck":"tsc --noEmit","build:prod":"npm run build && node scripts/obfuscate.js","bundle:mcp":"mkdir -p dist/out && cp ../../servers/mcp/mcp-server-* dist/out/ && chmod +x dist/out/mcp-server-*","bundle:wasm":"node scripts/copy-pencil-wasm.mjs","bundle:chmod":"node scripts/chmod-dist-entry.mjs","bundle:skill":"cp ../../SKILL.md ./SKILL.md && rm -rf dist/out/skills && mkdir -p dist/out/skills && cp -Rp ../../skills/pen-dev dist/out/skills/","test:package":"bash scripts/test-package-docker.sh","bundle:pen-libs":"mkdir -p dist/out/data && cp ../../lib/pencil-editor/data/*.lib.pen dist/out/data/","test:interactive":"bash scripts/test-interactive.sh"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:547dc7e3-9452-4430-b3b9-b94a4642c021"}},"_npmVersion":"12.0.2","description":"CLI tool for running the pen.dev AI agent manipulating .pen design files","directories":{},"_nodeVersion":"22.22.3","dependencies":{"svgo":"^4.0.0","sharp":"^0.34.5","semver":"^7.7.4","eventemitter3":"^5.0.1","@inquirer/prompts":"^8.3.0","@openai/codex-sdk":"^0.144.1","@node-ipc/node-ipc":"^11.0.3","@anthropic-ai/claude-agent-sdk":"^0.3.222"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.20.1","@ha/ipc":"file:../../lib/ipc","@ha/mcp":"file:../../lib/mcp","@ha/agent":"file:../../lib/agent","cross-env":"^10.1.0","@ha/schema":"file:../../lib/schema","@ha/shared":"file:../../lib/shared","typescript":"^5.0.0","@types/node":"^20.0.0","@types/semver":"^7.7.1","@biomejs/biome":"^2.4.5","@types/node-ipc":"^9.2.3","@ha/pencil-editor":"file:../../lib/pencil-editor","javascript-obfuscator":"^4.2.2"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.3.4_1787340988412_0.16575592941919037","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"@pen.dev/cli","version":"0.3.5","keywords":["pen.dev","pencil","design","ai","cli","pen"],"author":{"name":"High Agency, Inc."},"license":"UNLICENSED","_id":"@pen.dev/cli@0.3.5","maintainers":[{"name":"gerhardberger","email":"93.morph@gmail.com"},{"name":"pserb","email":"pavel@pencil.dev"}],"bin":{"pen":"dist/index.mjs","pencil":"dist/index.mjs"},"dist":{"shasum":"6a285530cd509b955a6ca7794bf5002707ba3e6a","tarball":"https://registry.npmjs.org/@pen.dev/cli/-/cli-0.3.5.tgz","fileCount":83,"integrity":"sha512-Dek1GvIePDW/xRFx9g/ees78VEyK/ayP+1Dhe9vM2/hYN9dnpmFQf82yzhBh5VpMdmNTMmw9LcAWdR2nRQ31NA==","signatures":[{"sig":"MEYCIQDJSdicUJ7mR+IRPT0sKKrsmQp52LlnYPG10VzJWTKAiAIhAKoGztRw88JtJ6xwwljWw4jz814BXOgwBxBwsRCsMJsu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57327921},"main":"dist/index.mjs","type":"module","engines":{"node":">=22.0.0"},"gitHead":"427f75b38e51bd829f9523accd23cd79c9287a79","scripts":{"dev":"npm run build && cross-env NODE_ENV=development npm run start --","lint":"biome check","build":"tsdown && npm run bundle:chmod && npm run bundle:mcp && npm run bundle:wasm && npm run bundle:pen-libs && npm run bundle:skill","start":"node dist/index.mjs","lint:ci":"biome ci","typecheck":"tsc --noEmit","build:prod":"npm run build && node scripts/obfuscate.js","bundle:mcp":"mkdir -p dist/out && cp ../../servers/mcp/mcp-server-* dist/out/ && chmod +x dist/out/mcp-server-*","bundle:wasm":"node scripts/copy-pencil-wasm.mjs","bundle:chmod":"node scripts/chmod-dist-entry.mjs","bundle:skill":"cp ../../SKILL.md ./SKILL.md && rm -rf dist/out/skills && mkdir -p dist/out/skills && cp -Rp ../../skills/pen-dev dist/out/skills/","test:package":"bash scripts/test-package-docker.sh","bundle:pen-libs":"mkdir -p dist/out/data && cp ../../lib/pencil-editor/data/*.lib.pen dist/out/data/","test:interactive":"bash scripts/test-interactive.sh"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:547dc7e3-9452-4430-b3b9-b94a4642c021"}},"_npmVersion":"12.0.2","description":"CLI tool for running the pen.dev AI agent manipulating .pen design files","directories":{},"_nodeVersion":"22.22.3","dependencies":{"svgo":"^4.0.0","sharp":"^0.34.5","semver":"^7.7.4","eventemitter3":"^5.0.1","@inquirer/prompts":"^8.3.0","@openai/codex-sdk":"^0.144.1","@node-ipc/node-ipc":"^11.0.3","@anthropic-ai/claude-agent-sdk":"^0.3.222"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.20.1","@ha/ipc":"file:../../lib/ipc","@ha/mcp":"file:../../lib/mcp","@ha/agent":"file:../../lib/agent","cross-env":"^10.1.0","@ha/schema":"file:../../lib/schema","@ha/shared":"file:../../lib/shared","typescript":"^5.0.0","@types/node":"^20.0.0","@types/semver":"^7.7.1","@biomejs/biome":"^2.4.5","@types/node-ipc":"^9.2.3","@ha/pencil-editor":"file:../../lib/pencil-editor","javascript-obfuscator":"^4.2.2"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.3.5_1787668216778_0.5837500964360334","host":"s3://npm-registry-packages-npm-production"}},"0.3.6":{"name":"@pen.dev/cli","version":"0.3.6","keywords":["pen.dev","pencil","design","ai","cli","pen"],"author":{"name":"High Agency, Inc."},"license":"UNLICENSED","_id":"@pen.dev/cli@0.3.6","maintainers":[{"name":"gerhardberger","email":"93.morph@gmail.com"},{"name":"pserb","email":"pavel@pencil.dev"}],"bin":{"pen":"dist/index.mjs","pencil":"dist/index.mjs"},"dist":{"shasum":"59da4cd4cfcf6969ed783f9a9c3cefbb6833ef89","tarball":"https://registry.npmjs.org/@pen.dev/cli/-/cli-0.3.6.tgz","fileCount":83,"integrity":"sha512-mbikMg/mvq4AOxn+4OyGLYCRZcWH4Lk5ZlD2DUgY5EyV4kEGpB8MmubmHrrB8w9AnumnxdyGVBIEY6KL1+LzuQ==","signatures":[{"sig":"MEQCIEEXNll/HGZCxPw1jbUCiRYSHjSFB3hOUQ4jCU2jn4yNAiBe446vtSaKDhkdOL8D4tD4xuIJso1GCCpCcrkwy8jaBw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57344758},"main":"dist/index.mjs","type":"module","engines":{"node":">=22.0.0"},"gitHead":"2cb2aaea8dee6fb5ab992a4715b50fd32f7986f1","scripts":{"dev":"npm run build && cross-env NODE_ENV=development npm run start --","lint":"biome check","build":"tsdown && npm run bundle:chmod && npm run bundle:mcp && npm run bundle:wasm && npm run bundle:pen-libs && npm run bundle:skill","start":"node dist/index.mjs","lint:ci":"biome ci","typecheck":"tsc --noEmit","build:prod":"npm run build && node scripts/obfuscate.js","bundle:mcp":"mkdir -p dist/out && cp ../../servers/mcp/mcp-server-* dist/out/ && chmod +x dist/out/mcp-server-*","bundle:wasm":"node scripts/copy-pencil-wasm.mjs","bundle:chmod":"node scripts/chmod-dist-entry.mjs","bundle:skill":"cp ../../SKILL.md ./SKILL.md && rm -rf dist/out/skills && mkdir -p dist/out/skills && cp -Rp ../../skills/pen-dev dist/out/skills/","test:package":"bash scripts/test-package-docker.sh","bundle:pen-libs":"mkdir -p dist/out/data && cp ../../lib/pencil-editor/data/*.lib.pen dist/out/data/","test:interactive":"bash scripts/test-interactive.sh"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:547dc7e3-9452-4430-b3b9-b94a4642c021"}},"_npmVersion":"12.0.2","description":"CLI tool for running the pen.dev AI agent manipulating .pen design files","directories":{},"_nodeVersion":"22.22.3","dependencies":{"svgo":"^4.0.0","sharp":"^0.34.5","semver":"^7.7.4","eventemitter3":"^5.0.1","@inquirer/prompts":"^8.3.0","@openai/codex-sdk":"^0.144.1","@node-ipc/node-ipc":"^11.0.3","@anthropic-ai/claude-agent-sdk":"^0.3.257"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.20.1","@ha/ipc":"file:../../lib/ipc","@ha/mcp":"file:../../lib/mcp","@ha/agent":"file:../../lib/agent","cross-env":"^10.1.0","@ha/schema":"file:../../lib/schema","@ha/shared":"file:../../lib/shared","typescript":"^5.0.0","@types/node":"^20.0.0","@types/semver":"^7.7.1","@biomejs/biome":"^2.4.5","@types/node-ipc":"^9.2.3","@ha/pencil-editor":"file:../../lib/pencil-editor","javascript-obfuscator":"^4.2.2"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.3.6_1788362321549_0.532297310313407","host":"s3://npm-registry-packages-npm-production"}},"0.3.7":{"name":"@pen.dev/cli","version":"0.3.7","keywords":["pen.dev","pencil","design","ai","cli","pen"],"author":{"name":"High Agency, Inc."},"license":"UNLICENSED","_id":"@pen.dev/cli@0.3.7","maintainers":[{"name":"gerhardberger","email":"93.morph@gmail.com"},{"name":"pserb","email":"pavel@pencil.dev"}],"bin":{"pen":"dist/index.mjs","pencil":"dist/index.mjs"},"dist":{"shasum":"a28edfdee45476ca6b02d6d70decdb7b16c436c2","tarball":"https://registry.npmjs.org/@pen.dev/cli/-/cli-0.3.7.tgz","fileCount":48,"integrity":"sha512-mmT3ZtSxc4j8Sb1ST0h/h9b904OYsszPWl6ulHqa1NHyh91GEi9JA3ncgeoFG2cRDYdXoOyuHId8IA4H1bZIdw==","signatures":[{"sig":"MEYCIQCbSp9DwOufOiS5V3K/Cz47cAFS3aPu6XjKqz03jgUNSgIhAJQ5tpX3hUqyQOMsGnuAcldFzvkWDlQoEPS0WOzBem4U","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":51226172},"main":"dist/index.mjs","type":"module","engines":{"node":">=22.19.0"},"gitHead":"d4e2331aa50da163ad02c6223100b5e8ad895937","scripts":{"dev":"npm run build && cross-env NODE_ENV=development npm run start --","lint":"biome check","build":"tsdown && npm run bundle:chmod && npm run bundle:mcp && npm run bundle:wasm && npm run bundle:pen-libs && npm run bundle:skill","start":"node dist/index.mjs","lint:ci":"biome ci","typecheck":"tsc --noEmit","build:prod":"npm run build && node scripts/obfuscate.js","bundle:mcp":"mkdir -p dist/out && cp ../../servers/mcp/mcp-server-* dist/out/ && chmod +x dist/out/mcp-server-*","bundle:wasm":"node scripts/copy-pencil-wasm.mjs","bundle:chmod":"node scripts/chmod-dist-entry.mjs","bundle:skill":"cp ../../SKILL.md ./SKILL.md && rm -rf dist/out/skills && mkdir -p dist/out/skills && cp -Rp ../../skills/pen-dev dist/out/skills/","test:package":"bash scripts/test-package-docker.sh","bundle:pen-libs":"mkdir -p dist/out/data && cp ../../lib/pencil-editor/data/*.lib.pen dist/out/data/","test:interactive":"bash scripts/test-interactive.sh"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:547dc7e3-9452-4430-b3b9-b94a4642c021"}},"_npmVersion":"12.0.2","description":"CLI tool for running the pen.dev AI agent manipulating .pen design files","directories":{},"_nodeVersion":"22.22.3","dependencies":{"svgo":"^4.0.0","sharp":"^0.34.5","semver":"^7.7.4","eventemitter3":"^5.0.1","@inquirer/prompts":"^8.3.0","@openai/codex-sdk":"^0.153.4","@node-ipc/node-ipc":"^11.0.3","@anthropic-ai/claude-agent-sdk":"^0.3.257","@earendil-works/pi-coding-agent":"^0.84.4"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.20.1","@ha/ipc":"file:../../lib/ipc","@ha/mcp":"file:../../lib/mcp","@ha/agent":"file:../../lib/agent","cross-env":"^10.1.0","@ha/schema":"file:../../lib/schema","@ha/shared":"file:../../lib/shared","typescript":"^5.0.0","@types/node":"^20.0.0","@types/semver":"^7.7.1","@biomejs/biome":"^2.4.5","@types/node-ipc":"^9.2.3","@ha/pencil-editor":"file:../../lib/pencil-editor","javascript-obfuscator":"^4.2.2"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.3.7_1788896885064_0.5102030197324412","host":"s3://npm-registry-packages-npm-production"}},"0.3.8":{"name":"@pen.dev/cli","version":"0.3.8","keywords":["pen.dev","pencil","design","ai","cli","pen"],"author":{"name":"High Agency, Inc."},"license":"UNLICENSED","_id":"@pen.dev/cli@0.3.8","maintainers":[{"name":"gerhardberger","email":"93.morph@gmail.com"},{"name":"pserb","email":"pavel@pencil.dev"}],"bin":{"pen":"dist/index.mjs","pencil":"dist/index.mjs"},"dist":{"shasum":"ca518157421809cc7d583f26d355e0fcc1f04267","tarball":"https://registry.npmjs.org/@pen.dev/cli/-/cli-0.3.8.tgz","fileCount":49,"integrity":"sha512-M7EFRQLe9nIs9ZXjO+cyeRHsvQH77MVbYRlIPkJomikKMcPsgwlqKLuxL/a7aCYSSbrbEHH+UUqfr1Df21woww==","signatures":[{"sig":"MEYCIQDcwzelUY2KMMY2aRQDEd7QOraoPF4ejyZ2JN9RopCXlAIhALQtJkVDcKG4oEc6QpbxzOAA/oOLDCwXnNy7P0YTxKxb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCICQ8Eo9aIHKutM9OIEbRe4nnIUZ8D3mntqAY+l+jJ5x2AiADJALZI4e9N9ZVIAFN3oyBGm/9Dj6IWO7eH7jSOmfJ6Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":51532174},"main":"dist/index.mjs","type":"module","engines":{"node":">=22.19.0"},"gitHead":"395beadde9b209e9a85000df79a5e0434b6cb9c4","scripts":{"dev":"npm run build && cross-env NODE_ENV=development npm run start --","lint":"biome check","build":"tsdown && npm run bundle:chmod && npm run bundle:mcp && npm run bundle:wasm && npm run bundle:pen-libs && npm run bundle:skill","start":"node dist/index.mjs","lint:ci":"biome ci","typecheck":"tsc --noEmit","build:prod":"npm run build && node scripts/obfuscate.js","bundle:mcp":"mkdir -p dist/out && cp ../../servers/mcp/mcp-server-* dist/out/ && chmod +x dist/out/mcp-server-*","bundle:wasm":"node scripts/copy-pencil-wasm.mjs","bundle:chmod":"node scripts/chmod-dist-entry.mjs","bundle:skill":"cp ../../SKILL.md ./SKILL.md && rm -rf dist/out/skills && mkdir -p dist/out/skills && cp -Rp ../../skills/pen-dev dist/out/skills/","test:package":"bash scripts/test-package-docker.sh","bundle:pen-libs":"mkdir -p dist/out/data && cp ../../lib/pencil-editor/data/*.lib.pen dist/out/data/","test:interactive":"bash scripts/test-interactive.sh"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:547dc7e3-9452-4430-b3b9-b94a4642c021"}},"_npmVersion":"12.0.2","description":"CLI tool for running the pen.dev AI agent manipulating .pen design files","directories":{},"_nodeVersion":"22.22.3","dependencies":{"svgo":"^4.0.0","sharp":"^0.34.5","semver":"^7.7.4","eventemitter3":"^5.0.1","@inquirer/prompts":"^8.3.0","@openai/codex-sdk":"^0.153.4","@node-ipc/node-ipc":"^11.0.3","@anthropic-ai/claude-agent-sdk":"^0.3.257","@earendil-works/pi-coding-agent":"^0.85.1"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.20.1","@ha/ipc":"file:../../lib/ipc","@ha/mcp":"file:../../lib/mcp","@ha/agent":"file:../../lib/agent","cross-env":"^10.1.0","@ha/schema":"file:../../lib/schema","@ha/shared":"file:../../lib/shared","typescript":"^5.0.0","@types/node":"^20.0.0","@types/semver":"^7.7.1","@biomejs/biome":"^2.4.5","@ha/device-auth":"file:../../lib/device-auth","@types/node-ipc":"^9.2.3","@ha/pencil-editor":"file:../../lib/pencil-editor","javascript-obfuscator":"^4.2.2"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.3.8_1789722488687_0.3032801102385121","host":"s3://npm-registry-packages-npm-production"}},"0.3.9":{"name":"@pen.dev/cli","version":"0.3.9","keywords":["pen.dev","pencil","design","ai","cli","pen"],"author":{"name":"High Agency, Inc."},"license":"UNLICENSED","_id":"@pen.dev/cli@0.3.9","maintainers":[{"name":"gerhardberger","email":"93.morph@gmail.com"},{"name":"pserb","email":"pavel@pencil.dev"}],"bin":{"pen":"dist/index.mjs","pencil":"dist/index.mjs"},"dist":{"shasum":"c695ed78a9a9ba1e8412ce89edc36d011336b297","tarball":"https://registry.npmjs.org/@pen.dev/cli/-/cli-0.3.9.tgz","fileCount":49,"integrity":"sha512-mTaPNkw9PXyToiftRzScrGQ4DLvm4asTx8m6IG6TeBHJqzIfcKrzkJiEZzwMk/JvIzwE0Q++Yb9268G7iAQqTw==","signatures":[{"sig":"MEQCIAsMIHyJrl1mJORklCK/51PhNjz/XpOi4QM0ZavN679VAiAM74tkgG3jQy8ea7XqPMT4jwhVysQri0q02fjlVukAug==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIG7KY4pcFoIFcNIRnTgMecumO8VfVjSQk7tfMHfeNQwjAiAXJ+xx4OdWCG9rHX6seT4i0l6ev8kdcZNyiZekTKC3VQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":51546117},"main":"dist/index.mjs","type":"module","engines":{"node":">=22.19.0"},"gitHead":"2665bd717eed9e91d7113a84a00d07c645b79ef0","scripts":{"dev":"npm run build && cross-env NODE_ENV=development npm run start --","lint":"biome check","build":"tsdown && npm run bundle:chmod && npm run bundle:mcp && npm run bundle:wasm && npm run bundle:pen-libs && npm run bundle:skill","start":"node dist/index.mjs","lint:ci":"biome ci","typecheck":"tsc --noEmit","build:prod":"npm run build && node scripts/obfuscate.js","bundle:mcp":"mkdir -p dist/out && cp ../../servers/mcp/mcp-server-* dist/out/ && chmod +x dist/out/mcp-server-*","bundle:wasm":"node scripts/copy-pencil-wasm.mjs","bundle:chmod":"node scripts/chmod-dist-entry.mjs","bundle:skill":"cp ../../SKILL.md ./SKILL.md && rm -rf dist/out/skills && mkdir -p dist/out/skills && cp -Rp ../../skills/pen-dev dist/out/skills/","test:package":"bash scripts/test-package-docker.sh","bundle:pen-libs":"mkdir -p dist/out/data && cp ../../lib/pencil-editor/data/*.lib.pen dist/out/data/","test:interactive":"bash scripts/test-interactive.sh"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:547dc7e3-9452-4430-b3b9-b94a4642c021"}},"_npmVersion":"12.1.0","description":"CLI tool for running the pen.dev AI agent manipulating .pen design files","directories":{},"_nodeVersion":"22.22.3","dependencies":{"svgo":"^4.0.0","sharp":"^0.34.5","semver":"^7.7.4","eventemitter3":"^5.0.1","@inquirer/prompts":"^8.3.0","@openai/codex-sdk":"^0.155.1","@node-ipc/node-ipc":"^11.0.3","@anthropic-ai/claude-agent-sdk":"^0.3.280","@earendil-works/pi-coding-agent":"^0.86.1"},"_hasShrinkwrap":false,"devDependencies":{"tsdown":"^0.20.1","@ha/ipc":"file:../../lib/ipc","@ha/mcp":"file:../../lib/mcp","@ha/agent":"file:../../lib/agent","cross-env":"^10.1.0","@ha/schema":"file:../../lib/schema","@ha/shared":"file:../../lib/shared","typescript":"^5.0.0","@types/node":"^20.0.0","@types/semver":"^7.7.1","@biomejs/biome":"^2.4.5","@ha/device-auth":"file:../../lib/device-auth","@types/node-ipc":"^9.2.3","@ha/pencil-editor":"file:../../lib/pencil-editor","javascript-obfuscator":"^4.2.2"},"_npmOperationalInternal":{"tmp":"tmp/cli_0.3.9_1790164297383_0.6651003600854999","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-07-09T07:53:16.809Z","modified":"2026-09-23T18:20:12.797Z","0.2.8":"2026-07-09T07:53:17.326Z","0.3.0":"2026-07-20T15:31:09.402Z","0.3.1":"2026-08-01T10:17:46.136Z","0.3.2":"2026-08-07T14:02:52.507Z","0.3.3":"2026-08-14T13:56:11.963Z","0.3.4":"2026-08-21T19:36:28.802Z","0.3.5":"2026-08-25T14:30:17.187Z","0.3.6":"2026-09-02T15:18:41.981Z","0.3.7":"2026-09-08T19:48:05.434Z","0.3.8":"2026-09-18T09:08:09.024Z","0.3.9":"2026-09-23T11:51:37.705Z"},"author":{"name":"High Agency, Inc."},"license":"UNLICENSED","keywords":["pen.dev","pencil","design","ai","cli","pen"],"description":"CLI tool for running the pen.dev AI agent manipulating .pen design files","maintainers":[{"email":"93.morph@gmail.com","name":"gerhardberger"},{"email":"pavel@pencil.dev","name":"pserb"},{"email":"tzahola@gmail.com","name":"tzahola"}],"readme":"# pen.dev CLI (formerly Pencil CLI)\n\nCommand-line interface for [pen.dev](https://pen.dev) — create and edit `.pen` design files from the terminal. Run the AI agent with a prompt, call MCP tools directly in an interactive shell, batch-process multiple designs, or export to PNG/JPEG/WEBP/PDF. Built on the same editor engine as the desktop app and IDE extension, with full headless rendering, AI image generation, and stock photo support.\n\n## Installation\n\n```bash\nnpm install -g @pen.dev/cli\n# or\npnpm add -g @pen.dev/cli\n# or\nyarn global add @pen.dev/cli\n```\n\n## Authentication\n\nThe CLI requires authentication before running agent operations. There are two methods:\n\n### Sign Up\n\n```bash\npen signup --email you@example.com --username johndoe --name \"John Doe\"\n```\n\nCreates a new account. You'll receive a verification email — click the link, then log in.\n\n### Interactive Login\n\n```bash\npen login\n```\n\nThis starts an interactive session where you choose your login method (browser on pen.dev, email + password, or email + OTP). Browser sign-in opens pen.dev for consent, then asks you to paste a one-time code into the CLI. On success the session token is stored in `~/.pencil/session-cli.json`.\n\n### Non-Interactive Login\n\n```bash\n# Step 1: Request an OTP code\npen login --email you@example.com\n\n# Step 2: Log in with the code from your email\npen login --email you@example.com --code 123456\n```\n\nWhen flags are provided the interactive prompts are skipped, useful for scripting and CI.\n\n### CLI Key (for CI/CD)\n\nSet the `PEN_CLI_KEY` environment variable. CLI keys are scoped to an organization and can be created/revoked in the **Developer Keys** section of your organization settings on the pen.dev web app.\n\n```bash\nPEN_CLI_KEY=pencil_cli_... pen --out design.pen --prompt \"Create a form\" --agent claude\n```\n\nThe CLI key always takes precedence over a stored session token.\n\n### Checking Status\n\n```bash\npen status\n```\n\nDisplays the current authentication method, verifies the session with the backend, and shows account details (email, name, organization for CLI keys).\n\n### Codex (ChatGPT) Login\n\n```bash\npen codex-login\n```\n\nSigns in to OpenAI Codex with your ChatGPT Plus/Pro account so the `codex` agent (`--agent codex` or any `gpt-*` model) can run. Choose browser login, or device-code login for headless machines. The credential is stored in `~/.pencil/agent-auth`. Alternatively set `PEN_AGENT_API_KEY` to use an API key instead.\n\n```bash\npen codex-logout\n```\n\nRemoves the stored OpenAI Codex credential.\n\n## Quick Start\n\n```bash\n# Log in first\npen login\n\n# Create a new design from scratch\npen --out design.pen --prompt \"Create a login page with email and password fields\" --agent claude\n\n# Modify an existing design\npen --in existing.pen --out modified.pen --prompt \"Add a blue submit button\" --agent claude\n\n# Start an interactive shell (in headless mode)\npen interactive -o design.pen\n\n# Start an interactive shell (connect to a running pen.dev app)\npen interactive -a desktop -i design.pen\n\n# List available models\npen --list-models --agent claude\n```\n\n## Usage\n\n```\npen [command] [options]\n\nCommands:\n  signup                 Create a new account (flags required, see below)\n  login                  Log in interactively (browser, email + password, or OTP)\n  status                 Check authentication status\n  version                Show CLI version\n  interactive            Start an interactive tool shell (see below)\n\nOptions:\n  --in, -i <path>        Input .pen file (optional, starts with empty canvas if omitted)\n  --out, -o <path>       Output .pen file path (required unless --export is used)\n  --prompt, -p <text>    Prompt for the AI agent (required)\n  --prompt-file, -f <path>  Attach a file to send with the prompt (repeatable). Images (png, jpeg, gif, webp) or text files; paths are not the prompt text itself.\n  --agent <type>         Agent to use when --model is omitted: claude, codex, gemini (default: claude)\n  --model, -m <id>       Model to use; agent is inferred from the model id\n  --custom, -c           Use custom Claude model config (e.g. AWS Bedrock, Vertex AI)\n  --list-models          List available models and exit\n  --tasks, -t <path>     JSON tasks file for batch operations\n  --workspace, -w <path> Workspace folder path to run the agent in\n  --export, -e <path>    Export an image of the final result\n  --export-scale <n>     Export scale factor (default: 1)\n  --export-type <type>   Export format: png, jpeg, webp, pdf (default: png)\n  --verbose-mcp          Log full MCP tool error details to the console\n  --help, -h             Show help message\n```\n\n## Interactive Mode\n\nThe interactive shell lets you call MCP tools directly on `.pen` files — useful for scripting, debugging, and agentic workflows that need fine-grained control over design operations.\n\n```\npen interactive [options]\n\nOptions:\n  --app, -a <name>   Connect to a running pen.dev app (e.g. desktop, vscode)\n  --in, -i <path>    Input .pen file (optional, empty canvas if omitted)\n  --out, -o <path>   Output .pen file (required in headless mode)\n  --help, -h         Show detailed tool reference. Important for agentic workflows, so agents can learn the tool.\n```\n\n### Modes\n\n**App mode** — connects to a running pen.dev desktop or extension. Changes are applied live.\n\n```bash\npen interactive -a desktop -i my-design.pen\n```\n\n**Headless mode** — spins up a local editor without a GUI. Use `save()` to write to `--out`.\n\n```bash\n# New empty canvas saved to the output file\npen interactive -o output.pen\n\n# Edit an existing file\npen interactive -i input.pen -o output.pen\n```\n\n### Shell commands\n\n```\ntool_name({ key: value })   Call an MCP tool\nsave()                      Save the document to disk (headless) or app\nexit()                      Exit the shell\n```\n\n### Getting started\n\nBegin with `read_skill` to load the .pen schema and execute instructions, then `get_app_state` to understand the document:\n\n```\npen > read_skill()\npen > read_skill({ path: \"pen-schema.md\" })\npen > read_skill({ path: \"execute.md\" })\npen > get_app_state()\npen > execute({ input: 'Get((n,c)=>{c.skipChildren();Print(n.id,n.name)})' }) # list top-level nodes\npen > execute({ input: 'Get(n=>n.reusable&&Print(n.id,n.name))' })            # find components\n```\n\n### Example\n\n```\npen > read_skill()\npen > read_skill({ path: \"pen-schema.md\" })\npen > read_skill({ path: \"execute.md\" })\npen > get_app_state()\npen > get_style()\npen > get_style({ name: \"Aerial Gravitas\" })\npen > execute({ input: 'rect=Insert(document,{type:\"rectangle\",name:\"Foo\",x:10,y:10,width:300,height:200,fill:\"#E5484D\"})' })\npen > execute({ input: 'TakeScreenshot([rect])' })\npen > save()\npen > exit()\n```\n\nRun `pen interactive --help` for the full tool reference with parameter types and descriptions.\n\n## Available Models\n\n```bash\npen --list-models --agent claude|gemini|codex\n```\n\n## Environment Variables\n\n| Variable | Description |\n|----------|-------------|\n| `PEN_CLI_KEY` | CLI API key for CI/CD (takes precedence over stored session) |\n| `PEN_AGENT_API_KEY` | API key for the selected agent. |\n| `ANTHROPIC_API_KEY` | Anthropic API key for Claude agents. Ignored for Codex and Gemini. |\n| `PEN_API_BASE` | Backend API base URL (default: `https://api.pen.dev`) |\n| `DEBUG` | Enable debug logging |\n\nFurther environment variables and agent config can be set in `settings.json`\nas well.\n\n## Supported Operations\n\nThe CLI supports the following MCP tools with full feature parity to the desktop app:\n\n### Design Operations\n\n| Tool | Description |\n|------|-------------|\n| `execute` | Insert, Update, Delete, Move, Copy, Replace, SetVariables, GetVariables, Get, Print, Generate, FindEmptySpace, TakeScreenshot, Export |\n| `get_app_state` | Get document metadata and structure |\n\n### Visual Operations (headless rendering via CanvasKit)\n\nScreenshots are taken with the `execute` `TakeScreenshot()` operation. Files\nare exported with the `execute` `Export()` operation, which supports\nPNG/JPEG/WEBP/PDF images and HTML output.\n\n### Image Generation\n\nThe `execute` `Generate()` operation brings images and vector artwork into the\ndocument, either from a prompt or by transforming an image the document already\nhas. Generated images are saved to an `images/` directory alongside the output\n`.pen` file.\n\n| Type | Description |\n|------|-------------|\n| `Generate(\"ai\", nodeId, prompt)` | AI-generated image from a text prompt |\n| `Generate(\"stock\", nodeId, keywords)` | Stock photo from Unsplash |\n| `Generate(\"svg\", frameId, prompt)` | Vector artwork drawn into the frame |\n| `Generate(\"vectorize-image\", frameId, imageUrl)` | Traces an existing image into vector paths inside the frame |\n| `Generate(\"remove-background\", imageUrl)` | Returns the url of a transparent cutout of the subject |\n| `Generate(\"replace-background\", imageUrl, prompt)` | Returns the url of the subject composed onto a described background |\n\nThe two `*-background` types write nothing themselves - apply the url they\nreturn with `Update(nodeId, {fill: {type: \"image\", url}})`.\n\n### Guidelines\n\n| Tool | Description |\n|------|-------------|\n| `read_skill` | Read the pen-dev skill (SKILL.md, pen-schema.md, execute.md, guides) |\n| `get_style` | Load styles for working with .pen files |\n\n## Examples\n\n### Create a Login Page\n\n```bash\npen --out login.pen --agent claude --prompt \"Create a modern login page with:\n- Email input field\n- Password input field\n- 'Sign In' button\n- 'Forgot password?' link\n- Social login options (Google, GitHub)\"\n```\n\n### Add Components to Existing Design\n\n```bash\npen --in dashboard.pen --out dashboard-v2.pen --agent gemini --prompt \"Add a sidebar navigation with:\n- Dashboard link (active)\n- Users link\n- Settings link\n- Logout button at bottom\"\n```\n\n### Create a Component Library\n\n```bash\npen --out components.pen --agent codex --prompt \"Create a component library with:\n- Primary, secondary, and ghost button variants\n- Text input with label and error state\n- Card component with header and content\n- Badge component in success, warning, error colors\"\n```\n\n### Using a Specific Model\n\nUse `--model` to select a different Claude model:\n\n```bash\n# Use Claude Opus for complex tasks requiring highest capability\npen --out complex-app.pen \\\n  --model claude-opus-4-6 \\\n  --prompt \"Create a complete e-commerce product page with image gallery,\nreviews section, related products, and add-to-cart functionality\"\n\n# Use Claude Haiku for simple, fast tasks\npen --out simple.pen \\\n  --model claude-haiku-4-5 \\\n  --prompt \"Create a simple 404 error page\"\n```\n\n### CI/CD Usage\n\n```bash\n# Authenticate with a CLI key\nexport PEN_CLI_KEY=pencil_cli_...\nexport PEN_AGENT_API_KEY=sk-...\n\n# Generate designs in a pipeline\npen --out onboarding.pen --prompt \"Create a 3-step onboarding flow\" --agent claude\n```\n\n### Verbose MCP Error Logging\n\nUse `--verbose-mcp` to show full MCP tool error details (including stack traces where available) in the CLI output when a tool fails:\n\n```bash\npen --out debug.pen \\\n  --agent claude \\\n  --prompt \"Create a simple layout\" \\\n  --verbose-mcp\n```\n\n### Batch Processing with Tasks File\n\nUse `--tasks` to process multiple designs from a JSON tasks file:\n\n```bash\npen --tasks batch-tasks.json --agent claude\n```\n\nExample `batch-tasks.json`:\n\n```json\n{\n  \"tasks\": [\n    {\n      \"out\": \"landing-page.pen\",\n      \"prompt\": \"Create a SaaS landing page with hero, features, and pricing sections\"\n    },\n    {\n      \"in\": \"existing-app.pen\",\n      \"out\": \"existing-app-v2.pen\",\n      \"prompt\": \"Add a dark mode toggle to the header\"\n    },\n    {\n      \"out\": \"mobile-menu.pen\",\n      \"model\": \"claude-haiku-4-5\",\n      \"prompt\": \"Create a mobile hamburger menu component\"\n    },\n    {\n      \"out\": \"from-reference.pen\",\n      \"prompt\": \"Match the layout and palette of the attached reference\",\n      \"promptFiles\": [\"./assets/reference.png\"]\n    }\n  ]\n}\n```\n\nEach task in the array supports the same options as CLI arguments:\n- `in` - Input file (optional)\n- `out` - Output file (required)\n- `prompt` - AI prompt (required)\n- `model` - Model override (optional)\n- `promptFiles` - Array of attachment paths (optional). Relative paths are resolved from the directory that contains the tasks JSON file.\n\n## Limitations\n\nThe CLI is designed for headless operation and has some limitations compared to the desktop app:\n\n- **No real-time preview** - Changes are saved to file, not displayed interactively\n- **No interactive UI features** - No selection, zoom, or pan controls\n- **No library browsing** - Cannot browse or import from `.pen` libraries\n\n## Token Storage\n\n| File | Purpose |\n|------|---------|\n| `~/.pencil/session-cli.json` | Stored session token from `pen login` |\n\nThe CLI uses a separate session file from the desktop app (`~/.pencil/session-desktop.json`) so the backend can distinguish which client is in use.\n\n## License\n\nProprietary — see LICENSE file. © High Agency, Inc.\n","readmeFilename":"README.md"}