{"_id":"@cantinasecurity/apex-cli","_rev":"29-501689b2775f30628bdebeab2934d300","name":"@cantinasecurity/apex-cli","dist-tags":{"latest":"0.1.34"},"versions":{"0.1.0":{"name":"@cantinasecurity/apex-cli","version":"0.1.0","_id":"@cantinasecurity/apex-cli@0.1.0","maintainers":[{"name":"p_misirov","email":"pablo@spearbit.com"},{"name":"ellahi","email":"ellahi@spearbit.com"}],"bin":{"apex":"pkg-bin/apex.js","apex-mcp":"pkg-bin/apex-mcp.js"},"dist":{"shasum":"02498333b54533542da719dd25b2e3577f2a22b1","tarball":"https://registry.npmjs.org/@cantinasecurity/apex-cli/-/apex-cli-0.1.0.tgz","fileCount":31,"integrity":"sha512-KqY9LUe8ztKgnsyszwTzTvEuE/WK5ZjOUGVsUALZgNUrdr2kHTTYzD6Bd7u2v8Zu6G8rw++cS2Lc/Mib8rFGDQ==","signatures":[{"sig":"MEYCIQDsuj3NJo32j1oYgXKhwAbQn033WIWRwqPBPQouWDZYOQIhAI/2Zdp819sI8NP0Ynx0pCKbTz9kxRYPwGd5eAsZvty1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":166847},"type":"module","_from":"file:cantinasecurity-apex-cli-0.1.0.tgz","engines":{"node":">=20"},"private":false,"scripts":{"mcp":"tsx src/mcp-main.ts","apex":"tsx src/apex.ts","test":"vitest run","build":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ellahi","email":"ellahi@spearbit.com"},"_resolved":"/tmp/624de30f2aaee5967f442d65eea30d02/cantinasecurity-apex-cli-0.1.0.tgz","_integrity":"sha512-KqY9LUe8ztKgnsyszwTzTvEuE/WK5ZjOUGVsUALZgNUrdr2kHTTYzD6Bd7u2v8Zu6G8rw++cS2Lc/Mib8rFGDQ==","_npmVersion":"10.9.7","description":"Standalone CLI and MCP server for Apex.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"tar":"^7.4.3","zod":"^4.3.6","ignore":"^7.0.5","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^2.1.9","typescript":"^5.9.3","@types/node":"^22.18.6"},"_npmOperationalInternal":{"tmp":"tmp/apex-cli_0.1.0_1776444463082_0.34453748764218406","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@cantinasecurity/apex-cli","version":"0.1.1","_id":"@cantinasecurity/apex-cli@0.1.1","maintainers":[{"name":"p_misirov","email":"pablo@spearbit.com"},{"name":"ellahi","email":"ellahi@spearbit.com"}],"bin":{"apex":"pkg-bin/apex.js","apex-mcp":"pkg-bin/apex-mcp.js"},"dist":{"shasum":"53d4b0568f567bafa9c8543be67801d83e289f24","tarball":"https://registry.npmjs.org/@cantinasecurity/apex-cli/-/apex-cli-0.1.1.tgz","fileCount":31,"integrity":"sha512-WmD4mw9qJT1ZLXHBChSvOXkwFwrcZIvaO/L1Kvz/DAT2MNygQZrF8O+shpKb3fu4N+LwAjlhBR6cqL/rf2dhWg==","signatures":[{"sig":"MEYCIQC8zcxVdq1JULMjfTJEFLVwmAoymtPWkichwnfuCeQLIAIhANHAlqingZv2v34X4g3S9zjpvYKwKaJ5/PRHSKcQOgzp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":169852},"type":"module","_from":"file:cantinasecurity-apex-cli-0.1.1.tgz","engines":{"node":">=20"},"private":false,"scripts":{"mcp":"tsx src/mcp-main.ts","apex":"tsx src/apex.ts","test":"vitest run","build":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ellahi","email":"ellahi@spearbit.com"},"_resolved":"/tmp/690c0e0cfcdffd50eb559c384ce1c53e/cantinasecurity-apex-cli-0.1.1.tgz","_integrity":"sha512-WmD4mw9qJT1ZLXHBChSvOXkwFwrcZIvaO/L1Kvz/DAT2MNygQZrF8O+shpKb3fu4N+LwAjlhBR6cqL/rf2dhWg==","_npmVersion":"10.9.7","description":"Standalone CLI and MCP server for Apex.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"tar":"^7.4.3","zod":"^4.3.6","ignore":"^7.0.5","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^2.1.9","typescript":"^5.9.3","@types/node":"^22.18.6"},"_npmOperationalInternal":{"tmp":"tmp/apex-cli_0.1.1_1777305791900_0.02074892700378883","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@cantinasecurity/apex-cli","version":"0.1.2","_id":"@cantinasecurity/apex-cli@0.1.2","maintainers":[{"name":"p_misirov","email":"pablo@spearbit.com"},{"name":"ellahi","email":"ellahi@spearbit.com"}],"bin":{"apex":"pkg-bin/apex.js","apex-mcp":"pkg-bin/apex-mcp.js"},"dist":{"shasum":"44b303ec536b03fb46b4f16998a54803d41e8b8a","tarball":"https://registry.npmjs.org/@cantinasecurity/apex-cli/-/apex-cli-0.1.2.tgz","fileCount":31,"integrity":"sha512-m778yMv2TcYd+LwhlnMNghcxkZ49fwLYSd9l5K4fpkOzNkQAJGi7Ema7aSZ/2lbvsTQ1Zh59YLsmRC7pk9AgrQ==","signatures":[{"sig":"MEQCIEUTavsqE4hME86yQY6y4z8b695+tyBa1EmmhvSmEvC3AiBiw/uTAljvbk1cVaFyX9C7c4gqlhLq+UoG1ZVGOGWBYg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":194508},"type":"module","_from":"file:cantinasecurity-apex-cli-0.1.2.tgz","engines":{"node":">=20"},"private":false,"scripts":{"mcp":"tsx src/mcp-main.ts","apex":"tsx src/apex.ts","test":"vitest run","build":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ellahi","email":"ellahi@spearbit.com"},"_resolved":"/tmp/a0c4f7db6be5c8a9df82169749b2fd84/cantinasecurity-apex-cli-0.1.2.tgz","_integrity":"sha512-m778yMv2TcYd+LwhlnMNghcxkZ49fwLYSd9l5K4fpkOzNkQAJGi7Ema7aSZ/2lbvsTQ1Zh59YLsmRC7pk9AgrQ==","_npmVersion":"10.9.7","description":"Standalone CLI and MCP server for Apex.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"tar":"^7.4.3","zod":"^4.3.6","ignore":"^7.0.5","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^2.1.9","typescript":"^5.9.3","@types/node":"^22.18.6"},"_npmOperationalInternal":{"tmp":"tmp/apex-cli_0.1.2_1777900401466_0.3205038437360179","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@cantinasecurity/apex-cli","version":"0.1.3","_id":"@cantinasecurity/apex-cli@0.1.3","maintainers":[{"name":"p_misirov","email":"pablo@spearbit.com"},{"name":"ellahi","email":"ellahi@spearbit.com"}],"bin":{"apex":"pkg-bin/apex.js","apex-mcp":"pkg-bin/apex-mcp.js"},"dist":{"shasum":"8a95bbae709fa1a4fd860cd4d5582abac37e839e","tarball":"https://registry.npmjs.org/@cantinasecurity/apex-cli/-/apex-cli-0.1.3.tgz","fileCount":31,"integrity":"sha512-O2secN7f0rfmts+mhJpcwAW7R65PMrQD45HYN8MBeqWmuZ0TMg+RW8tzTNeiA1dttyVkFqT+F5m0CUP5Hu4sog==","signatures":[{"sig":"MEYCIQCCLiRGhl2VIwvXvBxxl2s1231Ujt7xqafrp4lrvFFPdwIhAM39jilkNZ5NuoO5xVe3O9TKxH4USBCfjOedjVmUh7pk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":194543},"type":"module","_from":"file:cantinasecurity-apex-cli-0.1.3.tgz","engines":{"node":">=20"},"private":false,"scripts":{"mcp":"tsx src/mcp-main.ts","apex":"tsx src/apex.ts","test":"vitest run","build":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ellahi","email":"ellahi@spearbit.com"},"_resolved":"/tmp/649c1b95fd2dfcc87a19d9fd3cf217e1/cantinasecurity-apex-cli-0.1.3.tgz","_integrity":"sha512-O2secN7f0rfmts+mhJpcwAW7R65PMrQD45HYN8MBeqWmuZ0TMg+RW8tzTNeiA1dttyVkFqT+F5m0CUP5Hu4sog==","_npmVersion":"10.9.7","description":"Standalone CLI and MCP server for Apex.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"tar":"^7.4.3","zod":"^4.3.6","ignore":"^7.0.5","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^2.1.9","typescript":"^5.9.3","@types/node":"^22.18.6"},"_npmOperationalInternal":{"tmp":"tmp/apex-cli_0.1.3_1778505787152_0.38759135223097974","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@cantinasecurity/apex-cli","version":"0.1.4","_id":"@cantinasecurity/apex-cli@0.1.4","maintainers":[{"name":"p_misirov","email":"pablo@spearbit.com"},{"name":"ellahi","email":"ellahi@spearbit.com"}],"bin":{"apex":"pkg-bin/apex.js","apex-mcp":"pkg-bin/apex-mcp.js"},"dist":{"shasum":"02d53ef19c3d9b9c7aa8dffe8eda08c2b735b683","tarball":"https://registry.npmjs.org/@cantinasecurity/apex-cli/-/apex-cli-0.1.4.tgz","fileCount":31,"integrity":"sha512-MnQwpz4U6PJZQbbP7VX3CMyaehKYnlP5HI3Ms3NlH9gtSqN9XEx/dAwegWOibUHHOKmZDFPjcRHywKYZuKt/cA==","signatures":[{"sig":"MEUCIQC2VPESp6G8EYD575JAnHIEN57Txv/x/odPudA16cwd1gIgTIa6naawRymaRFeiD1CXbFSmVgUhOBKCP3cgKgEGV4E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":218186},"type":"module","_from":"file:cantinasecurity-apex-cli-0.1.4.tgz","engines":{"node":">=20"},"private":false,"scripts":{"mcp":"tsx src/mcp-main.ts","apex":"tsx src/apex.ts","test":"vitest run","build":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ellahi","email":"ellahi@spearbit.com"},"_resolved":"/tmp/64a2c29c565aed2ad50fa0b21640d313/cantinasecurity-apex-cli-0.1.4.tgz","_integrity":"sha512-MnQwpz4U6PJZQbbP7VX3CMyaehKYnlP5HI3Ms3NlH9gtSqN9XEx/dAwegWOibUHHOKmZDFPjcRHywKYZuKt/cA==","_npmVersion":"10.9.7","description":"Standalone CLI and MCP server for Apex.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"tar":"^7.4.3","zod":"^4.3.6","ignore":"^7.0.5","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^2.1.9","typescript":"^5.9.3","@types/node":"^22.18.6"},"_npmOperationalInternal":{"tmp":"tmp/apex-cli_0.1.4_1779110375395_0.31399021716307063","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@cantinasecurity/apex-cli","version":"0.1.5","_id":"@cantinasecurity/apex-cli@0.1.5","maintainers":[{"name":"p_misirov","email":"pablo@spearbit.com"},{"name":"ellahi","email":"ellahi@spearbit.com"}],"bin":{"apex":"pkg-bin/apex.js","apex-mcp":"pkg-bin/apex-mcp.js"},"dist":{"shasum":"0e9bee8a329042bab78980b03ea28e6ecfd16142","tarball":"https://registry.npmjs.org/@cantinasecurity/apex-cli/-/apex-cli-0.1.5.tgz","fileCount":31,"integrity":"sha512-Vqhf3G6h01mnBMN2tX42YXVWMM+80/tWX4H880ra7SWOQnQrDpO+mJBDyZhZf7EOGOWMCPEkoucCCXs7bnEbVA==","signatures":[{"sig":"MEQCICWg4M0Ll4aSJ37B+RolQdoJR25P73i+VMrp7e59Nd01AiBrUpfg5fCUlW5VMcWGGUOmgB1mKcnroHDAU6c/Rdm1Kw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":218938},"type":"module","_from":"file:cantinasecurity-apex-cli-0.1.5.tgz","engines":{"node":">=20"},"private":false,"scripts":{"mcp":"tsx src/mcp-main.ts","apex":"tsx src/apex.ts","test":"vitest run","build":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ellahi","email":"ellahi@spearbit.com"},"_resolved":"/tmp/ab267a76d6bec73727499e142b77fc7c/cantinasecurity-apex-cli-0.1.5.tgz","_integrity":"sha512-Vqhf3G6h01mnBMN2tX42YXVWMM+80/tWX4H880ra7SWOQnQrDpO+mJBDyZhZf7EOGOWMCPEkoucCCXs7bnEbVA==","_npmVersion":"10.9.7","description":"Standalone CLI and MCP server for Apex.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"tar":"^7.4.3","zod":"^4.3.6","ignore":"^7.0.5","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^2.1.9","typescript":"^5.9.3","@types/node":"^22.18.6"},"_npmOperationalInternal":{"tmp":"tmp/apex-cli_0.1.5_1779121320542_0.9191241657076501","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@cantinasecurity/apex-cli","version":"0.1.6","_id":"@cantinasecurity/apex-cli@0.1.6","maintainers":[{"name":"p_misirov","email":"pablo@spearbit.com"},{"name":"ellahi","email":"ellahi@spearbit.com"}],"bin":{"apex":"pkg-bin/apex.js","apex-mcp":"pkg-bin/apex-mcp.js"},"dist":{"shasum":"ecc987b1d6311c9b0c88b809c0e2551f2ac4fa4b","tarball":"https://registry.npmjs.org/@cantinasecurity/apex-cli/-/apex-cli-0.1.6.tgz","fileCount":37,"integrity":"sha512-OnKz6WBKpq4V6C6uuL5Tq7dCjkGHFYVqeKc6w3uRbOYgLMWlR7fEqLK2c7IVsvwxpmY+uqF4VR214lg3aFujOQ==","signatures":[{"sig":"MEUCIQDJQ6+MuBZ+0RJtUToJCItaunmj40PgaPrdAvRH4DBWigIgEca2wSbe5R9KTWy/bbbmq53jIm6GpnreQtExtEGdIiY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":226063},"type":"module","_from":"file:cantinasecurity-apex-cli-0.1.6.tgz","engines":{"node":">=20"},"private":false,"scripts":{"mcp":"tsx src/mcp-main.ts","apex":"tsx src/apex.ts","test":"vitest run","build":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ellahi","email":"ellahi@spearbit.com"},"_resolved":"/tmp/7d532ae1ca827f7994f9c04cf90229a6/cantinasecurity-apex-cli-0.1.6.tgz","_integrity":"sha512-OnKz6WBKpq4V6C6uuL5Tq7dCjkGHFYVqeKc6w3uRbOYgLMWlR7fEqLK2c7IVsvwxpmY+uqF4VR214lg3aFujOQ==","_npmVersion":"10.9.7","description":"Standalone CLI and MCP server for Apex.","directories":{},"_nodeVersion":"22.22.2","dependencies":{"tar":"^7.4.3","zod":"^4.3.6","ignore":"^7.0.5","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^2.1.9","typescript":"^5.9.3","@types/node":"^22.18.6"},"_npmOperationalInternal":{"tmp":"tmp/apex-cli_0.1.6_1779136258608_0.3893305971526795","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@cantinasecurity/apex-cli","version":"0.1.9","_id":"@cantinasecurity/apex-cli@0.1.9","maintainers":[{"name":"p_misirov","email":"pablo@spearbit.com"},{"name":"ellahi","email":"ellahi@spearbit.com"}],"bin":{"apex":"pkg-bin/apex.js","apex-mcp":"pkg-bin/apex-mcp.js"},"dist":{"shasum":"2e7554167bf89b5f1d963e1119e271c89fb17fb5","tarball":"https://registry.npmjs.org/@cantinasecurity/apex-cli/-/apex-cli-0.1.9.tgz","fileCount":37,"integrity":"sha512-2tXB+7UR2eM/2a4qeSwlPlsh4DS83HHitYSGNmRd08/FS3bSTvaiUkF/pxgTWPLDniasveP4SDmmNTlBxSGEBw==","signatures":[{"sig":"MEUCIQCW1IOmyXsmgeBlmT4mmGzyIBKGmlXNAS7fYq7HgtTZkAIgCVAG8Y7dxuJHuj+zklrbIRJ9Xs1E1LxolkwKdtVPm2Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":231098},"type":"module","_from":"file:cantinasecurity-apex-cli-0.1.9.tgz","engines":{"node":">=20"},"private":false,"scripts":{"mcp":"tsx src/mcp-main.ts","apex":"tsx src/apex.ts","test":"vitest run","build":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ellahi","email":"ellahi@spearbit.com"},"_resolved":"/tmp/a1eab9945780a271455480a2913eedee/cantinasecurity-apex-cli-0.1.9.tgz","_integrity":"sha512-2tXB+7UR2eM/2a4qeSwlPlsh4DS83HHitYSGNmRd08/FS3bSTvaiUkF/pxgTWPLDniasveP4SDmmNTlBxSGEBw==","_npmVersion":"10.9.8","description":"Standalone CLI and MCP server for Apex.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"tar":"^7.4.3","zod":"^4.3.6","ignore":"^7.0.5","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^2.1.9","typescript":"^5.9.3","@types/node":"^22.18.6"},"_npmOperationalInternal":{"tmp":"tmp/apex-cli_0.1.9_1780348173832_0.9318201674855731","host":"s3://npm-registry-packages-npm-production"}},"0.1.10":{"name":"@cantinasecurity/apex-cli","version":"0.1.10","_id":"@cantinasecurity/apex-cli@0.1.10","maintainers":[{"name":"p_misirov","email":"pablo@spearbit.com"},{"name":"ellahi","email":"ellahi@spearbit.com"}],"bin":{"apex":"pkg-bin/apex.js","apex-mcp":"pkg-bin/apex-mcp.js"},"dist":{"shasum":"2ca07b12733eca30a95da8bd3a36d01002fb1331","tarball":"https://registry.npmjs.org/@cantinasecurity/apex-cli/-/apex-cli-0.1.10.tgz","fileCount":37,"integrity":"sha512-W8IZ6318vDGjUY+96hE4nVXLtWnUAc5V4AvW8U1Rm5XGddO2XPUt9rAn+l2Qk4Lrzvfk8oU6OR8KGWUDvMg13A==","signatures":[{"sig":"MEYCIQDaRuV7dHxTBmXOofypjWZ5Jbp9H82XLQUlF5srl9YwSgIhAM1FCXyJDop+MG04wm6624Kxl/vVMxB0lb/CAIT3kPe4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":235351},"type":"module","_from":"file:cantinasecurity-apex-cli-0.1.10.tgz","engines":{"node":">=20"},"private":false,"scripts":{"mcp":"tsx src/mcp-main.ts","apex":"tsx src/apex.ts","test":"vitest run","build":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ellahi","email":"ellahi@spearbit.com"},"_resolved":"/tmp/68e73e5b100c77f8721ecbda76fcf039/cantinasecurity-apex-cli-0.1.10.tgz","_integrity":"sha512-W8IZ6318vDGjUY+96hE4nVXLtWnUAc5V4AvW8U1Rm5XGddO2XPUt9rAn+l2Qk4Lrzvfk8oU6OR8KGWUDvMg13A==","_npmVersion":"10.9.8","description":"Standalone CLI and MCP server for Apex.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"tar":"^7.4.3","zod":"^4.3.6","ignore":"^7.0.5","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^2.1.9","typescript":"^5.9.3","@types/node":"^22.18.6"},"_npmOperationalInternal":{"tmp":"tmp/apex-cli_0.1.10_1780501179169_0.5089682173583121","host":"s3://npm-registry-packages-npm-production"}},"0.1.11":{"name":"@cantinasecurity/apex-cli","version":"0.1.11","_id":"@cantinasecurity/apex-cli@0.1.11","maintainers":[{"name":"p_misirov","email":"pablo@spearbit.com"},{"name":"ellahi","email":"ellahi@spearbit.com"}],"bin":{"apex":"pkg-bin/apex.js","apex-mcp":"pkg-bin/apex-mcp.js"},"dist":{"shasum":"ef870b469dcfb939307dee10075c4627c2f25455","tarball":"https://registry.npmjs.org/@cantinasecurity/apex-cli/-/apex-cli-0.1.11.tgz","fileCount":38,"integrity":"sha512-SH3K5rSwsA/4nQ4N99wZUndR8/7q+seKN+NXLOk/NN/PqXLMpxCSPI5zkRVcnqMEo2JMIQGTJgwpUgc/EilV/g==","signatures":[{"sig":"MEUCIFTlXUtfVUSfAlXBmRUcmVC1PozOHzWUv1p8E7gcix0pAiEAlTbpgYbG8dGx9Jq7mytv6ZPzMuX6Ydvs2ydhcT6FjOc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":272030},"type":"module","_from":"file:cantinasecurity-apex-cli-0.1.11.tgz","engines":{"node":">=20"},"private":false,"scripts":{"mcp":"tsx src/mcp-main.ts","apex":"tsx src/apex.ts","test":"vitest run","build":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ellahi","email":"ellahi@spearbit.com"},"_resolved":"/tmp/7fb3a68e4c6dee8db20dcf9986846938/cantinasecurity-apex-cli-0.1.11.tgz","_integrity":"sha512-SH3K5rSwsA/4nQ4N99wZUndR8/7q+seKN+NXLOk/NN/PqXLMpxCSPI5zkRVcnqMEo2JMIQGTJgwpUgc/EilV/g==","_npmVersion":"10.9.8","description":"Standalone CLI and MCP server for Apex.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"tar":"^7.4.3","zod":"^4.3.6","ignore":"^7.0.5","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^2.1.9","typescript":"^5.9.3","@types/node":"^22.18.6"},"_npmOperationalInternal":{"tmp":"tmp/apex-cli_0.1.11_1780838618247_0.5845405245499382","host":"s3://npm-registry-packages-npm-production"}},"0.1.12":{"name":"@cantinasecurity/apex-cli","version":"0.1.12","_id":"@cantinasecurity/apex-cli@0.1.12","maintainers":[{"name":"p_misirov","email":"pablo@spearbit.com"},{"name":"ellahi","email":"ellahi@spearbit.com"}],"bin":{"apex":"pkg-bin/apex.js","apex-mcp":"pkg-bin/apex-mcp.js"},"dist":{"shasum":"e36a74f3482e7557236c4b11b04682e768a805b3","tarball":"https://registry.npmjs.org/@cantinasecurity/apex-cli/-/apex-cli-0.1.12.tgz","fileCount":38,"integrity":"sha512-Jc3n3KMbRn3ze6Rk6/XDovJoDi9IvGMGKVb13hdIHWmtbHFoP1qHIlKMBN8AE/t78Lf0smqS0bd56kExw2papw==","signatures":[{"sig":"MEUCIQCEpxv59BZeYSD1KjmuWF8NYfDaqJlIi4qp5LMARqa3IwIgd/mV3W6lrHPuFnywhVrQNtjAbPaDBzdG5PBrob5OXRw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":272102},"type":"module","_from":"file:cantinasecurity-apex-cli-0.1.12.tgz","engines":{"node":">=20"},"private":false,"scripts":{"mcp":"tsx src/mcp-main.ts","apex":"tsx src/apex.ts","test":"vitest run","build":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ellahi","email":"ellahi@spearbit.com"},"_resolved":"/tmp/a637a4d041f724d994ff2762a18f614b/cantinasecurity-apex-cli-0.1.12.tgz","_integrity":"sha512-Jc3n3KMbRn3ze6Rk6/XDovJoDi9IvGMGKVb13hdIHWmtbHFoP1qHIlKMBN8AE/t78Lf0smqS0bd56kExw2papw==","_npmVersion":"10.9.8","description":"Standalone CLI and MCP server for Apex.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"tar":"^7.4.3","zod":"^4.3.6","ignore":"^7.0.5","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^2.1.9","typescript":"^5.9.3","@types/node":"^22.18.6"},"_npmOperationalInternal":{"tmp":"tmp/apex-cli_0.1.12_1781035272529_0.6399299586398137","host":"s3://npm-registry-packages-npm-production"}},"0.1.13":{"name":"@cantinasecurity/apex-cli","version":"0.1.13","_id":"@cantinasecurity/apex-cli@0.1.13","maintainers":[{"name":"p_misirov","email":"pablo@spearbit.com"},{"name":"ellahi","email":"ellahi@spearbit.com"}],"bin":{"apex":"pkg-bin/apex.js","apex-mcp":"pkg-bin/apex-mcp.js"},"dist":{"shasum":"880c85beb2f5a546a2bcfe2517924e8431f9ed8d","tarball":"https://registry.npmjs.org/@cantinasecurity/apex-cli/-/apex-cli-0.1.13.tgz","fileCount":38,"integrity":"sha512-UQWc0XN234076Cr1CAmevZhHAzfVQdPjwmD6/7ga6ub065sqpkEQOomttfwrEjTh9Bta0NjPY6hyG0V55w2JJg==","signatures":[{"sig":"MEQCIHAX6WktTAx68yxZW3F349rSkdsDM6jFRqbtAvYb0vwvAiALL3+CR6kEn7iwjUEnDQB0ybJY4I8pGJDHu6FearZ8QQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":275661},"type":"module","_from":"file:cantinasecurity-apex-cli-0.1.13.tgz","engines":{"node":">=20"},"private":false,"scripts":{"mcp":"tsx src/mcp-main.ts","apex":"tsx src/apex.ts","test":"vitest run","build":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ellahi","email":"ellahi@spearbit.com"},"_resolved":"/tmp/27359dc8b4e5c55bf65d4224358e9103/cantinasecurity-apex-cli-0.1.13.tgz","_integrity":"sha512-UQWc0XN234076Cr1CAmevZhHAzfVQdPjwmD6/7ga6ub065sqpkEQOomttfwrEjTh9Bta0NjPY6hyG0V55w2JJg==","_npmVersion":"10.9.8","description":"Standalone CLI and MCP server for Apex.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"tar":"^7.4.3","zod":"^4.3.6","ignore":"^7.0.5","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^2.1.9","typescript":"^5.9.3","@types/node":"^22.18.6"},"_npmOperationalInternal":{"tmp":"tmp/apex-cli_0.1.13_1782134781558_0.5582291077011785","host":"s3://npm-registry-packages-npm-production"}},"0.1.14":{"name":"@cantinasecurity/apex-cli","version":"0.1.14","_id":"@cantinasecurity/apex-cli@0.1.14","maintainers":[{"name":"p_misirov","email":"pablo@spearbit.com"},{"name":"ellahi","email":"ellahi@spearbit.com"}],"bin":{"apex":"pkg-bin/apex.js","apex-mcp":"pkg-bin/apex-mcp.js"},"dist":{"shasum":"fa1b23a909b348f19b8e53f2ec12a78f7d7535f9","tarball":"https://registry.npmjs.org/@cantinasecurity/apex-cli/-/apex-cli-0.1.14.tgz","fileCount":38,"integrity":"sha512-uCp74vhouVvVvOcP73xZXpQDCybK/E56EVNh6ViivY3OnNIJedbR86UuGFn53+NpAOfLaL2L7aF0HwnRusAYZg==","signatures":[{"sig":"MEQCIGzgGWX3Bz1qodsPZDT9Gb+usTi5EaN7/aIl6tAR/X+/AiAhyQWpLjHAfLg6kKU+cD/xPoSiyW/BcE9yGa2G/3wZ3Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":276280},"type":"module","_from":"file:cantinasecurity-apex-cli-0.1.14.tgz","engines":{"node":">=20"},"private":false,"scripts":{"mcp":"tsx src/mcp-main.ts","apex":"tsx src/apex.ts","test":"vitest run","build":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ellahi","email":"ellahi@spearbit.com"},"_resolved":"/tmp/e66464684911830aa7d71ee15f336740/cantinasecurity-apex-cli-0.1.14.tgz","_integrity":"sha512-uCp74vhouVvVvOcP73xZXpQDCybK/E56EVNh6ViivY3OnNIJedbR86UuGFn53+NpAOfLaL2L7aF0HwnRusAYZg==","_npmVersion":"10.9.8","description":"Standalone CLI and MCP server for Apex.","directories":{},"_nodeVersion":"22.23.0","dependencies":{"tar":"^7.4.3","zod":"^4.3.6","ignore":"^7.0.5","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^2.1.9","typescript":"^5.9.3","@types/node":"^22.18.6"},"_npmOperationalInternal":{"tmp":"tmp/apex-cli_0.1.14_1782738835603_0.7346893473102922","host":"s3://npm-registry-packages-npm-production"}},"0.1.15":{"name":"@cantinasecurity/apex-cli","version":"0.1.15","_id":"@cantinasecurity/apex-cli@0.1.15","maintainers":[{"name":"p_misirov","email":"pablo@spearbit.com"},{"name":"ellahi","email":"ellahi@spearbit.com"}],"bin":{"apex":"pkg-bin/apex.js","apex-mcp":"pkg-bin/apex-mcp.js"},"dist":{"shasum":"aa551307b99fd2ff7c79150e7bdd60574d25eb84","tarball":"https://registry.npmjs.org/@cantinasecurity/apex-cli/-/apex-cli-0.1.15.tgz","fileCount":39,"integrity":"sha512-mfeP4iWWJf+mscY63SOhb4Ew+nMB5boGd0tBaXK/XofotCIyH0lI5n4pavxx8zazWQTcf8Qw6PsEjEWY4gd1vA==","signatures":[{"sig":"MEQCIFi8EehYoKgOaIqb+4D3QCIlG1Oy7K+xKilE9iruiS4IAiBG6QWnawqn9mnuRXq3z5R+XyXEWj8NpDPhknokFHhNcw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":298112},"type":"module","_from":"file:cantinasecurity-apex-cli-0.1.15.tgz","engines":{"node":">=20"},"private":false,"scripts":{"mcp":"tsx src/mcp-main.ts","apex":"tsx src/apex.ts","test":"vitest run","build":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ellahi","email":"ellahi@spearbit.com"},"_resolved":"/tmp/8f05346f7d0e09d8adf2184c8592b61f/cantinasecurity-apex-cli-0.1.15.tgz","_integrity":"sha512-mfeP4iWWJf+mscY63SOhb4Ew+nMB5boGd0tBaXK/XofotCIyH0lI5n4pavxx8zazWQTcf8Qw6PsEjEWY4gd1vA==","_npmVersion":"10.9.8","description":"Standalone CLI and MCP server for Apex.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"tar":"^7.4.3","zod":"^4.3.6","ignore":"^7.0.5","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^2.1.9","typescript":"^5.9.3","@types/node":"^22.18.6"},"_npmOperationalInternal":{"tmp":"tmp/apex-cli_0.1.15_1783636292188_0.6206236882977236","host":"s3://npm-registry-packages-npm-production"}},"0.1.16":{"name":"@cantinasecurity/apex-cli","version":"0.1.16","_id":"@cantinasecurity/apex-cli@0.1.16","maintainers":[{"name":"p_misirov","email":"pablo@spearbit.com"},{"name":"ellahi","email":"ellahi@spearbit.com"}],"bin":{"apex":"pkg-bin/apex.js","apex-mcp":"pkg-bin/apex-mcp.js"},"dist":{"shasum":"dc925906d9de49810f04a3db185d8b2d4e18679a","tarball":"https://registry.npmjs.org/@cantinasecurity/apex-cli/-/apex-cli-0.1.16.tgz","fileCount":39,"integrity":"sha512-k/u9kMv4mvrayCtP9aElAP98FFppcmeNudndl/9qsw5ZAW/eVrqrAtheb0dwTyR/rdn42Tz7fj8svPafc3bWiA==","signatures":[{"sig":"MEQCIFHo9o95eeSDYSk8A6uyoGzpVss+Cc1D23+YKn3iYfZ6AiAxYZztnJI6EweleitJDF0if2k83UTRVMgzWbmF6l8pMA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":299480},"type":"module","_from":"file:cantinasecurity-apex-cli-0.1.16.tgz","engines":{"node":">=20"},"private":false,"scripts":{"mcp":"tsx src/mcp-main.ts","apex":"tsx src/apex.ts","test":"vitest run","build":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ellahi","email":"ellahi@spearbit.com"},"_resolved":"/tmp/89ba83ce75d6dd66ddd427593b6f3f28/cantinasecurity-apex-cli-0.1.16.tgz","_integrity":"sha512-k/u9kMv4mvrayCtP9aElAP98FFppcmeNudndl/9qsw5ZAW/eVrqrAtheb0dwTyR/rdn42Tz7fj8svPafc3bWiA==","_npmVersion":"10.9.8","description":"Standalone CLI and MCP server for Apex.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"tar":"^7.4.3","zod":"^4.3.6","ignore":"^7.0.5","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^2.1.9","typescript":"^5.9.3","@types/node":"^22.18.6"},"_npmOperationalInternal":{"tmp":"tmp/apex-cli_0.1.16_1783718249827_0.3739316098965628","host":"s3://npm-registry-packages-npm-production"}},"0.1.17":{"name":"@cantinasecurity/apex-cli","version":"0.1.17","_id":"@cantinasecurity/apex-cli@0.1.17","maintainers":[{"name":"p_misirov","email":"pablo@spearbit.com"},{"name":"ellahi","email":"ellahi@spearbit.com"}],"bin":{"apex":"pkg-bin/apex.js","apex-mcp":"pkg-bin/apex-mcp.js"},"dist":{"shasum":"51ecaadee251f27286105c014bfa512d430de6fe","tarball":"https://registry.npmjs.org/@cantinasecurity/apex-cli/-/apex-cli-0.1.17.tgz","fileCount":39,"integrity":"sha512-+vHerF3NbjtBPXSNPKdMJr4GpmZ44ymfv52lFf6tgyhGJZtPBiMH4u+InCvI843Bpu5tVaQAdQp0vcEXi2nTSQ==","signatures":[{"sig":"MEQCID3P4MoA+yAq6iE4FHRxvah2M3Oe2Tmr6KTwlmTKe39qAiA2S58IpRshuNir+QEYmTrox7Nff4tZ069XHH3QBabaDQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":302326},"type":"module","_from":"file:cantinasecurity-apex-cli-0.1.17.tgz","engines":{"node":">=20"},"private":false,"scripts":{"mcp":"tsx src/mcp-main.ts","apex":"tsx src/apex.ts","test":"vitest run","build":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ellahi","email":"ellahi@spearbit.com"},"_resolved":"/tmp/7e4099d0fa5efaecf87f4fca7ad68e70/cantinasecurity-apex-cli-0.1.17.tgz","_integrity":"sha512-+vHerF3NbjtBPXSNPKdMJr4GpmZ44ymfv52lFf6tgyhGJZtPBiMH4u+InCvI843Bpu5tVaQAdQp0vcEXi2nTSQ==","_npmVersion":"10.9.8","description":"Standalone CLI and MCP server for Apex.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"tar":"^7.4.3","zod":"^4.3.6","ignore":"^7.0.5","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^2.1.9","typescript":"^5.9.3","@types/node":"^22.18.6"},"_npmOperationalInternal":{"tmp":"tmp/apex-cli_0.1.17_1783949176155_0.7081371748024234","host":"s3://npm-registry-packages-npm-production"}},"0.1.18":{"name":"@cantinasecurity/apex-cli","version":"0.1.18","_id":"@cantinasecurity/apex-cli@0.1.18","maintainers":[{"name":"p_misirov","email":"pablo@spearbit.com"},{"name":"ellahi","email":"ellahi@spearbit.com"}],"bin":{"apex":"pkg-bin/apex.js","apex-mcp":"pkg-bin/apex-mcp.js"},"dist":{"shasum":"3a6134da884d32ef41ea7b799a88c9f18fec231c","tarball":"https://registry.npmjs.org/@cantinasecurity/apex-cli/-/apex-cli-0.1.18.tgz","fileCount":42,"integrity":"sha512-Q9SxQ4h/GgqfjB8Fh5tox56bksAlx7A+gJL5gl6rj/t2e1j/CajudBFb01YTE58LqYnOgGXNAn0VFjDNTLRYwA==","signatures":[{"sig":"MEYCIQDaWOKIByqRHVi+QNbwAqvyboT5t3QG/HxBxDBZCr18eAIhANpFHoyXHf2zn11WlwZLzkng8oBfX+St9FE+oTgqo8Zm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":419126},"type":"module","_from":"file:cantinasecurity-apex-cli-0.1.18.tgz","engines":{"node":">=20"},"private":false,"scripts":{"mcp":"tsx src/mcp-main.ts","apex":"tsx src/apex.ts","test":"vitest run","build":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ellahi","email":"ellahi@spearbit.com"},"_resolved":"/tmp/f4afe8075c13176d48d9102debee377c/cantinasecurity-apex-cli-0.1.18.tgz","_integrity":"sha512-Q9SxQ4h/GgqfjB8Fh5tox56bksAlx7A+gJL5gl6rj/t2e1j/CajudBFb01YTE58LqYnOgGXNAn0VFjDNTLRYwA==","_npmVersion":"10.9.8","description":"Standalone CLI and MCP server for Apex.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"tar":"^7.4.3","zod":"^4.3.6","ignore":"^7.0.5","proper-lockfile":"^4.1.2","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^2.1.9","typescript":"^5.9.3","@types/node":"^22.18.6","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/apex-cli_0.1.18_1784582557800_0.3198470168514411","host":"s3://npm-registry-packages-npm-production"}},"0.1.19":{"name":"@cantinasecurity/apex-cli","version":"0.1.19","_id":"@cantinasecurity/apex-cli@0.1.19","maintainers":[{"name":"p_misirov","email":"pablo@spearbit.com"},{"name":"ellahi","email":"ellahi@spearbit.com"}],"bin":{"apex":"pkg-bin/apex.js","apex-mcp":"pkg-bin/apex-mcp.js"},"dist":{"shasum":"e010d4021438c14c319977bc2c457ca845e3f2c9","tarball":"https://registry.npmjs.org/@cantinasecurity/apex-cli/-/apex-cli-0.1.19.tgz","fileCount":42,"integrity":"sha512-2qE5Le4//aOkELUHAcDimjJt8oczLBu6hQ2Wa0BVF3nOlPR9Q/qNbE8A1wRO6OWMo2sGD/owgkoMi6I2jdlApw==","signatures":[{"sig":"MEUCIQCz9WBEWPbWm6VJlJWXOdvSE7Jwoycvny7DI32F5/rW1QIgf6Jbdevh7/GORBQ+TZ0Qpbn8PFrW4gNXmgMGk6BMUEs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":419349},"type":"module","_from":"file:cantinasecurity-apex-cli-0.1.19.tgz","engines":{"node":">=20"},"private":false,"scripts":{"mcp":"tsx src/mcp-main.ts","apex":"tsx src/apex.ts","test":"vitest run","build":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ellahi","email":"ellahi@spearbit.com"},"_resolved":"/tmp/e0dc3c88876b9986db677123a5d6a131/cantinasecurity-apex-cli-0.1.19.tgz","_integrity":"sha512-2qE5Le4//aOkELUHAcDimjJt8oczLBu6hQ2Wa0BVF3nOlPR9Q/qNbE8A1wRO6OWMo2sGD/owgkoMi6I2jdlApw==","_npmVersion":"10.9.8","description":"Standalone CLI and MCP server for Apex.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"tar":"^7.4.3","zod":"^4.3.6","ignore":"^7.0.5","proper-lockfile":"^4.1.2","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^2.1.9","typescript":"^5.9.3","@types/node":"^22.18.6","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/apex-cli_0.1.19_1784753203880_0.15421354771774198","host":"s3://npm-registry-packages-npm-production"}},"0.1.20":{"name":"@cantinasecurity/apex-cli","version":"0.1.20","_id":"@cantinasecurity/apex-cli@0.1.20","maintainers":[{"name":"p_misirov","email":"pablo@spearbit.com"},{"name":"ellahi","email":"ellahi@spearbit.com"}],"bin":{"apex":"pkg-bin/apex.js","apex-mcp":"pkg-bin/apex-mcp.js"},"dist":{"shasum":"5f7593b1532e1ffdce2b2e82c15952cf4e250f86","tarball":"https://registry.npmjs.org/@cantinasecurity/apex-cli/-/apex-cli-0.1.20.tgz","fileCount":42,"integrity":"sha512-eyGi6RdtjBL+sqgVV+K60XXVhEGzy5HEx8qya1gKTn0/XM6oHkIpRc5VLBEHBv/5qPUwrAv5uaZRdcxIBtP96Q==","signatures":[{"sig":"MEUCIQDqnrTGqTOZ97huS4nS46flGopBdKLeu67iWiXal3+S1QIgdvgmuFDEzmUNIjQwHAoU6isjtlYbLdEGlEZsTygo+0U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":426434},"type":"module","_from":"file:cantinasecurity-apex-cli-0.1.20.tgz","engines":{"node":">=20"},"private":false,"scripts":{"mcp":"tsx src/mcp-main.ts","apex":"tsx src/apex.ts","test":"vitest run","build":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ellahi","email":"ellahi@spearbit.com"},"_resolved":"/tmp/6e4ba87ff3b76a4784c89de804ee5f36/cantinasecurity-apex-cli-0.1.20.tgz","_integrity":"sha512-eyGi6RdtjBL+sqgVV+K60XXVhEGzy5HEx8qya1gKTn0/XM6oHkIpRc5VLBEHBv/5qPUwrAv5uaZRdcxIBtP96Q==","_npmVersion":"10.9.8","description":"Standalone CLI and MCP server for Apex.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"tar":"^7.4.3","zod":"^4.3.6","ignore":"^7.0.5","proper-lockfile":"^4.1.2","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^2.1.9","typescript":"^5.9.3","@types/node":"^22.18.6","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/apex-cli_0.1.20_1784839983908_0.7915051388679262","host":"s3://npm-registry-packages-npm-production"}},"0.1.21":{"name":"@cantinasecurity/apex-cli","version":"0.1.21","_id":"@cantinasecurity/apex-cli@0.1.21","maintainers":[{"name":"p_misirov","email":"pablo@spearbit.com"},{"name":"ellahi","email":"ellahi@spearbit.com"}],"bin":{"apex":"pkg-bin/apex.js","apex-mcp":"pkg-bin/apex-mcp.js"},"dist":{"shasum":"7e5e72466245d03b13e6aafedb234f8eb8fa5367","tarball":"https://registry.npmjs.org/@cantinasecurity/apex-cli/-/apex-cli-0.1.21.tgz","fileCount":42,"integrity":"sha512-FUvx50bTayw83A/luNzRdahZReOyyXPizfv6Hjn5CQUdDmhEZnWetiwL82iM8YKDtNcdj04hWdGcHD3Xt8ZnoA==","signatures":[{"sig":"MEUCIGlylL3jXvr6Q75c4BZ1PAcGQbHX8lM9pdKLryGXJoxIAiEA5A5crViA3NlLmYjub3//l0yfHvKDusZ9gmLDDdRGyJM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":427164},"type":"module","_from":"file:cantinasecurity-apex-cli-0.1.21.tgz","engines":{"node":">=20"},"private":false,"scripts":{"mcp":"tsx src/mcp-main.ts","apex":"tsx src/apex.ts","test":"vitest run","build":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ellahi","email":"ellahi@spearbit.com"},"_resolved":"/tmp/2d2aac6025b3167ebbde439103dc69d2/cantinasecurity-apex-cli-0.1.21.tgz","_integrity":"sha512-FUvx50bTayw83A/luNzRdahZReOyyXPizfv6Hjn5CQUdDmhEZnWetiwL82iM8YKDtNcdj04hWdGcHD3Xt8ZnoA==","_npmVersion":"10.9.8","description":"Standalone CLI and MCP server for Apex.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"tar":"^7.4.3","zod":"^4.3.6","ignore":"^7.0.5","proper-lockfile":"^4.1.2","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^2.1.9","typescript":"^5.9.3","@types/node":"^22.18.6","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/apex-cli_0.1.21_1785160518153_0.3731728713516833","host":"s3://npm-registry-packages-npm-production"}},"0.1.22":{"name":"@cantinasecurity/apex-cli","version":"0.1.22","_id":"@cantinasecurity/apex-cli@0.1.22","maintainers":[{"name":"p_misirov","email":"pablo@spearbit.com"},{"name":"ellahi","email":"ellahi@spearbit.com"}],"bin":{"apex":"pkg-bin/apex.js","apex-mcp":"pkg-bin/apex-mcp.js"},"dist":{"shasum":"a2740c53b1b828553af4fe7e9cbce244596cbf7d","tarball":"https://registry.npmjs.org/@cantinasecurity/apex-cli/-/apex-cli-0.1.22.tgz","fileCount":42,"integrity":"sha512-jfeemq1/X7gbLxgXyroc3QUbONMgKfZSXlnJQFD6rfNQzcYqKQ2kf7IGP6KRtYBkw93v1cUkTE3SwB3z+94pCg==","signatures":[{"sig":"MEUCIQDwOuTMahhXkGDYVIs8RbxJ9/e8AlSYnlqeb8WZJF/1UwIgZIxph/Yj4JUUqxP/R8edfyJcBiPwN7PJlWWMXgf+Swo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":428117},"type":"module","_from":"file:cantinasecurity-apex-cli-0.1.22.tgz","engines":{"node":">=20"},"private":false,"scripts":{"mcp":"tsx src/mcp-main.ts","apex":"tsx src/apex.ts","test":"vitest run","build":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ellahi","email":"ellahi@spearbit.com"},"_resolved":"/tmp/0868f97bb8a2a110c9069824f8c77ff1/cantinasecurity-apex-cli-0.1.22.tgz","_integrity":"sha512-jfeemq1/X7gbLxgXyroc3QUbONMgKfZSXlnJQFD6rfNQzcYqKQ2kf7IGP6KRtYBkw93v1cUkTE3SwB3z+94pCg==","_npmVersion":"10.9.8","description":"Standalone CLI and MCP server for Apex.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"tar":"^7.4.3","zod":"^4.3.6","ignore":"^7.0.5","proper-lockfile":"^4.1.2","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^2.1.9","typescript":"^5.9.3","@types/node":"^22.18.6","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/apex-cli_0.1.22_1785355180806_0.7984349221186828","host":"s3://npm-registry-packages-npm-production"}},"0.1.23":{"name":"@cantinasecurity/apex-cli","version":"0.1.23","_id":"@cantinasecurity/apex-cli@0.1.23","maintainers":[{"name":"p_misirov","email":"pablo@spearbit.com"},{"name":"ellahi","email":"ellahi@spearbit.com"}],"bin":{"apex":"pkg-bin/apex.js","apex-mcp":"pkg-bin/apex-mcp.js"},"dist":{"shasum":"11a8fec8e4c1e36a7e22de5576fc09ee1f563a3c","tarball":"https://registry.npmjs.org/@cantinasecurity/apex-cli/-/apex-cli-0.1.23.tgz","fileCount":42,"integrity":"sha512-IkraV6YSWngZQUvVLL1OpQl5EbOp1eX+fsl3pf4byRBM5Ce+VD5x+N6uQUG7arMKYerSF+VJK7+OVWbf0fLM7A==","signatures":[{"sig":"MEUCIGOdjGOpOMTlkxy5xBcllpLx1fipunlZtgytfWMdyotFAiEAgjZ939u3kVZmG/ORCtBIGJqXzDoC5v1AmHSx09K2aUA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":436978},"type":"module","_from":"file:cantinasecurity-apex-cli-0.1.23.tgz","engines":{"node":">=20"},"private":false,"scripts":{"mcp":"tsx src/mcp-main.ts","apex":"tsx src/apex.ts","test":"vitest run","build":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ellahi","email":"ellahi@spearbit.com"},"_resolved":"/tmp/404da39e2bf28b61a5156d0d2d55cb9e/cantinasecurity-apex-cli-0.1.23.tgz","_integrity":"sha512-IkraV6YSWngZQUvVLL1OpQl5EbOp1eX+fsl3pf4byRBM5Ce+VD5x+N6uQUG7arMKYerSF+VJK7+OVWbf0fLM7A==","_npmVersion":"10.9.8","description":"Standalone CLI and MCP server for Apex.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"tar":"^7.4.3","zod":"^4.3.6","ignore":"^7.0.5","proper-lockfile":"^4.1.2","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^2.1.9","typescript":"^5.9.3","@types/node":"^22.18.6","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/apex-cli_0.1.23_1785361761661_0.10363543673035336","host":"s3://npm-registry-packages-npm-production"}},"0.1.24":{"name":"@cantinasecurity/apex-cli","version":"0.1.24","_id":"@cantinasecurity/apex-cli@0.1.24","maintainers":[{"name":"p_misirov","email":"pablo@spearbit.com"},{"name":"ellahi","email":"ellahi@spearbit.com"}],"bin":{"apex":"pkg-bin/apex.js","apex-mcp":"pkg-bin/apex-mcp.js"},"dist":{"shasum":"c6a4ecd7521182a8f949a2f6c89cb87eed7d0462","tarball":"https://registry.npmjs.org/@cantinasecurity/apex-cli/-/apex-cli-0.1.24.tgz","fileCount":42,"integrity":"sha512-w/+4g36KfD7HgxkhbXbB7YrYR7kDAjpY5InYucHN0ivTeoNAcg4896OzBveNpmNfEUTyJRstDrsuVdIaMZAS3A==","signatures":[{"sig":"MEUCIDw+IICSYzThZU94/ceRuq70ipVOTpgaWHYNcwwRXhFLAiEA/dxlE9oUi2+CT9wYHMDnKwKbBn25DSGAlwzvNJXo4HU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":438035},"type":"module","_from":"file:cantinasecurity-apex-cli-0.1.24.tgz","engines":{"node":">=20"},"private":false,"scripts":{"mcp":"tsx src/mcp-main.ts","apex":"tsx src/apex.ts","test":"vitest run","build":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ellahi","email":"ellahi@spearbit.com"},"_resolved":"/tmp/a2391fe4a7db18124a380c0a5999d620/cantinasecurity-apex-cli-0.1.24.tgz","_integrity":"sha512-w/+4g36KfD7HgxkhbXbB7YrYR7kDAjpY5InYucHN0ivTeoNAcg4896OzBveNpmNfEUTyJRstDrsuVdIaMZAS3A==","_npmVersion":"10.9.8","description":"Standalone CLI and MCP server for Apex.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"tar":"^7.4.3","zod":"^4.3.6","ignore":"^7.0.5","proper-lockfile":"^4.1.2","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^2.1.9","typescript":"^5.9.3","@types/node":"^22.18.6","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/apex-cli_0.1.24_1785445605697_0.7209707897552393","host":"s3://npm-registry-packages-npm-production"}},"0.1.25":{"name":"@cantinasecurity/apex-cli","version":"0.1.25","_id":"@cantinasecurity/apex-cli@0.1.25","maintainers":[{"name":"p_misirov","email":"pablo@spearbit.com"},{"name":"ellahi","email":"ellahi@spearbit.com"}],"bin":{"apex":"pkg-bin/apex.js","apex-mcp":"pkg-bin/apex-mcp.js"},"dist":{"shasum":"4ab7dd3ab71e3485aeb88ca1fd36ce3c5525845f","tarball":"https://registry.npmjs.org/@cantinasecurity/apex-cli/-/apex-cli-0.1.25.tgz","fileCount":42,"integrity":"sha512-LWnYbYQ1OPZbpM83zilz45O3WdCa3FTv6VrKJ3Puvl/hm1A1UPjW0SINAwlU825X66VcrbiqB7Q76vuaU0d+Ow==","signatures":[{"sig":"MEUCICtf3KO03w6y3ucpzDyls8pbt9r/ZmNM3PJXh2KXOAigAiEAk7AITsHcPif4zgDXRc8kssi21tJI4BqF12GwHlDqmi8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":446612},"type":"module","_from":"file:cantinasecurity-apex-cli-0.1.25.tgz","engines":{"node":">=20"},"private":false,"scripts":{"mcp":"tsx src/mcp-main.ts","apex":"tsx src/apex.ts","test":"vitest run","build":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ellahi","email":"ellahi@spearbit.com"},"_resolved":"/tmp/20252b82a75b3a055c07ff2b7f64d075/cantinasecurity-apex-cli-0.1.25.tgz","_integrity":"sha512-LWnYbYQ1OPZbpM83zilz45O3WdCa3FTv6VrKJ3Puvl/hm1A1UPjW0SINAwlU825X66VcrbiqB7Q76vuaU0d+Ow==","_npmVersion":"10.9.8","description":"Standalone CLI and MCP server for Apex.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"tar":"^7.4.3","zod":"^4.3.6","ignore":"^7.0.5","proper-lockfile":"^4.1.2","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^2.1.9","typescript":"^5.9.3","@types/node":"^22.18.6","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/apex-cli_0.1.25_1785763344189_0.7697000644186633","host":"s3://npm-registry-packages-npm-production"}},"0.1.26":{"name":"@cantinasecurity/apex-cli","version":"0.1.26","_id":"@cantinasecurity/apex-cli@0.1.26","maintainers":[{"name":"p_misirov","email":"pablo@spearbit.com"},{"name":"ellahi","email":"ellahi@spearbit.com"}],"bin":{"apex":"pkg-bin/apex.js","apex-mcp":"pkg-bin/apex-mcp.js"},"dist":{"shasum":"651e90309aaa7081a9c4e788b2d127ffeb3f3c5b","tarball":"https://registry.npmjs.org/@cantinasecurity/apex-cli/-/apex-cli-0.1.26.tgz","fileCount":43,"integrity":"sha512-fex4UeJATtTQNU9gT9GOkCcBB47MNXhueXUCzifphHlGaPtlE1ghCrWxZS9vL9U09u+ghqnElIn3NrptX+DLbQ==","signatures":[{"sig":"MEYCIQCV+3t8KAAKSNfEGbzB0pAVmKvjp4D9TSceWo1l3AzprwIhAOhYPsSYMFGn/Ac3sW0Uy7V2mn766CDlAvFnXF5jRGAn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":450745},"type":"module","_from":"file:cantinasecurity-apex-cli-0.1.26.tgz","engines":{"node":">=20"},"private":false,"scripts":{"mcp":"tsx src/mcp-main.ts","apex":"tsx src/apex.ts","test":"vitest run","build":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ellahi","email":"ellahi@spearbit.com"},"_resolved":"/tmp/4bfdce38eacb3c40d498c76f5c6704f1/cantinasecurity-apex-cli-0.1.26.tgz","_integrity":"sha512-fex4UeJATtTQNU9gT9GOkCcBB47MNXhueXUCzifphHlGaPtlE1ghCrWxZS9vL9U09u+ghqnElIn3NrptX+DLbQ==","_npmVersion":"10.9.8","description":"Standalone CLI and MCP server for Apex.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"tar":"^7.4.3","zod":"^4.3.6","ignore":"^7.0.5","proper-lockfile":"^4.1.2","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^2.1.9","typescript":"^5.9.3","@types/node":"^22.18.6","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/apex-cli_0.1.26_1786610883365_0.40591509854787367","host":"s3://npm-registry-packages-npm-production"}},"0.1.27":{"name":"@cantinasecurity/apex-cli","version":"0.1.27","_id":"@cantinasecurity/apex-cli@0.1.27","maintainers":[{"name":"p_misirov","email":"pablo@spearbit.com"},{"name":"ellahi","email":"ellahi@spearbit.com"}],"bin":{"apex":"pkg-bin/apex.js","apex-mcp":"pkg-bin/apex-mcp.js"},"dist":{"shasum":"1556ce8439ca176bbf4d05d1e3b06dd645a8f2c2","tarball":"https://registry.npmjs.org/@cantinasecurity/apex-cli/-/apex-cli-0.1.27.tgz","fileCount":43,"integrity":"sha512-V9qG/2GmV/O/xPs+TR+V+ZNlT308/K2r83De/k7U8+JjIOgeVrLGV6Z/YqYrVAeXaPy61ER1lDwFTjpzlKNBPQ==","signatures":[{"sig":"MEQCIDUdL4ZQkzMYeiQC0nZ5YjKP2z5SpJVRD/4uaXoDl7uZAiBXdXYdjZii5iWO8goK2GxLRkfLzmLJCubAOMzxoQ+zxg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":452394},"type":"module","_from":"file:cantinasecurity-apex-cli-0.1.27.tgz","engines":{"node":">=20"},"private":false,"scripts":{"mcp":"tsx src/mcp-main.ts","apex":"tsx src/apex.ts","test":"vitest run","build":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ellahi","email":"ellahi@spearbit.com"},"_resolved":"/tmp/2f02a841e01f45ed1f366d6e186f2108/cantinasecurity-apex-cli-0.1.27.tgz","_integrity":"sha512-V9qG/2GmV/O/xPs+TR+V+ZNlT308/K2r83De/k7U8+JjIOgeVrLGV6Z/YqYrVAeXaPy61ER1lDwFTjpzlKNBPQ==","_npmVersion":"10.9.8","description":"Standalone CLI and MCP server for Apex.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tar":"^7.4.3","zod":"^4.3.6","ignore":"^7.0.5","proper-lockfile":"^4.1.2","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^2.1.9","typescript":"^5.9.3","@types/node":"^22.18.6","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/apex-cli_0.1.27_1787578765983_0.3672110088451701","host":"s3://npm-registry-packages-npm-production"}},"0.1.28":{"name":"@cantinasecurity/apex-cli","version":"0.1.28","_id":"@cantinasecurity/apex-cli@0.1.28","maintainers":[{"name":"p_misirov","email":"pablo@spearbit.com"},{"name":"ellahi","email":"ellahi@spearbit.com"}],"bin":{"apex":"pkg-bin/apex.js","apex-mcp":"pkg-bin/apex-mcp.js"},"dist":{"shasum":"223fb5ef2f9aaf2b095cd37bf972f1fd2fe51c9c","tarball":"https://registry.npmjs.org/@cantinasecurity/apex-cli/-/apex-cli-0.1.28.tgz","fileCount":43,"integrity":"sha512-BPmd8NFz7ntDLCk8jCyZY3MsvKeXlbuv1bOMquKMZqZoQVMNhSumsyBiZ8xbRGkuYj3lS0yVLkWgZyL9GEfa4w==","signatures":[{"sig":"MEQCIEnTecJXUfN+ZOaY7gjPALlKQRt8VBhN4aKuEjvg4ly4AiAuqGdCjcdFoXufUwzfo6Qla0TJIQNkuwQ+SNYUhBh1iQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":456600},"type":"module","_from":"file:cantinasecurity-apex-cli-0.1.28.tgz","engines":{"node":">=20"},"private":false,"scripts":{"mcp":"tsx src/mcp-main.ts","apex":"tsx src/apex.ts","test":"vitest run","build":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ellahi","email":"ellahi@spearbit.com"},"_resolved":"/tmp/b8b55ebcee6f03efd3bd6533b32b3dcd/cantinasecurity-apex-cli-0.1.28.tgz","_integrity":"sha512-BPmd8NFz7ntDLCk8jCyZY3MsvKeXlbuv1bOMquKMZqZoQVMNhSumsyBiZ8xbRGkuYj3lS0yVLkWgZyL9GEfa4w==","_npmVersion":"10.9.8","description":"Standalone CLI and MCP server for Apex.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tar":"^7.4.3","zod":"^4.3.6","ignore":"^7.0.5","proper-lockfile":"^4.1.2","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^2.1.9","typescript":"^5.9.3","@types/node":"^22.18.6","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/apex-cli_0.1.28_1787598633043_0.7247052607939264","host":"s3://npm-registry-packages-npm-production"}},"0.1.33":{"name":"@cantinasecurity/apex-cli","version":"0.1.33","_id":"@cantinasecurity/apex-cli@0.1.33","maintainers":[{"name":"p_misirov","email":"pablo@spearbit.com"},{"name":"ellahi","email":"ellahi@spearbit.com"}],"bin":{"apex":"pkg-bin/apex.js","apex-mcp":"pkg-bin/apex-mcp.js"},"dist":{"shasum":"577a31aa4f4fb59423b62e21d1627566b336a3ba","tarball":"https://registry.npmjs.org/@cantinasecurity/apex-cli/-/apex-cli-0.1.33.tgz","fileCount":44,"integrity":"sha512-KOd21OhnOr1WqjFJZe1nb6oEu3Un2TtnwjGV3wIB6kONeRtiWQmXqlQNHIWgbVnSFWdjCtMJOeFEbLKw9MADAA==","signatures":[{"sig":"MEUCIQDrPaC5PFhXuaIlNTZhLmLTe/spZN4MrXeXDq2LRNv+mQIgf+LG1BCCQdXEOuP3zE+EwVhaS2hKqkoHfGW/eeIXNGE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCICab4gxHBfZpaCpTRw/uw+6UfpeLQ3Q83irrv+dZn/gfAiBeDMCC+LY0ENGzcxTSfSkZlck6MQkI7JSvzKM6D/qTqA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":505228},"type":"module","_from":"file:cantinasecurity-apex-cli-0.1.33.tgz","engines":{"node":">=20"},"private":false,"scripts":{"mcp":"tsx src/mcp-main.ts","apex":"tsx src/apex.ts","test":"vitest run","build":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"_npmUser":{"name":"ellahi","email":"ellahi@spearbit.com"},"_resolved":"/tmp/6ae84349b51a1beabf7a3c8d5cb89daa/cantinasecurity-apex-cli-0.1.33.tgz","_integrity":"sha512-KOd21OhnOr1WqjFJZe1nb6oEu3Un2TtnwjGV3wIB6kONeRtiWQmXqlQNHIWgbVnSFWdjCtMJOeFEbLKw9MADAA==","_npmVersion":"10.9.8","description":"Standalone CLI and MCP server for Apex.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tar":"^7.4.3","zod":"^4.3.6","ignore":"^7.0.5","proper-lockfile":"^4.1.2","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^2.1.9","typescript":"^5.9.3","@types/node":"^22.18.6","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"tmp":"tmp/apex-cli_0.1.33_1789586737743_0.6021309132047228","host":"s3://npm-registry-packages-npm-production"}},"0.1.34":{"_id":"@cantinasecurity/apex-cli@0.1.34","bin":{"apex":"pkg-bin/apex.js","apex-mcp":"pkg-bin/apex-mcp.js"},"dist":{"shasum":"d4e4d454d104ef6979c1370681381acecfa3ada0","tarball":"https://registry.npmjs.org/@cantinasecurity/apex-cli/-/apex-cli-0.1.34.tgz","fileCount":45,"integrity":"sha512-6BhzFSoseURfQbFrPmmiaxJdyzvNXHAEfI6gtcRph969eQvMQJcyio1+y5BR+Klm09lZeEfRE7g2cml0TCKsNg==","signatures":[{"sig":"MEQCIHIl2XABH5DWzHBLtRlbmvvwTMXg67psP/p5roEY0W0mAiAJMfx4zhlWBeREG3n0tVEcxIhmzSCtXw+CpYucDpF6YA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDxFZc7v2RBUSwxsBwE7oItt9IM65TAmi9SFgPDr84JVwIgezPZQ25mgOh6NeBZjP3NaUbuhSclNe8pevLG1ShChVw="}],"unpackedSize":509388},"name":"@cantinasecurity/apex-cli","type":"module","_from":"file:cantinasecurity-apex-cli-0.1.34.tgz","engines":{"node":">=20"},"private":false,"scripts":{"mcp":"tsx src/mcp-main.ts","apex":"tsx src/apex.ts","test":"vitest run","build":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.build.json","typecheck":"tsc --noEmit"},"version":"0.1.34","_npmUser":{"name":"ellahi","email":"ellahi@spearbit.com"},"_resolved":"/tmp/c2ea44d0c68adb0672be11f06f1ddebc/cantinasecurity-apex-cli-0.1.34.tgz","_integrity":"sha512-6BhzFSoseURfQbFrPmmiaxJdyzvNXHAEfI6gtcRph969eQvMQJcyio1+y5BR+Klm09lZeEfRE7g2cml0TCKsNg==","_npmVersion":"10.9.8","description":"Standalone CLI and MCP server for Apex.","directories":{},"maintainers":[{"name":"p_misirov","email":"pablo@spearbit.com"},{"name":"ellahi","email":"ellahi@spearbit.com"}],"_nodeVersion":"22.23.2","dependencies":{"tar":"^7.4.3","zod":"^4.3.6","ignore":"^7.0.5","proper-lockfile":"^4.1.2","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","vitest":"^2.1.9","typescript":"^5.9.3","@types/node":"^22.18.6","@types/proper-lockfile":"^4.1.4"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/apex-cli_0.1.34_1789910983009_0.6564220911809011"}}},"time":{"created":"2026-04-17T16:47:42.667Z","modified":"2026-09-20T13:29:43.300Z","0.1.0":"2026-04-17T16:47:43.230Z","0.1.1":"2026-04-27T16:03:12.044Z","0.1.2":"2026-05-04T13:13:21.621Z","0.1.3":"2026-05-11T13:23:07.319Z","0.1.4":"2026-05-18T13:19:35.550Z","0.1.5":"2026-05-18T16:22:00.685Z","0.1.6":"2026-05-18T20:30:58.802Z","0.1.9":"2026-06-01T21:09:33.985Z","0.1.10":"2026-06-03T15:39:39.322Z","0.1.11":"2026-06-07T13:23:38.404Z","0.1.12":"2026-06-09T20:01:12.663Z","0.1.13":"2026-06-22T13:26:21.697Z","0.1.14":"2026-06-29T13:13:55.803Z","0.1.15":"2026-07-09T22:31:32.362Z","0.1.16":"2026-07-10T21:17:29.991Z","0.1.17":"2026-07-13T13:26:16.302Z","0.1.18":"2026-07-20T21:22:37.975Z","0.1.19":"2026-07-22T20:46:44.183Z","0.1.20":"2026-07-23T20:53:04.101Z","0.1.21":"2026-07-27T13:55:18.315Z","0.1.22":"2026-07-29T19:59:40.946Z","0.1.23":"2026-07-29T21:49:21.857Z","0.1.24":"2026-07-30T21:06:45.903Z","0.1.25":"2026-08-03T13:22:24.326Z","0.1.26":"2026-08-13T08:48:03.505Z","0.1.27":"2026-08-24T13:39:26.149Z","0.1.28":"2026-08-24T19:10:33.272Z","0.1.33":"2026-09-16T19:25:37.857Z","0.1.34":"2026-09-20T13:29:43.127Z"},"description":"Standalone CLI and MCP server for Apex.","maintainers":[{"name":"p_misirov","email":"pablo@spearbit.com"},{"name":"ellahi","email":"ellahi@spearbit.com"}],"readme":"# Apex CLI\n\nStandalone CLI client for Apex.\n\n## Installing And Updating\n\nFor a public install, use a global package manager install:\n\n```bash\nnpm install -g @cantinasecurity/apex-cli\n# or: pnpm add -g @cantinasecurity/apex-cli\n```\n\nThen run:\n\n```bash\napex setup\n```\n\n`apex setup` is the lowest-friction path for agent clients. It:\n\n- registers Apex as an MCP server in any installed Codex CLI, Claude Code, and GitHub Copilot CLI clients\n- installs the Codex skill into `$CODEX_HOME/skills/apex-cli`\n- installs the Claude project skill into `.claude/skills/apex-cli` in the current repository\n- installs the GitHub Copilot CLI skill into `$COPILOT_HOME/skills/apex-cli` or `~/.copilot/skills/apex-cli`\n\nIf you only want one client, run:\n\n```bash\napex setup codex\napex setup claude\napex setup copilot\n```\n\nIf one client is not installed yet, `apex setup` skips it automatically. If you target a client explicitly, its CLI must already be installed.\n\nUpdate a global install with:\n\n```bash\napex update\n```\n\nYou can also update directly with your package manager:\n\n```bash\nnpm install -g @cantinasecurity/apex-cli\n# or: pnpm add -g @cantinasecurity/apex-cli\n```\n\nIf you are running Apex CLI from a local checkout instead, update it with:\n\n```bash\ngit pull --ff-only\npnpm install\n```\n\nFor published installs, setup-managed MCP registrations launch the current npm\nrelease, so restarting the client picks up the current server instead of keeping\nan old global `apex-mcp` process indefinitely. Re-run `apex setup` after\nupgrading to refresh copied skill files, and run `apex setup claude` in each\nrepository where you want the Claude project skill.\n\nRestart any already-running MCP client after an Apex CLI upgrade before using\ntrial redemption or claim. A process that loaded an older credential writer\ncannot adopt the new merge and generation-safety rules until it restarts.\n\nWhen `apex` is run in an interactive terminal, it checks for updates periodically and offers to install them.\n\n## Local Development\n\n1. Install dependencies:\n\n```bash\npnpm install\n```\n\n2. Run the CLI:\n\n```bash\npnpm apex\n```\n\nBy default, the CLI targets `https://ai.cantina.xyz/`.\n\nUse `APEX_BASE_URL` only when targeting a non-default Apex host. For on-prem deployments,\nset it to the same external HTTPS Bedrock origin configured as `ONPREM_PUBLIC_BASE_URL`;\nbrowser handoffs such as `apex connect github` and `apex-connect-provider` need that\npublic origin for GitHub callback and success redirects.\n\n```bash\nAPEX_BASE_URL=https://bedrock.customer.example pnpm apex\n```\n\n## Try Apex With A Trial Code\n\nShared Standard-scan codes (including custom names such as `TEST100`) work with\nApex CLI 0.1.34 or newer. They provide either one guest Standard scan or 100% off\none 200-credit checkout package. Both paths share the code's redemption limit;\na one-use code cannot fund both. Previously issued `APEX-...` and `SPBT-...` codes\nremain accepted. Code eligibility and remaining uses are checked by Bedrock.\n\nA Cantina-issued trial code can start a temporary guest scan without a Cantina\naccount, browser, or device login. Redeem it from the repository root, run the\nnormal scan lifecycle, and create a Cantina account only after reviewing the\nfindings:\n\n```bash\napex redeem <code> --json\napex scan --non-interactive --json\napex status --json\napex findings --json\napex claim\n```\n\n`apex redeem` never opens a browser. It saves a machine-local onboarding\nfingerprint before the first request, exchanges the code for a seven-day guest\nsession, and stores the single-use claim proof only in the mode-0600 Apex\ncredentials file. A one-way code hash distinguishes safe same-code retries\nwithout retaining the trial code. `apex claim` is the one onboarding command\nthat may open a browser; it creates or signs into a Cantina account, then moves\nthe guest workspace, scans, and findings into the currently selected Cantina\nworkspace when that account can run scans there. Personal workspace owners\nreceive the trial in their existing workspace instead of getting a duplicate.\nRun it on the same machine within 30 days. Unclaimed guest data is retained only\nfor the limited period disclosed during redemption and is then queued for\ndeletion. If the selected Cantina workspace cannot run scans, switch to one\nthat can and retry before the claim deadline.\nTrial redemption, claim, and revocation are hosted-only and fail before sending\nany onboarding secret when `APEX_BASE_URL` is not `https://ai.cantina.xyz`.\n\nIf the local claim proof is lost while the seven-day guest session is still\nactive, run `apex redeem <the-same-code>` again on the same machine to rotate\nthe guest credentials and re-mint the claim proof over the authenticated guest\nchannel. After the guest session expires, Apex cannot safely recover a lost\nclaim proof from the public trial code and machine fingerprint alone.\n\nIf the current credentials already belong to a real account, `apex redeem`\nexits with code 2 and `outcome: \"already_authenticated\"`; it never silently\nspends that account's credits. Re-redeeming the same code on the same machine\nis idempotent while the guest session remains active. A different active trial\nrequires the explicit `--replace` flag, which revokes the outgoing guest\nsession before redeeming the new code.\n\nGuest standard scans validate the complete local archive before resolving or\nreserving a workspace. `apex doctor` is read-only for guest sessions. For an\nunbound renamed checkout, Apex may recover only the sole empty guest workspace\nwhen no explicit workspace name was supplied; it will not silently switch an\nexplicit workspace selection or reuse a workspace that already contains scan\nhistory.\n\nLogging out of an active guest trial, or discarding a proof-only trial stub,\nrequires explicit confirmation (`apex logout --force` in non-interactive\nflows). Apex first attempts a proof-bound server revoke; an explicitly\nconfirmed logout may discard a stale local proof when the server can no longer\nverify it. Logging out of a separately authenticated account preserves any\nunclaimed local trial proof so `apex claim` can still use it.\n\nAgent-safe copy/paste prompt (substitute the issued code):\n\n```text\nInstall and run Cantina Apex CLI 0.1.34 to start one free standard security scan of this repository immediately.\n\nUse this trial code only where <TRIAL_CODE> appears below: SPBT-DEVREL-XXXXXXXX\n\nRun the commands yourself from the repository root; do not stop after setup or only explain the steps. Use terminal CLI commands only. Do not use an Apex MCP tool or run `apex setup`, `apex mcp`, `apex login`, `apex-auth-start`, or `apex-auth-wait`. Never use `--replace` or `--force`.\n\nUse this exact command prefix for every Apex command:\n  npx -y -p @cantinasecurity/apex-cli@0.1.34 apex\n\n1. Before redeeming, confirm every command will use the same persistent, user-accessible machine or container, HOME, filesystem, and repository root. Confirm Node.js 20+ and npx are available. If `APEX_BASE_URL` is set, continue only when its origin is `https://ai.cantina.xyz`. Run the exact prefix with `--help` and continue only if help lists both `redeem` and `claim`. If any check fails, STOP before sending the code; do not install system packages.\n2. Redeem, with at most one response-loss recovery retry:\n     npx -y -p @cantinasecurity/apex-cli@0.1.34 apex redeem <TRIAL_CODE> --json\n   This terminal command is the only allowed tool call containing the code. Never echo or restate the code, store it in a file or environment variable, put it in a URL or MCP call, or include it in your response. Parse the JSON from stdout only; do not merge stderr into stdout, because npm may write warnings to stderr. Continue when the command exits 0 and stdout is JSON with `redeemed: true` and `outcome` equal to `redeemed` or `idempotent`. `idempotent` means the existing guest session resumed and it may already own a workspace. If and only if the first attempt ends with an ambiguous transport/connection failure or an interrupted/missing response and no typed server error code, retry this exact same command once on the same machine, HOME, and repository root. Never retry a typed server rejection and never make more than one recovery retry. If the allowed retry does not return a successful JSON outcome, STOP.\n3. Immediately start exactly one scan; do not wait for another instruction:\n     npx -y -p @cantinasecurity/apex-cli@0.1.34 apex scan --mode standard --non-interactive --no-open --json\n   The CLI validates the complete guest local archive before it reserves a workspace. An unbound renamed checkout may recover only the sole empty guest workspace when no explicit workspace name was supplied. On any error or nonzero exit, STOP. After a successful scan JSON response, inspect `localPersistence.workspaceBindingSaved`. If it is `false`, the server scan already started: capture and report `binding.lastScanId`, then STOP; do not run status or findings until local repository permissions are repaired. Otherwise capture `binding.lastScanId` from the JSON as <SCAN_ID>; if it is absent, STOP.\n4. About every 60 seconds, poll that exact scan:\n     npx -y -p @cantinasecurity/apex-cli@0.1.34 apex status --scan <SCAN_ID> --json\n   Read `progress.progress.status`. Wait while it is `created`, `pending`, `queued`, `starting`, `running`, `in_progress`, or `processing`. Continue on `completed`. STOP on `failed`, `cancelled`, a missing or unknown status, or a command failure.\n5. Fetch that exact scan's findings:\n     npx -y -p @cantinasecurity/apex-cli@0.1.34 apex findings --scan <SCAN_ID> --json\n   On success, summarize findings by severity, most severe first, including identifier, title, status, and confidence. This command does not return file locations, so do not invent them. On failure, STOP.\n6. Do not claim automatically. Tell me the claim deadline from step 2 and remind me to run this exact command myself from the same repository root, machine, and HOME:\n     npx -y -p @cantinasecurity/apex-cli@0.1.34 apex claim\n   It may open a browser so I can create or sign in to a Cantina account and keep the results. Claim moves the trial into the currently selected Cantina workspace when I can run scans there, or into my existing personal workspace. If the selected workspace cannot run scans, tell me to switch to one that can and retry before the claim deadline.\n\nNever paste raw command transcripts. For any failure, report only the step, exit code, and sanitized error. Redact the trial code and every `apex_at_`, `apex_rt_`, or `apex_ct_` value from all reports.\n```\n\nTrial codes and claim tokens must never be logged, telemetered, printed in JSON\noutput, placed in URLs, or sent through MCP tool calls. The MCP server does not\nexpose redemption or claim tools. After terminal redemption, its read-only\n`apex-trial-status` tool can report local guest and claim deadlines without\nreturning either secret.\n\n## Interactive Shell\n\nBare `apex` opens the interactive shell:\n\n```text\n$ apex\n\nApex CLI\nConnected to https://ai.cantina.xyz/\nType /scan to start a scan for this directory, /workspaces to browse workspace names, /workspace use \"<name>\" to switch, /help for commands.\napex>\n```\n\nIn interactive terminals, Apex now shows a loading indicator while it resolves workspaces, loads scans, and starts commands.\n\nIf Apex asks for a workspace name, that is the Apex workspace name for the current directory. Press Enter to accept the current folder name, or pass `--workspace-name <name>` explicitly.\n\nSupported shell commands:\n\n- `/credits`\n- `/scan [standard|audit|lite]`\n- `/scan pr <pr-number>`\n- `/scans`\n- `/findings [scan-id]`\n- `/findings workspace [filter...]`\n- `/findings tickets <finding-ref>`\n- `/findings send <finding-ref> <linear|jira>`\n- `/findings link-ticket <finding-ref> <linear|jira> <issue-key|url>`\n- `/findings comment <finding-id|finding-identifier> <comment>`\n- `/findings feedback <finding-id|finding-identifier> valid [comment]`\n- `/findings feedback <finding-id|finding-identifier> invalid <false-positive|by-design|not-relevant> [comment]`\n- `/findings fix-review <finding-id|finding-identifier>`\n- `/export [scan-id]`\n- `/workspaces`\n- `/cancel-scan [scan-id]`\n- `/status [scan-id]`\n- `/doctor`\n- `/update`\n- `/claim`\n- `/logout`\n- `/repos`\n- `/workspace`\n- `/workspace use <workspace-name|workspace-prefix|workspace-id>`\n- `/workspace name <name>`\n- `/company [id|handle]`\n- `/connect github`\n- `/connect gitlab`\n- `/open`\n- `/clear`\n- `/help`\n- `/exit`\n\n`/workspace use` accepts a workspace name, prefix, or ID. Quote workspace names that contain spaces, for example `/workspace use \"Core Platform\"`.\n\n## Scripted Commands\n\n- `apex credits`\n- `apex scan`\n- `apex scan --mode lite`\n- `apex scan --mode pr --pr <number> [--pr <number>] [--pr-path <path>]`\n- `apex scans`\n- `apex findings [--scan <scan-id>]`\n- `apex findings --workspace [--company <handle>] [--workspace-ref <name|prefix|id>] [--finding-state all|open] [--filter <[!]facet:value>]`\n- `apex findings tickets <finding-ref> [--scan <scan-id>] [--json]`\n- `apex findings send <finding-ref> <linear|jira> [--scan <scan-id>] [--json]`\n- `apex findings link-ticket <finding-ref> <linear|jira> <issue-key|url> [--scan <scan-id>] [--json]`\n- `apex findings comment <finding-id|finding-identifier> --content <markdown> [--parent-comment <comment-id>] [--scan <scan-id>]`\n- `apex findings feedback <finding-id|finding-identifier> <valid|invalid> [comment] [--comment <markdown>] [--scan <scan-id>] [--suggested-severity extreme|critical|high|medium|low|informational] [--dismissal-reason false-positive|by-design|not-relevant] [--label acknowledged|fixed] [--fix-pr-url <github-pr-url>]`\n- `apex findings fix-review <finding-id|finding-identifier> [--scan <scan-id>] [--review-target pull-request|repository-current] [--fix-pr-url <github-pr-url>]`\n- `apex export findings [--scan <scan-id>] [--format markdown|json|gitlab-sast] [--output <path>]`\n- `apex workspaces`\n- `apex workspace`\n- `apex workspace use <workspace-name|workspace-prefix|workspace-id>`\n- `apex cancel-scan [scan-id]`\n- `apex status [--scan <scan-id>]`\n- `apex doctor`\n- `apex login`\n- `apex redeem <code> [--json] [--replace]`\n- `apex claim [--json] [--no-open]`\n- `apex logout`\n- `apex service-key create --name <name> [--company <id-or-handle>] [--scope <scope[,scope]>] [--expires-at <ISO-8601>] [--json]`\n- `apex service-key list [--company <id-or-handle>] [--json]`\n- `apex service-key revoke <key-id> [--company <id-or-handle>] [--json]`\n- `apex setup [all|codex|claude|copilot]`\n- `apex telemetry [status|enable|disable]`\n- `apex update`\n- `apex connect github`\n- `apex connect gitlab`\n\n`--workspace-ref` is scoped to `apex findings --workspace`. For `apex scans` or `apex export findings`, bind the intended workspace first with `apex workspace use <name|prefix|id>`; unsupported or unknown flags fail instead of falling back to the local binding.\n\nHelpful workspace flags:\n\n- `--company <id-or-handle>` to choose the Apex company when more than one is available\n- `--workspace-name <name>` to set the Apex workspace name for this directory\n\n`apex credits` shows standard, audit, fix review, and Lite scan entitlements when the server returns them.\n\n## Service Keys, Hosted MCP, And The REST API\n\nUse hosted MCP for production agents that need a normal HTTPS endpoint. Use the REST API for explicit HTTP/JSON integrations such as serverless functions, cron jobs, and internal audit hubs. Use the CLI or local stdio MCP server when an agent needs direct access to a repository checkout or local archive. The complete hosted integration contract is in the [Apex API documentation](https://ai.cantina.xyz/docs/apex-api).\n\nAn organization manager can create a service key with an existing Apex device-login session. Service-key commands never start device login implicitly, so run `apex login` first if needed:\n\n```bash\napex service-key create \\\n  --name internal-audit-hub \\\n  --scope scans:create,scans:read,findings:read \\\n  --expires-at 2027-01-01T00:00:00Z\n```\n\nThe CLI automatically uses your company when only one is available. If you belong to multiple companies, it prompts you to choose one. Pass `--company <id-or-handle>` to skip that prompt, or when a non-interactive or `--json` command cannot prompt.\n\nThe secret is returned only by `create` and cannot be retrieved later. Store it directly in a secret manager and do not put it in source control, prompts, chat messages, or logs. `--json` also includes the shown-once secret so it can be captured programmatically; handle that output as a credential.\n\nService keys are organization-level credentials. Grant only the scopes the integration needs: `scans:create` reads credit availability and triggers scans, `scans:read` polls status, and `findings:read` retrieves findings. Omit `--scope` to grant those three default scopes. Ticket linking additionally requires explicitly requesting `findings:write`. For a P1-only adapter that reads manually started scans, create a read-only key with `--scope scans:read,findings:read`.\n\nA key with `findings:read` can retrieve unpublished draft findings for scans in its organization so an external hub can perform triage. Give the key only to systems that are allowed to handle those drafts.\n\nList metadata or revoke a key without exposing its secret:\n\n```bash\napex service-key list\napex service-key revoke <key-id>\n```\n\nService-key management is intentionally available only through the scripted CLI. It is not exposed as an MCP tool or interactive-shell command, which keeps raw secrets out of model tool results and transcripts. The CLI requires an existing device-login bearer session, never initiates login from these commands, and never stores a created service key locally.\n\n`APEX_SERVICE_KEY` authenticates hosted MCP and REST requests; it does not authenticate the local CLI or stdio MCP and does not replace `apex login` there. When `apex doctor` finds a service key but no active local device-login session, it reports that split before starting a login flow. `APEX_API_KEY` is also recognized for this diagnostic so older integrations receive migration guidance, but `APEX_SERVICE_KEY` is the documented hosted-integration variable.\n\n### Hosted HTTPS MCP\n\nPoint any Streamable HTTP MCP client at `https://ai.cantina.xyz/mcp` and send the service key as `Authorization: Bearer <TOKEN>`. No local `apex-mcp` process, browser, TTY, or device-login session is required.\n\nKeep the key in the environment. For Codex:\n\n```bash\nexport APEX_SERVICE_KEY='<service-key>'\ncodex mcp add apex \\\n  --url https://ai.cantina.xyz/mcp \\\n  --bearer-token-env-var APEX_SERVICE_KEY\n```\n\nClaude Code can expand the same environment variable from `.mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"apex\": {\n      \"type\": \"http\",\n      \"url\": \"https://ai.cantina.xyz/mcp\",\n      \"headers\": {\n        \"Authorization\": \"Bearer ${APEX_SERVICE_KEY}\"\n      }\n    }\n  }\n}\n```\n\nThe hosted server exposes `apex-credits`, `apex-workspaces`, `apex-scan`, `apex-status`, `apex-cancel-scan`, `apex-findings`, `apex-workspace-findings`, `apex-finding-tickets`, `apex-finding-link-ticket`, and `apex-finding-send`. Ticket creation and linking require an explicit `findings:write` scope and a connected Linear/Jira integration. It operates only on repositories and workspaces available to the service key's organization. Use local stdio MCP for device auth, local filesystem/archive access, provider connection, setup, comments, feedback, fix reviews, and trial flows.\n\n### Hosted REST API\n\nUse the service key as a bearer token with the hosted scan lifecycle:\n\n```bash\ncurl \\\n  -H \"Authorization: Bearer $APEX_SERVICE_KEY\" \\\n  https://ai.cantina.xyz/api/apex/v1/credits\n\ncurl -X POST https://ai.cantina.xyz/api/apex/v1/scans \\\n  -H \"Authorization: Bearer $APEX_SERVICE_KEY\" \\\n  -H \"Idempotency-Key: $APEX_IDEMPOTENCY_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"repoUrl\": \"https://github.com/acme/example.git\",\n    \"commit\": \"0123456789abcdef0123456789abcdef01234567\",\n    \"paths\": [\"services/payments\"]\n  }'\n\ncurl \\\n  -H \"Authorization: Bearer $APEX_SERVICE_KEY\" \\\n  https://ai.cantina.xyz/api/apex/v1/scans/$SCAN_ID\n\ncurl \\\n  -H \"Authorization: Bearer $APEX_SERVICE_KEY\" \\\n  https://ai.cantina.xyz/api/apex/v1/scans/$SCAN_ID/findings\n```\n\nFor a remote GitHub scan, the repository must be connected to the service key's Apex organization. Apex reuses an active linked workspace when one exists; if none exists, the request creates and links a workspace named after the canonical repository before the scan starts. Pass `workspaceId` to disambiguate multiple matches. An explicit workspace/repository mismatch returns HTTP `409` instead of silently rewriting that workspace.\n\nFor a local or non-Git checkout, use the service API's source-upload flow instead. It can create or reuse a workspace, uploads a `tar.gz` archive, and starts the scan with a `local_archive` source. A newly created local workspace has no threat model to reuse, so its first scan must send `generateThreatModel: true`. See the [Apex service API guide](https://ai.cantina.xyz/docs/apex-api) for the current request schemas and limits.\n\nThe optional `paths` array is a set of best-effort focus hints, not a hard repository boundary. Apex may inspect or report code outside those paths. Version one does not yet provide strict path isolation.\n\nEvery trigger request requires an `Idempotency-Key`. Generate one stable key for each intended scan and reuse that same key with the identical request body when retrying after a transport error, timeout, or `5xx`. Idempotency is organization-scoped, so a retry remains safe if the service key is rotated between attempts. A definitive `4xx` response is retained; after correcting its precondition, submit the request with a new key. Use a new key for every genuinely new scan. The trigger returns a `scanId`; poll the scan resource until it reaches a terminal status, then fetch findings. The findings response uses the GitLab SAST JSON shape, including unpublished drafts, finding IDs that remain stable when the same scan is re-fetched, titles, descriptions, severities, and source locations when available.\n\nExample prompt for Claude Code:\n\n> Build an Apex adapter for our serverless audit hub using the hosted REST API, not the Apex CLI or local stdio MCP server. Read `APEX_SERVICE_KEY` from the environment, generate one stable `Idempotency-Key` per intended scan, and reuse it with the identical request body only after a transport error, timeout, or `5xx`; after correcting a definitive `4xx`, use a new key. POST the connected GitHub repository URL and exact commit to `/api/apex/v1/scans`, include `workspaceId` when needed to disambiguate matches, and handle a `409` workspace-resolution response. Treat optional `paths` as non-binding focus hints, not a security boundary. Poll `/api/apex/v1/scans/{scanId}` until terminal, then fetch `/api/apex/v1/scans/{scanId}/findings`. Preserve the raw GitLab SAST payload, including drafts, and deduplicate findings by stable ID. Never print or log the service key.\n\nExample prompt for Codex:\n\n> Add Apex to this headless auditor integration using the hosted REST API. Use bearer auth from `APEX_SERVICE_KEY`; do not shell out to `apex` or start a local stdio MCP process. Implement scan trigger, `409` workspace-resolution handling, status polling with bounded backoff, terminal failure handling, and findings retrieval. Send the connected GitHub `repoUrl`, exact `commit`, optional `paths`, and optional `workspaceId`; treat `paths` as non-binding focus hints rather than a hard security boundary. Generate a stable `Idempotency-Key` for each intended scan. Preserve it only for an identical transport/timeout/`5xx` retry; after correcting a definitive `4xx`, submit with a new key. Keep the returned `scanId`, and store the unmodified findings payload, including drafts, alongside normalized findings. Add tests with mocked HTTP responses and ensure credentials are redacted from errors and logs.\n\nFor a P1-only integration where scans are started in the Apex UI:\n\n> Given an Apex `scanId`, fetch `/api/apex/v1/scans/{scanId}/findings` with `APEX_SERVICE_KEY`, save the GitLab SAST JSON unchanged, and import each finding once using its stable ID. Do not trigger a new scan and never log the bearer token.\n\n## Finding Review Feedback\n\nFinding review collaboration now has explicit write commands:\n\n- `apex findings comment <finding-id|finding-identifier> --content \"Needs auth check\"`\n- `apex findings feedback <finding-id|finding-identifier> valid --comment \"Reproduced on latest build\"`\n- `apex findings feedback <finding-id|finding-identifier> invalid --dismissal-reason false-positive --comment \"This path is unreachable\"`\n- `apex findings feedback <finding-id|finding-identifier> valid --label fixed --fix-pr-url https://github.com/acme/app/pull/123 --comment \"Fixed in PR #123\"`\n- `apex findings fix-review <finding-id|finding-identifier>`\n- `/findings comment <finding-ref> <comment>`\n- `/findings feedback <finding-ref> valid [comment]`\n- `/findings feedback <finding-ref> invalid <false-positive|by-design|not-relevant> [comment]`\n- `/findings fix-review <finding-ref>`\n\nIdentifiers such as `KERN2-25` are resolved against the selected or latest scan for the current workspace binding. Pass `--scan <scan-id>` when you need a specific scan, or pass the finding UUID directly to skip workspace-based resolution.\n\nFinding comments, valid/invalid feedback, and fix review scan starts use the same Apex login credentials as read commands. In MCP clients, call `apex-auth-start`, then pass both its returned `deviceCode` and opaque `credentialGeneration` to `apex-auth-wait` to authenticate these write tools safely.\n\nNever copy a browser cookie or set `CANTINA_AUTH_TOKEN` for these tools. If an\nMCP server asks for that variable, it is an outdated pre-device-auth server.\nUpdate Apex CLI, re-run `apex setup <client>`, restart the client, and retry.\n\nInvalid feedback requires a dismissal reason. Valid feedback can include `--suggested-severity extreme|critical|high|medium|low|informational`.\n\nFix review scans can review either a Fix PR or the current repository state:\n\n1. For PR-based reviews, either save fixed feedback on the finding with `--label fixed` and one or more `--fix-pr-url` values, or pass `--fix-pr-url` directly to `apex findings fix-review`.\n2. For current-repository reviews, run `apex findings fix-review <finding-id|finding-identifier>` without Fix PR URLs. Bedrock must have original scan repository context for the finding.\n\nThe matching MCP flow is `apex-finding-fix-review` with optional `fixPrUrls`. Agents that need to record fixed feedback first can still call `apex-finding-feedback` with `status: \"valid\"`, `labels: [\"fixed\"]`, and `fixPrUrls`, then call `apex-finding-fix-review`.\n\nThe matching CLI and MCP flows intentionally use the same device-login session so agents should not ask users to paste browser cookies or auth tokens.\n\nSend a finding to Linear or Jira to create a ticket, just as in the frontend:\n\n```bash\napex findings send KERN2-25 linear --json\napex findings send KERN2-25 jira --json\n```\n\nConnect the integration and configure its destination in Apex first. Sending uses the same finding title, details, severity, Apex link, and saved routing as the frontend: workspace Linear project/labels (or the company default), or the workspace Jira site/project/issue type. The response contains `created` and `export` with the ticket key and URL. Already sent or linked findings return their existing ticket with `created: false`; active exports return a conflict. If a send times out, inspect `apex findings tickets` and the provider before retrying; the CLI never automatically repeats an uncertain creation.\n\nLocal MCP exposes `apex-finding-send` with `findingRef`, `provider`, and optional `cwd`/`scanId`. Hosted MCP uses `findingId` (UUID) and `provider`, with explicit `findings:write`. REST clients call `POST /api/apex/v1/findings/{findingId}/issue-trackers/{provider}` with no body. Provider is `linear` or `jira`. These paths all reuse the frontend's ticket-creation service.\n\nLink an existing ticket after connecting Linear or Jira in company settings:\n\n```bash\napex findings link-ticket KERN2-25 linear SEC-123 --json\napex findings link-ticket KERN2-25 jira https://acme.atlassian.net/browse/SEC-123 --json\napex findings tickets KERN2-25 --json\n```\n\nUse a finding UUID directly, or resolve its identifier/URL from the bound workspace and optional `--scan`. Ticket keys and HTTPS issue URLs are accepted; Linear also accepts an issue UUID. When Jira has several accessible sites, use a full issue URL or configure the workspace destination. Apex verifies the ticket through the company's existing integration and uses the same link shown in the frontend. One ticket per provider can be linked to a finding. Repeating the same link is safe; a different existing link or an in-progress export returns a conflict. This operation does not create or modify provider tickets.\n\nLocal MCP exposes `apex-finding-link-ticket` with `findingRef`, `provider`, `issueRef`, and optional `cwd`/`scanId`; `apex-finding-tickets` lists links. Both use device login. Hosted MCP exposes the same tool names with `findingId` (the finding UUID), without local filesystem arguments. Hosted writes require the explicit `findings:write` scope; reads require `findings:read`. Existing keys and omitted-scope defaults retain the original three scopes. Create a dedicated key in your own terminal with `apex service-key create --name \"Ticket linking\" --scope findings:read,findings:write` and keep the secret in your secret manager. REST clients use `GET`/`POST /api/apex/v1/findings/{findingId}/tickets`; POST accepts `{\"provider\":\"linear\",\"issueRef\":\"SEC-123\"}`.\n\n## Local Source Scans\n\n`apex scan` now works against any local source root you point it at. By default, that source root is the current working directory:\n\n- clean GitHub or GitLab checkouts can stay on the remote-materialization path\n- dirty git worktrees fall back to a local snapshot upload by default\n- plain directories that are not git repositories are scanned through a local snapshot upload\n\nUseful flags:\n\n- `--repo <path>` to scan one or more explicit local roots instead of the current directory\n- `--source-mode auto|remote|local` to control remote-first fallback behavior\n- `--mode standard|audit|lite|pr` to choose the scan mode\n- `--pr <number>` to select one or more GitHub pull requests for `--mode pr`\n- `--pr <number:path,path>` or `--pr-path <path>` to limit a PR scan to changed paths\n\n`auto` is the default. `remote` requires Apex to materialize from a remote repository. `local` forces a local snapshot upload even when a clean remote path is available.\n\nAudit scans use `audit` as the scan mode and still require provider-backed GitHub or GitLab repositories that Apex can materialize remotely without a local snapshot fallback. `ultra` remains accepted as a backwards-compatible alias.\n\nLite scans use `lite` as the scan mode and require the Lite Scan beta feature plus provider-backed GitHub or GitLab repositories that Apex can materialize remotely. Local snapshot uploads are not supported for Lite scans.\n\nPR scans require exactly one provider-backed GitHub repository. If the current directory resolves to multiple sources, pass `--repo <path>` to select the one that contains the pull request.\n\nCLI and MCP scan results use the public Bedrock `scanId`. Kernel execution IDs are internal implementation details and are neither returned nor accepted as scan aliases.\n\n## LLM / MCP Usage\n\nApex has two MCP transports:\n\n- Hosted Streamable HTTP at `https://ai.cantina.xyz/mcp`, authenticated with an organization service key, for production agents that do not need the caller's filesystem.\n- The `apex-mcp` stdio server shipped by this package, authenticated with device login, for repository-local and interactive agent workflows.\n\nSee [Hosted HTTPS MCP](#hosted-https-mcp) for the production URL and Bearer-token configuration. The rest of this section configures the local stdio server.\n\nIf Apex is installed globally, prefer:\n\n```bash\napex setup\n```\n\nThat registers Apex for installed Codex CLI, Claude Code, and GitHub Copilot CLI clients automatically. Codex and Claude registrations also set `APEX_MCP_CLIENT` and `APEX_CLIENT_INTEGRATION` so Apex can distinguish agent-driven MCP usage from direct CLI usage.\n\nIf you want to wire clients manually instead, Apex ships a stable `apex-mcp` binary. For Codex:\n\n```bash\ncodex mcp add apex \\\n  --env APEX_MCP_CLIENT=codex \\\n  --env APEX_CLIENT_INTEGRATION=codex \\\n  -- apex-mcp\n```\n\nFor Claude Code:\n\n```bash\nclaude mcp add apex \\\n  --scope user \\\n  -e APEX_MCP_CLIENT=claude \\\n  -e APEX_CLIENT_INTEGRATION=claude \\\n  -- apex-mcp\n```\n\n`apex setup claude` uses Claude's name-first stdio command syntax and checks\nwhether the installed Claude CLI supports `--scope user`. If a Claude build\nomits that option or advertises it but rejects it at runtime, setup safely\nmerges the same user-level `mcpServers.apex` entry into `~/.claude.json`\nwithout replacing other settings or servers.\n\nFor GitHub Copilot CLI:\n\n```bash\ncopilot mcp add apex --tools \"*\" -- apex-mcp\n```\n\nThe command after `--` selects the local stdio transport; no version-specific transport flag is needed.\n\nFor any other MCP client, configure it to launch:\n\n```json\n{\n  \"mcpServers\": {\n    \"apex\": {\n      \"command\": \"apex-mcp\",\n      \"env\": {\n        \"APEX_MCP_CLIENT\": \"custom-mcp-client\",\n        \"APEX_CLIENT_INTEGRATION\": \"custom-mcp-client\"\n      }\n    }\n  }\n}\n```\n\nFrom a local checkout during development, prefer the repo-local binary so the MCP stream stays clean:\n\n```json\n{\n  \"mcpServers\": {\n    \"apex\": {\n      \"command\": \"/path/to/apex-cli/bin/apex-mcp\",\n      \"env\": {\n        \"APEX_MCP_CLIENT\": \"local-dev\",\n        \"APEX_CLIENT_INTEGRATION\": \"local-dev\"\n      }\n    }\n  }\n}\n```\n\nIf you need to launch through `pnpm`, use `--silent`:\n\n```json\n{\n  \"mcpServers\": {\n    \"apex\": {\n      \"command\": \"pnpm\",\n      \"args\": [\"--silent\", \"mcp\"],\n      \"cwd\": \"/path/to/apex-cli\",\n      \"env\": {\n        \"APEX_MCP_CLIENT\": \"local-dev\",\n        \"APEX_CLIENT_INTEGRATION\": \"local-dev\"\n      }\n    }\n  }\n}\n```\n\nDo not point an MCP client at plain `pnpm mcp`. `pnpm` writes its script banner to `stdout` before the protocol stream, which can break the `initialize` handshake.\n\nThe local stdio MCP server exposes Apex-specific tools for:\n\n- auth status and device login\n- local guest-session deadlines through `apex-trial-status` (never the code or claim token)\n- doctor, credits, and provider connection URLs\n- workspace inspection and workspace binding\n- scan start, status, cancellation, findings, and findings export\n- cross-scan workspace findings through `apex-workspace-findings`, including direct workspace selection, first-class open state, web UI lifecycle fields, and server-side filters\n- Lite scan start by calling `apex-scan` with `mode: \"lite\"`\n- PR scan start by calling `apex-scan` with `mode: \"pr\"` and `pullRequests`\n- finding comments and valid/invalid feedback with `apex-finding-comment` and `apex-finding-feedback`\n- Create Linear/Jira tickets with `apex-finding-send` using the saved frontend destination\n- Link existing Linear/Jira tickets with `apex-finding-link-ticket` and inspect links with `apex-finding-tickets`\n- Fix PR and current-repository fix review scans with `apex-finding-fix-review`, optionally after `apex-finding-feedback`\n\nNeither MCP surface exposes trial redemption, trial claim, or service-key creation, listing, or revocation as tools. When a user supplies a Cantina trial code, run `apex redeem <code>` in a terminal instead of starting device login or putting the code in an MCP call. Production MCP clients should connect to `https://ai.cantina.xyz/mcp`; HTTP applications can use the [hosted Apex REST API](https://ai.cantina.xyz/docs/apex-api) directly. Do not launch the local stdio server as an HTTP adapter.\n\nFor repository-scoped operations, pass `cwd` explicitly so the server can resolve the right `.apex/workspace.json` binding and repository roots.\n\nUse `apex-workspace-findings` when an agent needs the same cross-scan finding\nset as the workspace browser. Pass `company`, `workspaceRef`, and\n`findingState: \"open\"` to select any accessible workspace without changing the\nlocal binding and return only findings that still need review:\n\n```json\n{\n  \"company\": \"apex-internal\",\n  \"workspaceRef\": \"BEDR9\",\n  \"findingState\": \"open\"\n}\n```\n\nOpen state excludes fixed, invalid, dismissed, and duplicate findings. It is a\nfirst-class selection, not `status:open`; actual finding status values are\n`proposed`, `partially_valid`, `valid`, `invalid`, and `duplicate`. The\nresponse includes `status`, `validity`, `reviewState`, duplicate metadata,\nrepository, and source file fields used by the web UI. Supported filter facets\nare `severity`, `scan`, `repo`, `review`, `impact`, `likelihood`, `status`,\n`validation`, `visibility`, `duplicate`, and `source`. Repeated filters in one\nfacet are ORed; filters across different facets are ANDed, and a leading `!`\nnegates a filter.\n\nFor Codex-style clients, the packaged skill can be installed with `apex setup codex`. For GitHub Copilot CLI, the same skill is installed into `~/.copilot/skills/apex-cli` with `apex setup copilot`. The repo-local source lives at `skills/apex-cli/SKILL.md`.\n\nFor Claude Code, the packaged project skill can be installed into the current repository with `apex setup claude`. The repo-local source lives at `.claude/skills/apex-cli/SKILL.md`. Anthropic documents project skills as filesystem directories under `.claude/skills/<name>/SKILL.md`, and the Claude Agent SDK uses the same location when the `Skill` tool is enabled.\n\n## Usage Telemetry\n\nApex CLI emits first-party, privacy-preserving usage telemetry so Cantina can understand how people use the direct CLI, the interactive shell, and MCP tools in Codex, Claude, GitHub Copilot CLI, or other clients.\n\nTelemetry is enabled by default and can be disabled locally:\n\n```bash\napex telemetry status\napex telemetry disable\napex telemetry enable\n```\n\nEnvironment opt-outs override local config:\n\n```bash\nAPEX_TELEMETRY_DISABLED=1 apex scan\n# also honored: APEX_DISABLE_TELEMETRY=1 or DO_NOT_TRACK=1\n```\n\nTelemetry records lifecycle events such as command/tool start and completion, duration, success/failure category, CLI version, Node/platform basics, anonymous install/session IDs, and sanitized command metadata. It also adds attribution headers to Apex API requests, including surface (`cli`, `interactive_shell`, or `mcp`), client integration, invocation ID, command/tool name, and CLI version.\n\nTelemetry does not send raw cwd paths, repository URLs, finding IDs, scan IDs, PR URLs, comments, file paths, trial codes, claim tokens, onboarding fingerprints, bearer tokens, or raw flag values. Sensitive inputs are reduced to booleans, counts, enum values, or length buckets.\n\nTelemetry event posts do not include bearer tokens. The telemetry endpoint is `POST /api/cli/v1/telemetry/events` with a batch payload:\n\n```json\n{\n  \"events\": [\n    {\n      \"schemaVersion\": 1,\n      \"event\": \"apex.invocation.completed\",\n      \"cliVersion\": \"0.1.34\",\n      \"invocation\": {\n        \"surface\": \"mcp\",\n        \"command\": \"apex-scan\",\n        \"mcpTool\": \"apex-scan\",\n        \"metadata\": {\n          \"mode\": \"pr\",\n          \"pullRequestCount\": 1,\n          \"cwdProvided\": true\n        }\n      },\n      \"client\": {\n        \"integration\": \"codex\"\n      },\n      \"outcome\": {\n        \"success\": true,\n        \"durationMs\": 1234\n      }\n    }\n  ]\n}\n```\n\n## Plugin And Marketplace Packaging\n\nThe npm package also includes marketplace-ready plugin artifacts:\n\n- `.codex-plugin/plugin.json` and `.mcp.codex.json` for Codex plugin installs\n- `.claude-plugin/plugin.json` and `.mcp.claude.json` for Claude Code plugin installs\n- `.claude-plugin/marketplace.json` for a Claude marketplace entry backed by the public npm package\n\nThese plugin installs launch the pinned npm package with `npx -y -p @cantinasecurity/apex-cli@0.1.34 apex-mcp`, so users do not need to install `apex` globally before enabling the plugin.\n\nThe repository also includes `.agents/plugins/marketplace.json` for local Codex marketplace testing from a checkout.\n\nFor local Claude validation:\n\n```bash\nclaude plugin validate .\nclaude plugin marketplace add ./ --scope local\nclaude plugin install apex-cli@cantina-tools --scope local\n```\n\nFor local Codex validation, add this repo as a local marketplace, then install `apex-cli` from the `Cantina Tools` marketplace in the Codex plugin directory:\n\n```bash\ncodex plugin marketplace add ./\n```\n\nSee `MARKETPLACE.md` for the official Claude, Anthropic Connectors Directory, and OpenAI/Codex submission checklist. The local stdio MCP server is plugin-ready, but remote marketplace submissions still require the external review steps documented there.\n\n## Development Notes\n\nThe CLI uses the Apex `/api/cli/v2/**` local-source routes for scan planning and snapshot uploads, with legacy `/api/cli/v1/**` routes still used for provider-backed flows such as audit scans. Local state is stored under:\n\n- `~/.config/apex/config.json`\n- `~/.config/apex/credentials.json`\n- `.apex/workspace.json`\n\nWhen starting a non-PR scan, any active workspace scan (including a PR scan) requires confirmation. Scripted usage can opt in explicitly with `--force`. Starting a PR scan skips that client preflight and may run alongside active workspace scans without `--force`, matching Bedrock's one-directional scan concurrency contract. Active-looking workspace scan rows are checked against the scan progress endpoint before the CLI treats them as blockers, so stale list entries do not hide terminal states such as `cancelled`.\n\nTo move between existing Apex workspaces from the CLI:\n\n1. Run `apex workspaces` to list the workspaces available to your active company.\n2. Run `apex workspace use <workspace-name|workspace-prefix|workspace-id>` to bind the current directory.\n3. If the workspace name contains spaces, quote it, for example `apex workspace use \"Core Platform\"`.\n4. Use `apex scans`, `apex status --scan <scan-id>`, `apex findings`, and `apex export findings` against that binding.\n5. Use `apex findings --workspace --company <handle> --workspace-ref <ref> --finding-state open` for the workspace browser's cross-scan findings that still need review, without changing the local binding.\n","readmeFilename":"README.md"}