{"_id":"granttap-mcp","_rev":"34-30adb28e57724fb929043c60e3c50060","name":"granttap-mcp","dist-tags":{"latest":"0.8.24"},"versions":{"0.1.0":{"name":"granttap-mcp","version":"0.1.0","keywords":["mcp","model-context-protocol","claude-code","codex","apple-watch","e2ee","approvals"],"license":"MIT","_id":"granttap-mcp@0.1.0","maintainers":[{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"}],"homepage":"https://granttap.com","bugs":{"url":"https://github.com/sergii-ziborov/granttap-mcp/issues"},"bin":{"granttap-mcp":"bin/granttap-mcp.mjs"},"dist":{"shasum":"15538b29c94f04690cf35064d977fc9d73b31796","tarball":"https://registry.npmjs.org/granttap-mcp/-/granttap-mcp-0.1.0.tgz","fileCount":15,"integrity":"sha512-+YINjBwhciuML+TGnwKX7oj5LLoTQGVdYG7158cXyN1UnQlNxhvUUk+lAceAGdMjRT/E+pR9y/KV85DzSvojNg==","signatures":[{"sig":"MEUCIQCOVZ/M6CpkPEBnWokqFDrslllMJtn7wmczp09kl49h6QIgCJcurLBzxARAqgOXAAi92yz7xv/Fl9WBNOlpDUhUKc4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":52365},"type":"module","engines":{"node":">=20"},"gitHead":"c979e8f86213ddfd2a445fc0ae39c8a5517509db","scripts":{"test":"node --import tsx --test tests/*.test.ts","setup":"node bin/granttap-mcp.mjs setup","start":"node bin/granttap-mcp.mjs","typecheck":"tsc --noEmit","prepublishOnly":"npm test && npm run typecheck"},"_npmUser":{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"},"overrides":{"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/sergii-ziborov/granttap-mcp.git","type":"git"},"_npmVersion":"10.9.2","description":"E2EE MCP bridge and approval hooks for GrantTap on iPhone and Apple Watch.","directories":{},"_nodeVersion":"22.13.1","dependencies":{"ws":"^8.18.0","tsx":"^4.19.2","zod":"^3.24.1","tweetnacl":"^1.0.3","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2"},"_npmOperationalInternal":{"tmp":"tmp/granttap-mcp_0.1.0_1784903157213_0.422922248696163","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"granttap-mcp","version":"0.2.0","keywords":["mcp","model-context-protocol","claude-code","codex","apple-watch","e2ee","approvals"],"license":"MIT","_id":"granttap-mcp@0.2.0","maintainers":[{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"}],"homepage":"https://granttap.com","bugs":{"url":"https://github.com/sergii-ziborov/granttap-mcp/issues"},"bin":{"granttap-mcp":"bin/granttap-mcp.mjs"},"dist":{"shasum":"e4f35933e83b40289be95ee5c3588e6e69d61023","tarball":"https://registry.npmjs.org/granttap-mcp/-/granttap-mcp-0.2.0.tgz","fileCount":19,"integrity":"sha512-5N6qt9kcZIxmlY/3vpqmnrtoq5QWa/lYz0PsjwtDO5lezpvsfioVg3VwRyBn6m+KNAbLhm1wjR1fStuMggK9dQ==","signatures":[{"sig":"MEUCIGDd51tG7zKIX0G7CukSK7YPNZbxGQ9+3tOcktQMC6EmAiEAg65m+ZdXCnb0MSFBViY/dJmckevweiWln0P8fWh/V34=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":380728},"type":"module","engines":{"node":">=20"},"gitHead":"259bd40f55b4ac54b2047824ff968dfa61b5a4e9","scripts":{"test":"node --import tsx --test tests/*.test.ts","setup":"node bin/granttap-mcp.mjs setup","start":"node bin/granttap-mcp.mjs","typecheck":"tsc --noEmit","prepublishOnly":"npm test && npm run typecheck"},"_npmUser":{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"},"overrides":{"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/sergii-ziborov/granttap-mcp.git","type":"git"},"_npmVersion":"10.9.2","description":"E2EE MCP bridge and approval hooks for GrantTap on iPhone and Apple Watch.","directories":{},"_nodeVersion":"22.13.1","dependencies":{"ws":"^8.18.0","tsx":"^4.19.2","zod":"^3.24.1","qrcode":"^1.5.4","tweetnacl":"^1.0.3","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/qrcode":"^1.5.6"},"_npmOperationalInternal":{"tmp":"tmp/granttap-mcp_0.2.0_1784920030493_0.8323063670017381","host":"s3://npm-registry-packages-npm-production"}},"0.6.4":{"name":"granttap-mcp","version":"0.6.4","keywords":["mcp","model-context-protocol","claude-code","codex","iphone","apple-watch","e2ee","approvals"],"license":"MIT","_id":"granttap-mcp@0.6.4","maintainers":[{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"}],"homepage":"https://granttap.com","bugs":{"url":"https://github.com/sergii-ziborov/granttap-mcp/issues"},"bin":{"granttap-mcp":"bin/granttap-mcp.mjs"},"dist":{"shasum":"fdde4722dbe6610082083238a5f4c5dca4d65d89","tarball":"https://registry.npmjs.org/granttap-mcp/-/granttap-mcp-0.6.4.tgz","fileCount":27,"integrity":"sha512-ygNwzF3Nv6yerk0UHtn6PdnkCfRQzIFHek1v7v3ymPFtJbvp9O1hllKa5i65tR0ZfmTSKHWARz6usfj44Oe4sA==","signatures":[{"sig":"MEUCIFY4CQ+1A33ea8icbdlNaSZwP6F+c3GSuJd2UACZrgT3AiEA8HAROPT1yuhJXflSwg2FiynTiPFA50JyI1xeJBh25+Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/granttap-mcp@0.6.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":184779},"type":"module","engines":{"node":">=20"},"gitHead":"6367cc0abf0ecb6467b2bbc8db44d01ffee5314b","scripts":{"test":"node --import tsx --test tests/*.test.ts","setup":"node bin/granttap-mcp.mjs setup","start":"node bin/granttap-mcp.mjs","typecheck":"tsc --noEmit","prepublishOnly":"npm test && npm run typecheck"},"_npmUser":{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"},"overrides":{"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/sergii-ziborov/granttap-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"Control Codex and Claude Code from iPhone and Apple Watch with zero-knowledge E2EE approvals, replies, and task sync.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ws":"^8.18.0","tsx":"^4.19.2","zod":"^3.24.1","qrcode":"^1.5.4","tweetnacl":"^1.0.3","@modelcontextprotocol/sdk":"^1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/qrcode":"^1.5.6"},"_npmOperationalInternal":{"tmp":"tmp/granttap-mcp_0.6.4_1785672862646_0.6743704117596618","host":"s3://npm-registry-packages-npm-production"}},"0.6.5":{"name":"granttap-mcp","version":"0.6.5","keywords":["mcp","model-context-protocol","claude-code","codex","iphone","apple-watch","e2ee","approvals"],"license":"MIT","_id":"granttap-mcp@0.6.5","maintainers":[{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"}],"homepage":"https://granttap.com","bugs":{"url":"https://github.com/sergii-ziborov/granttap-mcp/issues"},"bin":{"granttap-mcp":"bin/granttap-mcp.mjs"},"dist":{"shasum":"b477caa3afaae5e03a9b1a8a6cc0902b19b48404","tarball":"https://registry.npmjs.org/granttap-mcp/-/granttap-mcp-0.6.5.tgz","fileCount":27,"integrity":"sha512-whyK6w6k84KV2kjRghn/Hoo13uPzl6EFYI4o2kM52E5sBPAC7p2w8zjkfRICMc4P9CV/yZl89O4SVJpAwM75vA==","signatures":[{"sig":"MEQCIAHmnTwzVoOPWwCiUQOG1JOiqnD+ENB+2n7B3LzLRNOEAiBxKuD7NNrMQqOwhCANuIvYp8CQtpuOgpEmRes781nE8Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/granttap-mcp@0.6.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":195131},"type":"module","engines":{"node":">=20"},"gitHead":"206bd95b1cabe5b817e868dfee8c5ddfd42b13b2","scripts":{"test":"node --import tsx --test tests/*.test.ts","setup":"node bin/granttap-mcp.mjs setup","start":"node bin/granttap-mcp.mjs","typecheck":"tsc --noEmit","prepublishOnly":"npm test && npm run typecheck"},"_npmUser":{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"},"overrides":{"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/sergii-ziborov/granttap-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"Control Codex and Claude Code from iPhone and Apple Watch with zero-knowledge E2EE approvals, replies, and task sync.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ws":"^8.18.0","tsx":"^4.23.4","zod":"^3.24.1","qrcode":"^1.5.4","tweetnacl":"^1.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/qrcode":"^1.5.6"},"_npmOperationalInternal":{"tmp":"tmp/granttap-mcp_0.6.5_1785843162896_0.9181224717486827","host":"s3://npm-registry-packages-npm-production"}},"0.6.7":{"name":"granttap-mcp","version":"0.6.7","keywords":["mcp","model-context-protocol","claude-code","codex","iphone","apple-watch","e2ee","approvals"],"license":"MIT","_id":"granttap-mcp@0.6.7","maintainers":[{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"}],"homepage":"https://granttap.com","bugs":{"url":"https://github.com/sergii-ziborov/granttap-mcp/issues"},"bin":{"granttap":"bin/granttap-mcp.mjs","granttap-mcp":"bin/granttap-mcp.mjs"},"dist":{"shasum":"0f314d4ba1a9ff0db466e246273f533d4ae2bcb6","tarball":"https://registry.npmjs.org/granttap-mcp/-/granttap-mcp-0.6.7.tgz","fileCount":74,"integrity":"sha512-Magg624apmcfVrIWp1afD6DoRYstTX/pHxAOYAcaOg/GP8QTtlBluCn8n6aC1dyFzondycKazp7AAM0IkgY4jg==","signatures":[{"sig":"MEYCIQDTdvQ7huhWO/ciRjY0GuTY8FRL5F6Lm68ch+nbh9uSTgIhAKZdZIXo2Cv2BecPaEcHpSn5vTkhGv3dS+KMy7i41j3y","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/granttap-mcp@0.6.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4598230},"type":"module","engines":{"node":">=20"},"gitHead":"eafdac6c334e579a0016cfcf99dfdd76d6f258bb","scripts":{"test":"node --import tsx --test tests/*.test.ts","serve":"node bin/granttap-mcp.mjs serve","setup":"node bin/granttap-mcp.mjs setup","start":"node bin/granttap-mcp.mjs","status":"node bin/granttap-mcp.mjs status","authorize":"node bin/granttap-mcp.mjs authorize","typecheck":"tsc --noEmit","prepublishOnly":"npm test && npm run typecheck"},"_npmUser":{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"},"overrides":{"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/sergii-ziborov/granttap-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"Control Codex and Claude Code from iPhone and Apple Watch with zero-knowledge E2EE approvals, replies, and task sync.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ws":"^8.18.0","tsx":"^4.23.4","zod":"^3.24.1","qrcode":"^1.5.4","express":"^5.2.1","tweetnacl":"^1.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/qrcode":"^1.5.6","@types/express":"^5.0.3"},"_npmOperationalInternal":{"tmp":"tmp/granttap-mcp_0.6.7_1786392540651_0.6781645452186065","host":"s3://npm-registry-packages-npm-production"}},"0.6.10":{"name":"granttap-mcp","version":"0.6.10","keywords":["mcp","model-context-protocol","claude-code","codex","cursor","github-copilot","grok-build","iphone","apple-watch","e2ee","approvals"],"license":"MIT","_id":"granttap-mcp@0.6.10","maintainers":[{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"}],"homepage":"https://granttap.com","bugs":{"url":"https://github.com/sergii-ziborov/granttap-mcp/issues"},"bin":{"granttap":"bin/granttap-mcp.mjs","granttap-mcp":"bin/granttap-mcp.mjs"},"dist":{"shasum":"93d1e928156bb395bf7592158bafd7f0d6e85dc8","tarball":"https://registry.npmjs.org/granttap-mcp/-/granttap-mcp-0.6.10.tgz","fileCount":121,"integrity":"sha512-yzDcDCepYTGLIUNfqQpcIFQJcOkD3Q5pFatLE7dGbcxuKb0vK6TXY0IEegvQUnyYWQ4oKSnYPr2NYHLz0TGrUA==","signatures":[{"sig":"MEQCIHWTE+nHdvK/ALkV9s4PiLzU+3oKlGdzsvY/3nTTrV6IAiBEcewkkwkEbZKDnAFnb9XpN7ePXUKZXdUdLIBbk68G4g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/granttap-mcp@0.6.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3727288},"type":"module","engines":{"node":">=20"},"gitHead":"d8528cb062d110ba6b35dbeff507601726b249fd","scripts":{"test":"node --import tsx --test tests/*.test.ts","setup":"node bin/granttap-mcp.mjs setup","start":"node bin/granttap-mcp.mjs","status":"node bin/granttap-mcp.mjs status","inventory":"node scripts/quality/source-inventory.mjs","typecheck":"tsc --noEmit","cursor:repair":"node bin/granttap-mcp.mjs cursor repair","test:coverage":"c8 --all --extension .ts --exclude 'tests/**' --exclude 'scripts/**' node --import tsx --test tests/*.test.ts","internal:serve":"node bin/granttap-mcp.mjs internal serve","prepublishOnly":"npm run package:allowlist && npm test && npm run typecheck","package:allowlist":"node scripts/quality/package-allowlist.mjs"},"_npmUser":{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"},"overrides":{"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/sergii-ziborov/granttap-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"Personal live control center runtime for local coding agents on iPhone and Apple Watch.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ws":"^8.18.0","tsx":"^4.23.4","zod":"^3.24.1","qrcode":"^1.5.4","express":"^5.2.1","tweetnacl":"^1.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/qrcode":"^1.5.6","@types/express":"^5.0.3"},"_npmOperationalInternal":{"tmp":"tmp/granttap-mcp_0.6.10_1787488859293_0.6279728609143558","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"granttap-mcp","version":"0.7.0","keywords":["mcp","model-context-protocol","claude-code","codex","cursor","grok-build","iphone","apple-watch","e2ee","approvals"],"license":"MIT","_id":"granttap-mcp@0.7.0","maintainers":[{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"}],"homepage":"https://granttap.com","bugs":{"url":"https://github.com/sergii-ziborov/granttap-mcp/issues"},"bin":{"granttap":"bin/granttap-mcp.mjs","granttap-mcp":"bin/granttap-mcp.mjs"},"dist":{"shasum":"a3352b79a6f4d138e29988cb656cb0facb6110fc","tarball":"https://registry.npmjs.org/granttap-mcp/-/granttap-mcp-0.7.0.tgz","fileCount":142,"integrity":"sha512-OB+xD0W0YKnUgnDyffuTy38vhqhghhWhLPMq7mEJC56rBcmyT6Wx82rM9Vt1aC1UmFpat02D5pTNeveN3DFBdg==","signatures":[{"sig":"MEUCIFh+1xkUX6AaLk7griBtZUw6o98ioRnJEhpOhlwgdYekAiEAzSYg4qHaEH7vS2+kJv2mkcxpBCOA7DM9vNWLVlz9crk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/granttap-mcp@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3818649},"type":"module","engines":{"node":">=20"},"gitHead":"88d42132100d473f7b1b8742239ed09cac2de856","scripts":{"test":"HOME=$(mktemp -d) node --import tsx --test tests/*.test.ts","setup":"node bin/granttap-mcp.mjs setup","start":"node bin/granttap-mcp.mjs","status":"node bin/granttap-mcp.mjs status","inventory":"node scripts/quality/source-inventory.mjs","typecheck":"tsc --noEmit","cursor:repair":"node bin/granttap-mcp.mjs cursor repair","test:coverage":"HOME=$(mktemp -d) c8 --all --extension .ts --exclude 'tests/**' --exclude 'scripts/**' --exclude 'packages/core/relay-client-types.ts' --exclude 'apps/bridge/src/capabilities/types.ts' --exclude 'apps/bridge/src/reply/types.ts' --check-coverage --lines 95 --statements 95 --functions 95 --branches 85 node --import tsx --test tests/*.test.ts","internal:serve":"node bin/granttap-mcp.mjs internal serve","prepublishOnly":"npm run package:allowlist && npm run test:coverage && npm run typecheck","package:allowlist":"node scripts/quality/package-allowlist.mjs"},"_npmUser":{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"},"overrides":{"@hono/node-server":"2.0.11"},"deprecated":"Security: Project Mesh events could be published in another execution's name. Upgrade to 0.7.1.","repository":{"url":"git+https://github.com/sergii-ziborov/granttap-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"Personal live control center runtime for local coding agents on iPhone and Apple Watch.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ws":"^8.18.0","tsx":"^4.23.4","zod":"^3.24.1","qrcode":"^1.5.4","express":"^5.2.1","tweetnacl":"^1.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/qrcode":"^1.5.6","@types/express":"^5.0.3"},"_npmOperationalInternal":{"tmp":"tmp/granttap-mcp_0.7.0_1787515865549_0.09648417805501164","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"granttap-mcp","version":"0.7.1","keywords":["mcp","model-context-protocol","claude-code","codex","cursor","grok-build","iphone","apple-watch","e2ee","approvals"],"license":"MIT","_id":"granttap-mcp@0.7.1","maintainers":[{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"}],"homepage":"https://granttap.com","bugs":{"url":"https://github.com/sergii-ziborov/granttap-mcp/issues"},"bin":{"granttap":"bin/granttap-mcp.mjs","granttap-mcp":"bin/granttap-mcp.mjs"},"dist":{"shasum":"fcc02a3956a212b3589d03df56ea3e587d928406","tarball":"https://registry.npmjs.org/granttap-mcp/-/granttap-mcp-0.7.1.tgz","fileCount":148,"integrity":"sha512-poD8vuTkdoyA5hJYJH/j6XkDgAaEzI1vxpQZZpQ4SshxwY7o4bOwxBAbVDGGtedb+RJ8uvh9ib7H2O0LE/p57A==","signatures":[{"sig":"MEUCIBzpGcG4FVVnR9tNEzz2YNhAK6+WwmwTDzUxbckRGT+YAiEAhr1Rj8/jOvQBV5WLHhsqlPygHMtCVIMyRanj0tAw5HY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/granttap-mcp@0.7.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3845279},"type":"module","engines":{"node":">=20"},"gitHead":"b9d7b41a1fa8caa8446e4eaf2d780190f12f4b11","scripts":{"test":"HOME=$(mktemp -d) node --import tsx --test tests/*.test.ts","setup":"node bin/granttap-mcp.mjs setup","start":"node bin/granttap-mcp.mjs","status":"node bin/granttap-mcp.mjs status","inventory":"node scripts/quality/source-inventory.mjs","typecheck":"tsc --noEmit","cursor:repair":"node bin/granttap-mcp.mjs cursor repair","test:coverage":"HOME=$(mktemp -d) c8 --all --extension .ts --exclude 'tests/**' --exclude 'scripts/**' --exclude 'packages/core/relay-client-types.ts' --exclude 'apps/bridge/src/capabilities/types.ts' --exclude 'apps/bridge/src/reply/types.ts' --exclude 'apps/bridge/src/mesh/runtime-dependencies.ts' --check-coverage --lines 95 --statements 95 --functions 95 --branches 85 node --import tsx --test tests/*.test.ts","internal:serve":"node bin/granttap-mcp.mjs internal serve","prepublishOnly":"npm run package:allowlist && npm run test:coverage && npm run typecheck","package:allowlist":"node scripts/quality/package-allowlist.mjs"},"_npmUser":{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"},"overrides":{"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/sergii-ziborov/granttap-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"Personal live control center runtime for local coding agents on iPhone and Apple Watch.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ws":"^8.18.0","tsx":"^4.23.4","zod":"^3.24.1","qrcode":"^1.5.4","express":"^5.2.1","tweetnacl":"^1.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/qrcode":"^1.5.6","@types/express":"^5.0.3"},"_npmOperationalInternal":{"tmp":"tmp/granttap-mcp_0.7.1_1787547213893_0.07822677452463322","host":"s3://npm-registry-packages-npm-production"}},"0.7.6":{"name":"granttap-mcp","version":"0.7.6","keywords":["mcp","model-context-protocol","claude-code","codex","cursor","grok-build","iphone","apple-watch","e2ee","approvals"],"license":"MIT","_id":"granttap-mcp@0.7.6","maintainers":[{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"}],"homepage":"https://granttap.com","bugs":{"url":"https://github.com/sergii-ziborov/granttap-mcp/issues"},"bin":{"granttap":"bin/granttap-mcp.mjs","granttap-mcp":"bin/granttap-mcp.mjs"},"dist":{"shasum":"aca33d59c044203abc90c5c91fb21e30c3795399","tarball":"https://registry.npmjs.org/granttap-mcp/-/granttap-mcp-0.7.6.tgz","fileCount":153,"integrity":"sha512-iE3kV2Vn8bUZiZSTYslzBFN+s9x0n13Wx80RlZW40EPiKM+AmZBvNHJUjbrWqbWeontFYqkrpTSVRKV8cjkXtA==","signatures":[{"sig":"MEQCID1hyWMDQiF4BGL8RUcrEFGT4OhAe62OrGPAwydBnzohAiBlG6djJkcGwiG8qhVuRv2LMIR6QD0n87SKpM8/7lWY4g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/granttap-mcp@0.7.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3872188},"type":"module","engines":{"node":">=20"},"gitHead":"2d46f8720c790b7314a70f294fe2ae0da8ffeb94","scripts":{"test":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 node --import tsx --test tests/*.test.ts","setup":"node bin/granttap-mcp.mjs setup","start":"node bin/granttap-mcp.mjs","status":"node bin/granttap-mcp.mjs status","inventory":"node scripts/quality/source-inventory.mjs","typecheck":"tsc --noEmit","cursor:repair":"node bin/granttap-mcp.mjs cursor repair","test:coverage":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 c8 --all --extension .ts --exclude 'tests/**' --exclude 'scripts/**' --exclude 'packages/core/relay-client-types.ts' --exclude 'apps/bridge/src/capabilities/types.ts' --exclude 'apps/bridge/src/reply/types.ts' --exclude 'apps/bridge/src/mesh/runtime-dependencies.ts' --check-coverage --lines 95 --statements 95 --functions 95 --branches 85 node --import tsx --test tests/*.test.ts","internal:serve":"node bin/granttap-mcp.mjs internal serve","prepublishOnly":"npm run package:allowlist && npm run test:coverage && npm run typecheck","package:allowlist":"node scripts/quality/package-allowlist.mjs"},"_npmUser":{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"},"overrides":{"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/sergii-ziborov/granttap-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"Personal live control center runtime for local coding agents on iPhone and Apple Watch.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ws":"^8.18.0","tsx":"^4.23.4","zod":"^3.24.1","qrcode":"^1.5.4","express":"^5.2.1","tweetnacl":"^1.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/qrcode":"^1.5.6","@types/express":"^5.0.3"},"_npmOperationalInternal":{"tmp":"tmp/granttap-mcp_0.7.6_1787697123524_0.7108013110186953","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"granttap-mcp","version":"0.8.1","keywords":["mcp","model-context-protocol","claude-code","codex","cursor","grok-build","iphone","apple-watch","e2ee","approvals"],"license":"SEE LICENSE IN LICENSE","_id":"granttap-mcp@0.8.1","maintainers":[{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"}],"homepage":"https://granttap.com","bugs":{"url":"https://github.com/sergii-ziborov/granttap-mcp/issues"},"bin":{"granttap":"bin/granttap-mcp.mjs","granttap-mcp":"bin/granttap-mcp.mjs"},"dist":{"shasum":"c4dc1a9ef7c6e455a0e14b21f56355ce40319771","tarball":"https://registry.npmjs.org/granttap-mcp/-/granttap-mcp-0.8.1.tgz","fileCount":189,"integrity":"sha512-OoYrMHCCuU6N34ZdzzVHPxRNpWJSPW6V5P8l/qCw174ldUs2onrYqVje9l+xKeLRkYuJTzOo8EaFqDyn6AabmQ==","signatures":[{"sig":"MEQCIBkQuPCGUMhT/4H3TuutxWZBbICnYKq4eFmtDoxnMLeqAiAvVcsYMfkB1z9ebQ4clJr2pdHiwHx+ggPsSvZSrwREZA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/granttap-mcp@0.8.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3151057},"type":"module","engines":{"node":">=20"},"gitHead":"d732c42613b0008cbbc6617101122c43bb183fb9","scripts":{"test":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 node --import tsx --test tests/*.test.ts","setup":"node bin/granttap-mcp.mjs setup","start":"node bin/granttap-mcp.mjs","status":"node bin/granttap-mcp.mjs status","inventory":"node scripts/quality/source-inventory.mjs","typecheck":"tsc --noEmit","cursor:repair":"node bin/granttap-mcp.mjs cursor repair","test:coverage":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 c8 --all --extension .ts --exclude 'tests/**' --exclude 'scripts/**' --exclude 'packages/core/relay-client-types.ts' --exclude 'apps/bridge/src/capabilities/types.ts' --exclude 'apps/bridge/src/reply/types.ts' --exclude 'apps/bridge/src/mesh/runtime-dependencies.ts' --check-coverage --lines 95 --statements 95 --functions 95 --branches 85 node --import tsx --test tests/*.test.ts","internal:serve":"node bin/granttap-mcp.mjs internal serve","prepublishOnly":"npm run package:allowlist && npm run test:coverage && npm run typecheck","package:allowlist":"node scripts/quality/package-allowlist.mjs"},"_npmUser":{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"},"overrides":{"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/sergii-ziborov/granttap-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"Personal live control center runtime for local coding agents on iPhone and Apple Watch.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ws":"^8.18.0","tsx":"^4.23.4","zod":"^3.24.1","qrcode":"^1.5.4","express":"^5.2.1","tweetnacl":"^1.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/qrcode":"^1.5.6","@types/express":"^5.0.3"},"_npmOperationalInternal":{"tmp":"tmp/granttap-mcp_0.8.1_1788419760246_0.9230100308622711","host":"s3://npm-registry-packages-npm-production"}},"0.8.2":{"name":"granttap-mcp","version":"0.8.2","keywords":["mcp","model-context-protocol","claude-code","codex","cursor","grok-build","iphone","apple-watch","e2ee","approvals"],"license":"SEE LICENSE IN LICENSE","_id":"granttap-mcp@0.8.2","maintainers":[{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"}],"homepage":"https://granttap.com","bugs":{"url":"https://github.com/sergii-ziborov/granttap-mcp/issues"},"bin":{"granttap":"bin/granttap-mcp.mjs","granttap-mcp":"bin/granttap-mcp.mjs"},"dist":{"shasum":"cb24ba8e50412ea32f31111335360c473a5a1f49","tarball":"https://registry.npmjs.org/granttap-mcp/-/granttap-mcp-0.8.2.tgz","fileCount":205,"integrity":"sha512-fCb96DwbFgYr08FgWPF6zJuZO+Wa7/8OGgLKZdtlkuRCrQJs7dgGWrNL7+dv1B9Ff1VnvLWlZQyqSC9iP7ojLg==","signatures":[{"sig":"MEYCIQCFa5/MSGysekx1lGNPfyzSJwpa8tA809IvXDa4sJziywIhAMuObwJTHXaK8dP40AJNK+WvsHvIxw5QC+SMXPG8iL0X","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/granttap-mcp@0.8.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3253691},"type":"module","engines":{"node":">=20"},"gitHead":"e002716cd3cac2ad3bb38425833ce0fa3a6ff9cf","scripts":{"test":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 node --import tsx --test tests/*.test.ts","setup":"node bin/granttap-mcp.mjs setup","start":"node bin/granttap-mcp.mjs","status":"node bin/granttap-mcp.mjs status","inventory":"node scripts/quality/source-inventory.mjs","typecheck":"tsc --noEmit","cursor:repair":"node bin/granttap-mcp.mjs cursor repair","test:coverage":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 c8 --all --extension .ts --exclude 'tests/**' --exclude 'scripts/**' --exclude 'packages/core/relay-client-types.ts' --exclude 'apps/bridge/src/capabilities/types.ts' --exclude 'apps/bridge/src/reply/types.ts' --exclude 'apps/bridge/src/mesh/runtime-dependencies.ts' --check-coverage --lines 95 --statements 95 --functions 95 --branches 85 node --import tsx --test tests/*.test.ts","internal:serve":"node bin/granttap-mcp.mjs internal serve","prepublishOnly":"npm run package:allowlist && npm run test:coverage && npm run typecheck","package:allowlist":"node scripts/quality/package-allowlist.mjs"},"_npmUser":{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"},"overrides":{"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/sergii-ziborov/granttap-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"Personal live control center runtime for local coding agents on iPhone and Apple Watch.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ws":"^8.18.0","tsx":"^4.23.4","zod":"^3.24.1","qrcode":"^1.5.4","express":"^5.2.1","tweetnacl":"^1.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/qrcode":"^1.5.6","@types/express":"^5.0.3"},"_npmOperationalInternal":{"tmp":"tmp/granttap-mcp_0.8.2_1788567189029_0.01089276226737379","host":"s3://npm-registry-packages-npm-production"}},"0.8.3":{"name":"granttap-mcp","version":"0.8.3","keywords":["mcp","model-context-protocol","claude-code","codex","cursor","grok-build","iphone","apple-watch","e2ee","approvals"],"license":"SEE LICENSE IN LICENSE","_id":"granttap-mcp@0.8.3","maintainers":[{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"}],"homepage":"https://granttap.com","bugs":{"url":"https://github.com/sergii-ziborov/granttap-mcp/issues"},"bin":{"granttap":"bin/granttap-mcp.mjs","granttap-mcp":"bin/granttap-mcp.mjs"},"dist":{"shasum":"cac7d3c9ae8b4ba6773f1f46c5949b5b24ea1f12","tarball":"https://registry.npmjs.org/granttap-mcp/-/granttap-mcp-0.8.3.tgz","fileCount":205,"integrity":"sha512-zvYasEsxFdVtozVHwJWqcAiRxGXvcmpQrXSXXS3uLy7LL10Qe9B7hRTpmqsFWQAsZY5kueRkPK7M07Hlvj1reQ==","signatures":[{"sig":"MEUCIQDNX4ESneUAPCAvFXWsrXTZhW6ktZvWjWAq05DISCbx+QIgNmdzAZHZn7hUeAETtoECiuldr1+VIGmKOzTwBFEb2Fw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/granttap-mcp@0.8.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3268855},"type":"module","engines":{"node":">=20"},"gitHead":"98fe2c3e9a785d397cc0a18cb33be8aba564e8ea","scripts":{"test":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 node --import tsx --test tests/*.test.ts","setup":"node bin/granttap-mcp.mjs setup","start":"node bin/granttap-mcp.mjs","status":"node bin/granttap-mcp.mjs status","inventory":"node scripts/quality/source-inventory.mjs","typecheck":"tsc --noEmit","cursor:repair":"node bin/granttap-mcp.mjs cursor repair","test:coverage":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 c8 --all --extension .ts --exclude 'tests/**' --exclude 'scripts/**' --exclude 'packages/core/relay-client-types.ts' --exclude 'apps/bridge/src/capabilities/types.ts' --exclude 'apps/bridge/src/reply/types.ts' --exclude 'apps/bridge/src/mesh/runtime-dependencies.ts' --check-coverage --lines 95 --statements 95 --functions 95 --branches 85 node --import tsx --test tests/*.test.ts","internal:serve":"node bin/granttap-mcp.mjs internal serve","prepublishOnly":"npm run package:allowlist && npm run test:coverage && npm run typecheck","package:allowlist":"node scripts/quality/package-allowlist.mjs"},"_npmUser":{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"},"overrides":{"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/sergii-ziborov/granttap-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"Personal live control center runtime for local coding agents on iPhone and Apple Watch.","directories":{},"_nodeVersion":"22.23.1","dependencies":{"ws":"^8.18.0","tsx":"^4.23.4","zod":"^3.24.1","qrcode":"^1.5.4","express":"^5.2.1","tweetnacl":"^1.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/qrcode":"^1.5.6","@types/express":"^5.0.3"},"_npmOperationalInternal":{"tmp":"tmp/granttap-mcp_0.8.3_1788620270651_0.8227884258608869","host":"s3://npm-registry-packages-npm-production"}},"0.8.4":{"name":"granttap-mcp","version":"0.8.4","keywords":["mcp","model-context-protocol","claude-code","codex","cursor","grok-build","iphone","apple-watch","e2ee","approvals"],"license":"SEE LICENSE IN LICENSE","_id":"granttap-mcp@0.8.4","maintainers":[{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"}],"homepage":"https://granttap.com","bugs":{"url":"https://github.com/sergii-ziborov/granttap-mcp/issues"},"bin":{"granttap":"bin/granttap-mcp.mjs","granttap-mcp":"bin/granttap-mcp.mjs"},"dist":{"shasum":"888be322a0278573b05944706664b212f30b987a","tarball":"https://registry.npmjs.org/granttap-mcp/-/granttap-mcp-0.8.4.tgz","fileCount":211,"integrity":"sha512-HoAnS3nQy3kloV+4y/4CIQkgpGPsGikNQDHbakiJ6Fgjv0Fb09wTeLfFF4rdPQ94GAuEYNLzcc40a+bJqbdTgg==","signatures":[{"sig":"MEQCIDM8OUnQsWwa3KFfTrh/Mc537rTTPm9S8VXfd6hbuN9UAiB3dCXxJE+02Ckf4IwEUAbgIVue6GA23we34M6x6yF5Zg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/granttap-mcp@0.8.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3353488},"type":"module","engines":{"node":">=20"},"gitHead":"527cca6a77047a06dacb49fb2921435b75be6cd0","scripts":{"test":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 node --import tsx --test tests/*.test.ts","setup":"node bin/granttap-mcp.mjs setup","start":"node bin/granttap-mcp.mjs","status":"node bin/granttap-mcp.mjs status","inventory":"node scripts/quality/source-inventory.mjs","typecheck":"tsc --noEmit","cursor:repair":"node bin/granttap-mcp.mjs cursor repair","test:coverage":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 c8 --all --extension .ts --exclude 'tests/**' --exclude 'scripts/**' --exclude 'packages/core/relay-client-types.ts' --exclude 'apps/bridge/src/capabilities/types.ts' --exclude 'apps/bridge/src/reply/types.ts' --exclude 'apps/bridge/src/mesh/runtime-dependencies.ts' --check-coverage --lines 95 --statements 95 --functions 95 --branches 85 node --import tsx --test tests/*.test.ts","internal:serve":"node bin/granttap-mcp.mjs internal serve","prepublishOnly":"npm run package:allowlist && npm run test:coverage && npm run typecheck","package:allowlist":"node scripts/quality/package-allowlist.mjs"},"_npmUser":{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"},"overrides":{"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/sergii-ziborov/granttap-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"Personal live control center runtime for local coding agents on iPhone and Apple Watch.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ws":"^8.18.0","tsx":"^4.23.4","zod":"^3.24.1","qrcode":"^1.5.4","express":"^5.2.1","tweetnacl":"^1.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/qrcode":"^1.5.6","@types/express":"^5.0.3"},"_npmOperationalInternal":{"tmp":"tmp/granttap-mcp_0.8.4_1788690213965_0.8185428475127272","host":"s3://npm-registry-packages-npm-production"}},"0.8.5":{"name":"granttap-mcp","version":"0.8.5","keywords":["mcp","model-context-protocol","claude-code","codex","cursor","grok-build","iphone","apple-watch","e2ee","approvals"],"license":"SEE LICENSE IN LICENSE","_id":"granttap-mcp@0.8.5","maintainers":[{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"}],"homepage":"https://granttap.com","bugs":{"url":"https://github.com/sergii-ziborov/granttap-mcp/issues"},"bin":{"granttap":"bin/granttap-mcp.mjs","granttap-mcp":"bin/granttap-mcp.mjs"},"dist":{"shasum":"e55302cb74f2b318422ce9139b757a7e9a82bfa7","tarball":"https://registry.npmjs.org/granttap-mcp/-/granttap-mcp-0.8.5.tgz","fileCount":211,"integrity":"sha512-t6/uvHFfP/dpmdDzdd+zRfrK06paM/XaDrLgzDPKFCwbsX3esTqW9klYfRc1K04wz2nkmJrT8IZTfNctiyrIpg==","signatures":[{"sig":"MEUCIFa67LAj9IrTRQGPqeat5eBTOZEWXA02idIgZ8WY8/sBAiEAp8BPhHpr++hxcT06i8WywVQ1GqXK7GW+s9ROFQ5ZElI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/granttap-mcp@0.8.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3366868},"type":"module","engines":{"node":">=20"},"gitHead":"c7801c33c3c5407939a4aeeb47510b92af9c4abb","scripts":{"test":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 node --import tsx --test tests/*.test.ts","setup":"node bin/granttap-mcp.mjs setup","start":"node bin/granttap-mcp.mjs","status":"node bin/granttap-mcp.mjs status","inventory":"node scripts/quality/source-inventory.mjs","typecheck":"tsc --noEmit","cursor:repair":"node bin/granttap-mcp.mjs cursor repair","test:coverage":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 c8 --all --extension .ts --exclude 'tests/**' --exclude 'scripts/**' --exclude 'packages/core/relay-client-types.ts' --exclude 'apps/bridge/src/capabilities/types.ts' --exclude 'apps/bridge/src/reply/types.ts' --exclude 'apps/bridge/src/mesh/runtime-dependencies.ts' --check-coverage --lines 95 --statements 95 --functions 95 --branches 85 node --import tsx --test tests/*.test.ts","internal:serve":"node bin/granttap-mcp.mjs internal serve","prepublishOnly":"npm run package:allowlist && npm run test:coverage && npm run typecheck","package:allowlist":"node scripts/quality/package-allowlist.mjs"},"_npmUser":{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"},"overrides":{"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/sergii-ziborov/granttap-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"Personal live control center runtime for local coding agents on iPhone and Apple Watch.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ws":"^8.18.0","tsx":"^4.23.4","zod":"^3.24.1","qrcode":"^1.5.4","express":"^5.2.1","tweetnacl":"^1.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/qrcode":"^1.5.6","@types/express":"^5.0.3"},"_npmOperationalInternal":{"tmp":"tmp/granttap-mcp_0.8.5_1788696830622_0.7678834531210927","host":"s3://npm-registry-packages-npm-production"}},"0.8.6":{"name":"granttap-mcp","version":"0.8.6","keywords":["mcp","model-context-protocol","claude-code","codex","cursor","grok-build","iphone","apple-watch","e2ee","approvals"],"license":"SEE LICENSE IN LICENSE","_id":"granttap-mcp@0.8.6","maintainers":[{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"}],"homepage":"https://granttap.com","bugs":{"url":"https://github.com/sergii-ziborov/granttap-mcp/issues"},"bin":{"granttap":"bin/granttap-mcp.mjs","granttap-mcp":"bin/granttap-mcp.mjs"},"dist":{"shasum":"7f5d03962b1c0252880fa6cef4c099847b3e9816","tarball":"https://registry.npmjs.org/granttap-mcp/-/granttap-mcp-0.8.6.tgz","fileCount":213,"integrity":"sha512-2cIcFedzBcFUExXyK9WdlyvUvT8Ek4LQBdlah1HsRqdhfmzivEHyqHYjnomex96j7RSlJtE0uxj7Ka6oigaZDw==","signatures":[{"sig":"MEYCIQCM1D/X7CGvKQ5U9F4nmCC5xH10BuGACfoXVk4MosOrFgIhAOU5mzTBucT+zNsstRL9DxnD0sxViFsC6og0ch/bWvt8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/granttap-mcp@0.8.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":3377459},"type":"module","engines":{"node":">=20"},"gitHead":"02900196ec51014efac58912c875c822d7fd8f28","scripts":{"test":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 node --import tsx --test tests/*.test.ts","setup":"node bin/granttap-mcp.mjs setup","start":"node bin/granttap-mcp.mjs","status":"node bin/granttap-mcp.mjs status","inventory":"node scripts/quality/source-inventory.mjs","typecheck":"tsc --noEmit","cursor:repair":"node bin/granttap-mcp.mjs cursor repair","test:coverage":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 c8 --all --extension .ts --exclude 'tests/**' --exclude 'scripts/**' --exclude 'packages/core/relay-client-types.ts' --exclude 'apps/bridge/src/capabilities/types.ts' --exclude 'apps/bridge/src/reply/types.ts' --exclude 'apps/bridge/src/mesh/runtime-dependencies.ts' --check-coverage --lines 95 --statements 95 --functions 95 --branches 85 node --import tsx --test tests/*.test.ts","internal:serve":"node bin/granttap-mcp.mjs internal serve","prepublishOnly":"npm run package:allowlist && npm run test:coverage && npm run typecheck","package:allowlist":"node scripts/quality/package-allowlist.mjs"},"_npmUser":{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"},"overrides":{"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/sergii-ziborov/granttap-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"Personal live control center runtime for local coding agents on iPhone and Apple Watch.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ws":"^8.18.0","tsx":"^4.23.4","zod":"^3.24.1","qrcode":"^1.5.4","express":"^5.2.1","tweetnacl":"^1.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/qrcode":"^1.5.6","@types/express":"^5.0.3"},"_npmOperationalInternal":{"tmp":"tmp/granttap-mcp_0.8.6_1788711655292_0.2768717598682584","host":"s3://npm-registry-packages-npm-production"}},"0.8.7":{"name":"granttap-mcp","version":"0.8.7","keywords":["mcp","model-context-protocol","claude-code","codex","cursor","grok-build","iphone","apple-watch","e2ee","approvals"],"license":"SEE LICENSE IN LICENSE","_id":"granttap-mcp@0.8.7","maintainers":[{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"}],"homepage":"https://granttap.com","bugs":{"url":"https://github.com/sergii-ziborov/granttap-mcp/issues"},"bin":{"granttap":"bin/granttap-mcp.mjs","granttap-mcp":"bin/granttap-mcp.mjs"},"dist":{"shasum":"488a588bf479697acd3388997005e1853a1b8ecf","tarball":"https://registry.npmjs.org/granttap-mcp/-/granttap-mcp-0.8.7.tgz","fileCount":230,"integrity":"sha512-lGTqsS2O/nGfrvf0/vDAy3UFT6qDyDV+PKtIsQ2hKg6plCHn8YRAnoeoOEgpqvs0onDnNLhUHqgxeEAT4q7p+Q==","signatures":[{"sig":"MEQCIEvGp5F3/OYSo3rJC97kK+bOtdHybdJKByz1y+Ujki/YAiBSof30PJ/xybAp9YqlQRWlKxT3dIK0RaotmscqypfjFA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/granttap-mcp@0.8.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4748772},"type":"module","engines":{"node":">=20"},"gitHead":"964e9fc9e83634d98528782fd353ae1043b4e6c2","scripts":{"test":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 node --import tsx --test tests/*.test.ts","setup":"node bin/granttap-mcp.mjs setup","start":"node bin/granttap-mcp.mjs","status":"node bin/granttap-mcp.mjs status","inventory":"node scripts/quality/source-inventory.mjs","typecheck":"tsc --noEmit","cursor:repair":"node bin/granttap-mcp.mjs cursor repair","test:coverage":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 c8 --all --extension .ts --exclude 'tests/**' --exclude 'scripts/**' --exclude 'packages/core/relay-client-types.ts' --exclude 'apps/bridge/src/capabilities/types.ts' --exclude 'apps/bridge/src/reply/types.ts' --exclude 'apps/bridge/src/mesh/runtime-dependencies.ts' --check-coverage --lines 95 --statements 95 --functions 95 --branches 85 node --import tsx --test tests/*.test.ts","internal:serve":"node bin/granttap-mcp.mjs internal serve","prepublishOnly":"npm run package:allowlist && npm run test:coverage && npm run typecheck","package:allowlist":"node scripts/quality/package-allowlist.mjs"},"_npmUser":{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"},"overrides":{"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/sergii-ziborov/granttap-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"Personal live control center runtime for local coding agents on iPhone and Apple Watch.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ws":"^8.18.0","tsx":"^4.23.4","zod":"^3.24.1","qrcode":"^1.5.4","express":"^5.2.1","tweetnacl":"^1.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/qrcode":"^1.5.6","@types/express":"^5.0.3"},"_npmOperationalInternal":{"tmp":"tmp/granttap-mcp_0.8.7_1788902680016_0.9022831730574996","host":"s3://npm-registry-packages-npm-production"}},"0.8.8":{"name":"granttap-mcp","version":"0.8.8","keywords":["mcp","model-context-protocol","claude-code","codex","cursor","grok-build","iphone","apple-watch","e2ee","approvals"],"license":"SEE LICENSE IN LICENSE","_id":"granttap-mcp@0.8.8","maintainers":[{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"}],"homepage":"https://granttap.com","bugs":{"url":"https://github.com/sergii-ziborov/granttap-mcp/issues"},"bin":{"granttap":"bin/granttap-mcp.mjs","granttap-mcp":"bin/granttap-mcp.mjs"},"dist":{"shasum":"59cf75e8736130290a7e0abdfa5c4ff870769a29","tarball":"https://registry.npmjs.org/granttap-mcp/-/granttap-mcp-0.8.8.tgz","fileCount":230,"integrity":"sha512-DOb0n5LXCKkJHr8XLFdcQfllHKCkE86nFa/h1u6kYRLC2TxDM77Q5vCMBBCvEgTPRMnqyiCNNtQAkmq3Jcz6zw==","signatures":[{"sig":"MEUCIAlLGGpnn02WqEKpNgsbugijNOkfSm+Z8VXylhrgAkbPAiEAmSgkHCmb9tLxBhpV9zy4Ui+6GkIFDqv1roUJ2ePfyNs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIB3mK8i2DHk9BD+QF2bf2f1jX7hx88eHGnpfjDzrg9IZAiBE1+KViagT7k03ZK22qX/UdRWu6FHTx8a+e5JvvlR59A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/granttap-mcp@0.8.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4749738},"type":"module","engines":{"node":">=20"},"gitHead":"9bb597f15710becddde289f62c05f8cdfe9fb64b","scripts":{"test":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 node --import tsx --test tests/*.test.ts","setup":"node bin/granttap-mcp.mjs setup","start":"node bin/granttap-mcp.mjs","status":"node bin/granttap-mcp.mjs status","inventory":"node scripts/quality/source-inventory.mjs","typecheck":"tsc --noEmit","cursor:repair":"node bin/granttap-mcp.mjs cursor repair","test:coverage":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 c8 --all --extension .ts --exclude 'tests/**' --exclude 'scripts/**' --exclude 'packages/core/relay-client-types.ts' --exclude 'apps/bridge/src/capabilities/types.ts' --exclude 'apps/bridge/src/reply/types.ts' --exclude 'apps/bridge/src/mesh/runtime-dependencies.ts' --check-coverage --lines 95 --statements 95 --functions 95 --branches 85 node --import tsx --test tests/*.test.ts","internal:serve":"node bin/granttap-mcp.mjs internal serve","prepublishOnly":"npm run package:allowlist && npm run test:coverage && npm run typecheck","package:allowlist":"node scripts/quality/package-allowlist.mjs"},"_npmUser":{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"},"overrides":{"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/sergii-ziborov/granttap-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"Personal live control center runtime for local coding agents on iPhone and Apple Watch.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ws":"^8.18.0","tsx":"^4.23.4","zod":"^3.24.1","qrcode":"^1.5.4","express":"^5.2.1","tweetnacl":"^1.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/qrcode":"^1.5.6","@types/express":"^5.0.3"},"_npmOperationalInternal":{"tmp":"tmp/granttap-mcp_0.8.8_1789159980738_0.3849419518242161","host":"s3://npm-registry-packages-npm-production"}},"0.8.9":{"name":"granttap-mcp","version":"0.8.9","keywords":["mcp","model-context-protocol","claude-code","codex","cursor","grok-build","iphone","apple-watch","e2ee","approvals"],"license":"SEE LICENSE IN LICENSE","_id":"granttap-mcp@0.8.9","maintainers":[{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"}],"homepage":"https://granttap.com","bugs":{"url":"https://github.com/sergii-ziborov/granttap-mcp/issues"},"bin":{"granttap":"bin/granttap-mcp.mjs","granttap-mcp":"bin/granttap-mcp.mjs"},"dist":{"shasum":"803bfb4c51c847eff63004f59dffc49ae6bae786","tarball":"https://registry.npmjs.org/granttap-mcp/-/granttap-mcp-0.8.9.tgz","fileCount":235,"integrity":"sha512-+7zLo/FM4/FVFmhIJAkxd9k+BHWpGZgL2bwANKYsdIlMIRKmBULN7rbfFM1uWLepGXppKkdN9Www58gHKzPH/w==","signatures":[{"sig":"MEUCIAgvOqSnIRRF9xr1POS6InMaD/SoKedRVwoPeDkL7qoIAiEAuWFc9P/QXs/wlfs8uUnLSKGwTQfGiloBqr91SifMg7o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCICPLyV7s3V14Vw+VjL3z688TRuqkJ5axhsnGto1IEt9WAiEAgdTBhVXG8dFhilrkUTwb/J/ygUJSK4Cn1FOMzhdks74=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/granttap-mcp@0.8.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4762254},"type":"module","engines":{"node":">=20"},"gitHead":"8868b5ce7058ba9cb5f7d6a979fced0bfe555f2f","scripts":{"test":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 node --import tsx --test tests/*.test.ts","setup":"node bin/granttap-mcp.mjs setup","start":"node bin/granttap-mcp.mjs","status":"node bin/granttap-mcp.mjs status","inventory":"node scripts/quality/source-inventory.mjs","typecheck":"tsc --noEmit","cursor:repair":"node bin/granttap-mcp.mjs cursor repair","test:coverage":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 c8 --all --extension .ts --extension .js --exclude '**/tests/**' --exclude 'scripts/**' --exclude 'packages/core/relay-client-types.ts' --exclude 'apps/bridge/src/capabilities/types.ts' --exclude 'apps/bridge/src/reply/types.ts' --exclude 'apps/bridge/src/mesh/runtime-dependencies.ts' --check-coverage --lines 95 --statements 95 --functions 95 --branches 85 node --import tsx --test tests/*.test.ts","internal:serve":"node bin/granttap-mcp.mjs internal serve","prepublishOnly":"npm run package:allowlist && npm run test:coverage && npm run typecheck","package:allowlist":"node scripts/quality/package-allowlist.mjs"},"_npmUser":{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"},"overrides":{"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/sergii-ziborov/granttap-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"Personal live control center runtime for local coding agents on iPhone and Apple Watch.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ws":"^8.18.0","tsx":"^4.23.4","zod":"^3.24.1","qrcode":"^1.5.4","express":"^5.2.1","tweetnacl":"^1.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","jsdom":"^27.4.0","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/jsdom":"^27.0.0","@types/qrcode":"^1.5.6","@types/express":"^5.0.3"},"_npmOperationalInternal":{"tmp":"tmp/granttap-mcp_0.8.9_1789328723531_0.47949410558946304","host":"s3://npm-registry-packages-npm-production"}},"0.8.10":{"name":"granttap-mcp","version":"0.8.10","keywords":["mcp","model-context-protocol","claude-code","codex","cursor","grok-build","iphone","apple-watch","e2ee","approvals"],"license":"SEE LICENSE IN LICENSE","_id":"granttap-mcp@0.8.10","maintainers":[{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"}],"homepage":"https://granttap.com","bugs":{"url":"https://github.com/sergii-ziborov/granttap-mcp/issues"},"bin":{"granttap":"bin/granttap-mcp.mjs","granttap-mcp":"bin/granttap-mcp.mjs"},"dist":{"shasum":"4a4f735ac50378c44a8abd10b6b8d6c5134bfdef","tarball":"https://registry.npmjs.org/granttap-mcp/-/granttap-mcp-0.8.10.tgz","fileCount":235,"integrity":"sha512-TF/W+GuhB1UnZykPS2N+niPIf+P+MB1szy2P70h32bZwuoZ1ZSyl+cfKmVvURXtofvWVU1TuNCHUJxgDc5IrYQ==","signatures":[{"sig":"MEUCIQC/RPHVJAeaTWJaLbjduX6ZbEWpXFFQOR16PhNphMYwwAIgR9CwUu8KIsFcs5R27+u7gpSiu6yDEW2fPb9Jx7LZ5Ug=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIEAq1eSXsbx2N1MwfvabOZ3m122PF6Gc9usXcCewuKMlAiBqet211YtQL5k6WR5ZIdlycqR4wCACgT5aLX+GeoHctQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/granttap-mcp@0.8.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4764535},"type":"module","engines":{"node":">=20"},"gitHead":"4c60f83853bff68d2dfd2da929427328406a8468","scripts":{"test":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 node --import tsx --test tests/*.test.ts","setup":"node bin/granttap-mcp.mjs setup","start":"node bin/granttap-mcp.mjs","status":"node bin/granttap-mcp.mjs status","inventory":"node scripts/quality/source-inventory.mjs","typecheck":"tsc --noEmit","cursor:repair":"node bin/granttap-mcp.mjs cursor repair","test:coverage":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 c8 --all --extension .ts --extension .js --exclude '**/tests/**' --exclude 'scripts/**' --exclude 'packages/core/relay-client-types.ts' --exclude 'apps/bridge/src/capabilities/types.ts' --exclude 'apps/bridge/src/reply/types.ts' --exclude 'apps/bridge/src/mesh/runtime-dependencies.ts' --check-coverage --lines 95 --statements 95 --functions 95 --branches 85 node --import tsx --test tests/*.test.ts","internal:serve":"node bin/granttap-mcp.mjs internal serve","prepublishOnly":"npm run package:allowlist && npm run test:coverage && npm run typecheck","package:allowlist":"node scripts/quality/package-allowlist.mjs"},"_npmUser":{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"},"overrides":{"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/sergii-ziborov/granttap-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"Personal live control center runtime for local coding agents on iPhone and Apple Watch.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ws":"^8.18.0","tsx":"^4.23.4","zod":"^3.24.1","qrcode":"^1.5.4","express":"^5.2.1","tweetnacl":"^1.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","jsdom":"^27.4.0","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/jsdom":"^27.0.0","@types/qrcode":"^1.5.6","@types/express":"^5.0.3"},"_npmOperationalInternal":{"tmp":"tmp/granttap-mcp_0.8.10_1789330518484_0.07086581404504622","host":"s3://npm-registry-packages-npm-production"}},"0.8.11":{"name":"granttap-mcp","version":"0.8.11","keywords":["mcp","model-context-protocol","claude-code","codex","cursor","grok-build","iphone","apple-watch","e2ee","approvals"],"license":"SEE LICENSE IN LICENSE","_id":"granttap-mcp@0.8.11","maintainers":[{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"}],"homepage":"https://granttap.com","bugs":{"url":"https://github.com/sergii-ziborov/granttap-mcp/issues"},"bin":{"granttap":"bin/granttap-mcp.mjs","granttap-mcp":"bin/granttap-mcp.mjs"},"dist":{"shasum":"2ca6439fc2c0b4bbe288a2cefc747275cb4850ca","tarball":"https://registry.npmjs.org/granttap-mcp/-/granttap-mcp-0.8.11.tgz","fileCount":234,"integrity":"sha512-c99D4F2Eew/SPgspa/5imFPLwGO2yoKn+TQpoUs1iLvY5jXJVbkFtiuiy68q2cZOBvkGKWN4qHBfH6P46geZRg==","signatures":[{"sig":"MEUCIQCgf3yJViaRMfm6rSNbE6E/ZOr157wq4JI6E+8jR9C0eQIgZ3g94Slr0ulV04wlwNZQWoHgrHr6Pp99T3kG3t9sBdE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCopm7yLQOGDYuTLzFmdo7Ilh7qYIJRbBYgjv166p0dGAIgY/XLJI0UX+PI4qWA6/nQehSYcbiwhaBWplnJlqqTmCU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/granttap-mcp@0.8.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4757875},"type":"module","engines":{"node":">=20"},"gitHead":"c25b6fd8a9859d7f277379e2a657119fd1db2624","scripts":{"test":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 node --import tsx --test tests/*.test.ts","setup":"node bin/granttap-mcp.mjs setup","start":"node bin/granttap-mcp.mjs","status":"node bin/granttap-mcp.mjs status","inventory":"node scripts/quality/source-inventory.mjs","typecheck":"tsc --noEmit","cursor:repair":"node bin/granttap-mcp.mjs cursor repair","test:coverage":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 c8 --all --extension .ts --extension .js --exclude '**/tests/**' --exclude 'scripts/**' --exclude 'packages/core/relay-client-types.ts' --exclude 'apps/bridge/src/capabilities/types.ts' --exclude 'apps/bridge/src/reply/types.ts' --exclude 'apps/bridge/src/mesh/runtime-dependencies.ts' --check-coverage --lines 95 --statements 95 --functions 95 --branches 85 node --import tsx --test tests/*.test.ts","internal:serve":"node bin/granttap-mcp.mjs internal serve","prepublishOnly":"npm run package:allowlist && npm run test:coverage && npm run typecheck","package:allowlist":"node scripts/quality/package-allowlist.mjs"},"_npmUser":{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"},"overrides":{"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/sergii-ziborov/granttap-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"Personal live control center runtime for local coding agents on iPhone and Apple Watch.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ws":"^8.18.0","tsx":"^4.23.4","zod":"^3.24.1","qrcode":"^1.5.4","express":"^5.2.1","tweetnacl":"^1.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","jsdom":"^27.4.0","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/jsdom":"^27.0.0","@types/qrcode":"^1.5.6","@types/express":"^5.0.3"},"_npmOperationalInternal":{"tmp":"tmp/granttap-mcp_0.8.11_1789333384369_0.29778504253576","host":"s3://npm-registry-packages-npm-production"}},"0.8.12":{"name":"granttap-mcp","version":"0.8.12","keywords":["mcp","model-context-protocol","claude-code","codex","cursor","grok-build","iphone","apple-watch","e2ee","approvals"],"license":"SEE LICENSE IN LICENSE","_id":"granttap-mcp@0.8.12","maintainers":[{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"}],"homepage":"https://granttap.com","bugs":{"url":"https://github.com/sergii-ziborov/granttap-mcp/issues"},"bin":{"granttap":"bin/granttap-mcp.mjs","granttap-mcp":"bin/granttap-mcp.mjs"},"dist":{"shasum":"a9fb65a7ad38972569e968cfa86aaa6ed4074d6f","tarball":"https://registry.npmjs.org/granttap-mcp/-/granttap-mcp-0.8.12.tgz","fileCount":234,"integrity":"sha512-MznBjkvThQ+91i5xNcCxrRGVkLpmx6+HHuQphyRjfTYHCHeElcEZtC0X25davNtXIoGEulq0uqDc/3qQ96UJEw==","signatures":[{"sig":"MEUCIAmzb+BdkEGtDcMGG4+jIzM1nZS6V2hMFWNwDw5DH/kxAiEAlRPilVsPtv4NzjOMwFc1iov+DKK/BmVWBfGnfHlX7kg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCID84i5/QsZdex1UxdA2g7ID8VcKTtZHzN9VySMJhk63OAiEAn/8vBa7yQUgebcbJo7XAW6R+OfW1ubUEJG0D3CZvLKo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/granttap-mcp@0.8.12","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4757766},"type":"module","engines":{"node":">=20"},"gitHead":"730c10a48b926c0c8765b86b9f4783ef20be0bc7","scripts":{"test":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 node --import tsx --test tests/*.test.ts","setup":"node bin/granttap-mcp.mjs setup","start":"node bin/granttap-mcp.mjs","status":"node bin/granttap-mcp.mjs status","inventory":"node scripts/quality/source-inventory.mjs","typecheck":"tsc --noEmit","cursor:repair":"node bin/granttap-mcp.mjs cursor repair","test:coverage":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 c8 --all --extension .ts --extension .js --exclude '**/tests/**' --exclude 'scripts/**' --exclude 'packages/core/relay-client-types.ts' --exclude 'apps/bridge/src/capabilities/types.ts' --exclude 'apps/bridge/src/reply/types.ts' --exclude 'apps/bridge/src/mesh/runtime-dependencies.ts' --check-coverage --lines 95 --statements 95 --functions 95 --branches 85 node --import tsx --test tests/*.test.ts","internal:serve":"node bin/granttap-mcp.mjs internal serve","prepublishOnly":"npm run package:allowlist && npm run test:coverage && npm run typecheck","package:allowlist":"node scripts/quality/package-allowlist.mjs"},"_npmUser":{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"},"overrides":{"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/sergii-ziborov/granttap-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"Personal live control center runtime for local coding agents on iPhone and Apple Watch.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ws":"^8.18.0","tsx":"^4.23.4","zod":"^3.24.1","qrcode":"^1.5.4","express":"^5.2.1","tweetnacl":"^1.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","jsdom":"^27.4.0","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/jsdom":"^27.0.0","@types/qrcode":"^1.5.6","@types/express":"^5.0.3"},"_npmOperationalInternal":{"tmp":"tmp/granttap-mcp_0.8.12_1789335958010_0.9823512616626124","host":"s3://npm-registry-packages-npm-production"}},"0.8.13":{"name":"granttap-mcp","version":"0.8.13","keywords":["mcp","model-context-protocol","claude-code","codex","cursor","grok-build","iphone","apple-watch","e2ee","approvals"],"license":"SEE LICENSE IN LICENSE","_id":"granttap-mcp@0.8.13","maintainers":[{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"}],"homepage":"https://granttap.com","bugs":{"url":"https://github.com/sergii-ziborov/granttap-mcp/issues"},"bin":{"granttap":"bin/granttap-mcp.mjs","granttap-mcp":"bin/granttap-mcp.mjs"},"dist":{"shasum":"c039a45b2726136a47975bf8eb790323f49e8e34","tarball":"https://registry.npmjs.org/granttap-mcp/-/granttap-mcp-0.8.13.tgz","fileCount":235,"integrity":"sha512-jrEayLzi8WRqGkoYQJasVMxXJRB35h50LwaGB3pFL6lUgWunKOJc86a9GsM8GPxrQq7mvd2Bwhr8gCAZ0Mz8PA==","signatures":[{"sig":"MEUCIGjMpFlDXRYgCbXxbe7BXNeFosXA3QS/Wh7+PA8JqTCZAiEA/j5KUy/Lv3tKzfUvfst589iTibLl8+2F9Pb6fhH6Ysg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCA8yr2pyxO5zrrvVsCGlOwzYiIEtwlrfPkNXBgGszPdAIhAMBWkc6IvPipMA+OEXSIEoCMORzZkBLYun4A0mbwUB+T","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/granttap-mcp@0.8.13","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4761308},"type":"module","engines":{"node":">=20"},"gitHead":"b25002578fc0dc4d54f1a2856ae96df5f40c77a4","scripts":{"test":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 node --import tsx --test tests/*.test.ts","setup":"node bin/granttap-mcp.mjs setup","start":"node bin/granttap-mcp.mjs","status":"node bin/granttap-mcp.mjs status","inventory":"node scripts/quality/source-inventory.mjs","typecheck":"tsc --noEmit","cursor:repair":"node bin/granttap-mcp.mjs cursor repair","test:coverage":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 c8 --all --extension .ts --extension .js --exclude '**/tests/**' --exclude 'scripts/**' --exclude 'packages/core/relay-client-types.ts' --exclude 'apps/bridge/src/capabilities/types.ts' --exclude 'apps/bridge/src/reply/types.ts' --exclude 'apps/bridge/src/mesh/runtime-dependencies.ts' --check-coverage --lines 95 --statements 95 --functions 95 --branches 85 node --import tsx --test tests/*.test.ts","internal:serve":"node bin/granttap-mcp.mjs internal serve","prepublishOnly":"npm run package:allowlist && npm run test:coverage && npm run typecheck","package:allowlist":"node scripts/quality/package-allowlist.mjs"},"_npmUser":{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"},"overrides":{"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/sergii-ziborov/granttap-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"Personal live control center runtime for local coding agents on iPhone and Apple Watch.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ws":"^8.18.0","tsx":"^4.23.4","zod":"^3.24.1","qrcode":"^1.5.4","express":"^5.2.1","tweetnacl":"^1.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","jsdom":"^27.4.0","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/jsdom":"^27.0.0","@types/qrcode":"^1.5.6","@types/express":"^5.0.3"},"_npmOperationalInternal":{"tmp":"tmp/granttap-mcp_0.8.13_1789347134550_0.8812244164254897","host":"s3://npm-registry-packages-npm-production"}},"0.8.14":{"name":"granttap-mcp","version":"0.8.14","keywords":["mcp","model-context-protocol","claude-code","codex","cursor","grok-build","iphone","apple-watch","e2ee","approvals"],"license":"SEE LICENSE IN LICENSE","_id":"granttap-mcp@0.8.14","maintainers":[{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"}],"homepage":"https://granttap.com","bugs":{"url":"https://github.com/sergii-ziborov/granttap-mcp/issues"},"bin":{"granttap":"bin/granttap-mcp.mjs","granttap-mcp":"bin/granttap-mcp.mjs"},"dist":{"shasum":"629b563229f55b4a6434c6adb833ec397b9014ef","tarball":"https://registry.npmjs.org/granttap-mcp/-/granttap-mcp-0.8.14.tgz","fileCount":235,"integrity":"sha512-4Smhuig6UnVW9MeSMnFhIl4HqQmvVHAPsjiQ56zrNvOfAOOfaGjUpsOqhHMHP4ECTIibeWDiZowFzmxWl6SefQ==","signatures":[{"sig":"MEUCIQCSyqO79Zc6tdcAK6f+X3SZjT4mmrJaLladdu5bWPFG4wIgHyAk/DhDTLXZq4v4j8g4njkqqn4NpUN20VtnLlFlocw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDcYdd2qkxEQG85ZW5kLm1xwItKR+fDSwrqji40WfiTCwIgfISlDfIr/BehYAkvN2pjRiyAl1PmRUSLSDHQDpR4rxc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/granttap-mcp@0.8.14","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4761747},"type":"module","engines":{"node":">=20"},"gitHead":"026102292968ff5c0bac647836c25ed7afc0b556","scripts":{"test":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 node --import tsx --test tests/*.test.ts","setup":"node bin/granttap-mcp.mjs setup","start":"node bin/granttap-mcp.mjs","status":"node bin/granttap-mcp.mjs status","inventory":"node scripts/quality/source-inventory.mjs","typecheck":"tsc --noEmit","cursor:repair":"node bin/granttap-mcp.mjs cursor repair","test:coverage":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 c8 --all --extension .ts --extension .js --exclude '**/tests/**' --exclude 'scripts/**' --exclude 'packages/core/relay-client-types.ts' --exclude 'apps/bridge/src/capabilities/types.ts' --exclude 'apps/bridge/src/reply/types.ts' --exclude 'apps/bridge/src/mesh/runtime-dependencies.ts' --check-coverage --lines 95 --statements 95 --functions 95 --branches 85 node --import tsx --test tests/*.test.ts","internal:serve":"node bin/granttap-mcp.mjs internal serve","prepublishOnly":"npm run package:allowlist && npm run test:coverage && npm run typecheck","package:allowlist":"node scripts/quality/package-allowlist.mjs"},"_npmUser":{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"},"overrides":{"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/sergii-ziborov/granttap-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"Personal live control center runtime for local coding agents on iPhone and Apple Watch.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ws":"^8.18.0","tsx":"^4.23.4","zod":"^3.24.1","qrcode":"^1.5.4","express":"^5.2.1","tweetnacl":"^1.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","jsdom":"^27.4.0","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/jsdom":"^27.0.0","@types/qrcode":"^1.5.6","@types/express":"^5.0.3"},"_npmOperationalInternal":{"tmp":"tmp/granttap-mcp_0.8.14_1789347782156_0.9712933358607123","host":"s3://npm-registry-packages-npm-production"}},"0.8.15":{"name":"granttap-mcp","version":"0.8.15","keywords":["mcp","model-context-protocol","claude-code","codex","cursor","grok-build","iphone","apple-watch","e2ee","approvals"],"license":"SEE LICENSE IN LICENSE","_id":"granttap-mcp@0.8.15","maintainers":[{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"}],"homepage":"https://granttap.com","bugs":{"url":"https://github.com/sergii-ziborov/granttap-mcp/issues"},"bin":{"granttap":"bin/granttap-mcp.mjs","granttap-mcp":"bin/granttap-mcp.mjs"},"dist":{"shasum":"9ace9d3d0ab605c6c90fafe57b3d3537d7758ce7","tarball":"https://registry.npmjs.org/granttap-mcp/-/granttap-mcp-0.8.15.tgz","fileCount":236,"integrity":"sha512-0j4+PF0CYfjj0cqhvhEqPdepoSoSLrG6HwbPVlMIEppi3dgR7FFhAFX8MC9EPFaG2rQBH0Gn7ylV+eSnzKeMqA==","signatures":[{"sig":"MEYCIQCXZVKGyB/r7Et3kUTS3ogoZ3QhbhBSSH8IR9vs7LS3iAIhAOHpbETUnDcpO7A6x/hHFpOG+OrIVW8SIvxhncgHDGLI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDz/Y5l0AttoiKK4Q53Uf0fAdGgxdUtu+N4AyAby5OfJAIgbqA0y66p+FOHofbNpCHZyfXWA4u4Ug9N/pgI9cK+2Zk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/granttap-mcp@0.8.15","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4770990},"type":"module","engines":{"node":">=20"},"gitHead":"ee334391810f78fb976b845744e943113581f482","scripts":{"test":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 node --import tsx --test tests/*.test.ts","setup":"node bin/granttap-mcp.mjs setup","start":"node bin/granttap-mcp.mjs","status":"node bin/granttap-mcp.mjs status","inventory":"node scripts/quality/source-inventory.mjs","typecheck":"tsc --noEmit","cursor:repair":"node bin/granttap-mcp.mjs cursor repair","test:coverage":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 c8 --all --extension .ts --extension .js --exclude '**/tests/**' --exclude 'scripts/**' --exclude 'packages/core/relay-client-types.ts' --exclude 'apps/bridge/src/capabilities/types.ts' --exclude 'apps/bridge/src/reply/types.ts' --exclude 'apps/bridge/src/mesh/runtime-dependencies.ts' --check-coverage --lines 95 --statements 95 --functions 95 --branches 85 node --import tsx --test tests/*.test.ts","internal:serve":"node bin/granttap-mcp.mjs internal serve","prepublishOnly":"npm run package:allowlist && npm run test:coverage && npm run typecheck","package:allowlist":"node scripts/quality/package-allowlist.mjs"},"_npmUser":{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"},"overrides":{"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/sergii-ziborov/granttap-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"Personal live control center runtime for local coding agents on iPhone and Apple Watch.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ws":"^8.18.0","tsx":"^4.23.4","zod":"^3.24.1","qrcode":"^1.5.4","express":"^5.2.1","tweetnacl":"^1.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","jsdom":"^27.4.0","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/jsdom":"^27.0.0","@types/qrcode":"^1.5.6","@types/express":"^5.0.3"},"_npmOperationalInternal":{"tmp":"tmp/granttap-mcp_0.8.15_1789375917809_0.8970659999116033","host":"s3://npm-registry-packages-npm-production"}},"0.8.16":{"name":"granttap-mcp","version":"0.8.16","keywords":["mcp","model-context-protocol","claude-code","codex","cursor","grok-build","iphone","apple-watch","e2ee","approvals"],"license":"SEE LICENSE IN LICENSE","_id":"granttap-mcp@0.8.16","maintainers":[{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"}],"homepage":"https://granttap.com","bugs":{"url":"https://github.com/sergii-ziborov/granttap-mcp/issues"},"bin":{"granttap":"bin/granttap-mcp.mjs","granttap-mcp":"bin/granttap-mcp.mjs"},"dist":{"shasum":"9f4d78a4927527b7ff3a2f8d5868322619da3cc6","tarball":"https://registry.npmjs.org/granttap-mcp/-/granttap-mcp-0.8.16.tgz","fileCount":236,"integrity":"sha512-E4wUYWoD9ULdcjMkmciSTZYJOw8TmrwBNbquJa0bXxkyMoiQ2ZJ3Tb7qrr6muWnhy94g5hb4/0+cAAsVGhoNdg==","signatures":[{"sig":"MEUCIAameUzxDBi57ezvrEfnz9RPa5B/B0f6YW8/4o12ecihAiEAqil9qNe8U6LVF5xd7WvEhj4NGDD11b0jPMaxJztpB/s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIE9/5oS38EcP3jGbaQXNAcUA8TpwWb9RtH2iuGGjt4eNAiA+WHhcv8Ak9volIc3jlOfSFCPE5QIgcu8EH6iykTkUkg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/granttap-mcp@0.8.16","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4772072},"type":"module","engines":{"node":">=20"},"gitHead":"d83bce2d5884222914d03dc7ea8db53541e4ac0f","scripts":{"test":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 node --import tsx --test tests/*.test.ts","setup":"node bin/granttap-mcp.mjs setup","start":"node bin/granttap-mcp.mjs","status":"node bin/granttap-mcp.mjs status","inventory":"node scripts/quality/source-inventory.mjs","typecheck":"tsc --noEmit","cursor:repair":"node bin/granttap-mcp.mjs cursor repair","test:coverage":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 c8 --all --extension .ts --extension .js --exclude '**/tests/**' --exclude 'scripts/**' --exclude 'packages/core/relay-client-types.ts' --exclude 'apps/bridge/src/capabilities/types.ts' --exclude 'apps/bridge/src/reply/types.ts' --exclude 'apps/bridge/src/mesh/runtime-dependencies.ts' --check-coverage --lines 95 --statements 95 --functions 95 --branches 85 node --import tsx --test tests/*.test.ts","internal:serve":"node bin/granttap-mcp.mjs internal serve","prepublishOnly":"npm run package:allowlist && npm run test:coverage && npm run typecheck","package:allowlist":"node scripts/quality/package-allowlist.mjs"},"_npmUser":{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"},"overrides":{"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/sergii-ziborov/granttap-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"Personal live control center runtime for local coding agents on iPhone and Apple Watch.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ws":"^8.18.0","tsx":"^4.23.4","zod":"^3.24.1","qrcode":"^1.5.4","express":"^5.2.1","tweetnacl":"^1.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","jsdom":"^27.4.0","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/jsdom":"^27.0.0","@types/qrcode":"^1.5.6","@types/express":"^5.0.3"},"_npmOperationalInternal":{"tmp":"tmp/granttap-mcp_0.8.16_1789376579820_0.6919113536220267","host":"s3://npm-registry-packages-npm-production"}},"0.8.17":{"name":"granttap-mcp","version":"0.8.17","keywords":["mcp","model-context-protocol","claude-code","codex","cursor","grok-build","iphone","apple-watch","e2ee","approvals"],"license":"MIT","_id":"granttap-mcp@0.8.17","maintainers":[{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"}],"homepage":"https://granttap.com","bugs":{"url":"https://github.com/sergii-ziborov/granttap-mcp/issues"},"bin":{"granttap":"bin/granttap-mcp.mjs","granttap-mcp":"bin/granttap-mcp.mjs"},"dist":{"shasum":"c4672d0095fd552072c40b81254c2c218fb62f0d","tarball":"https://registry.npmjs.org/granttap-mcp/-/granttap-mcp-0.8.17.tgz","fileCount":235,"integrity":"sha512-W9OoEQdzchgwewzVGWfb4AGQe7uQxKcAGWEeLt1mePdu4jd16zlkQ1JRolc8WOpw6o9Usr5ZzBFk7FgXm/P9mg==","signatures":[{"sig":"MEUCIB1BRg9Q89wZ0jxjBMDX9iHXbMSOAXzpb3FFAsS1bxIfAiEAqfs90u2cKIrSmq+tfOt1SdjnV02vxBfxfstl/QQfPRE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCICViCuw0s/XdijHsjtOipKx2tf7h7rwnLZd8ypl0Ak4SAiAk0WJs0/U4TRs5QkwfUMxrraNs00FYCMKjv/mEorPy/A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/granttap-mcp@0.8.17","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4766508},"type":"module","engines":{"node":">=20"},"gitHead":"36bdbd356d0487261ac25152dc9874033cf4e7ab","scripts":{"test":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 node --import tsx --test tests/*.test.ts","setup":"node bin/granttap-mcp.mjs setup","start":"node bin/granttap-mcp.mjs","status":"node bin/granttap-mcp.mjs status","inventory":"node scripts/quality/source-inventory.mjs","typecheck":"tsc --noEmit","cursor:repair":"node bin/granttap-mcp.mjs cursor repair","test:coverage":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 c8 --all --extension .ts --extension .js --exclude '**/tests/**' --exclude 'scripts/**' --exclude 'packages/core/relay-client-types.ts' --exclude 'apps/bridge/src/capabilities/types.ts' --exclude 'apps/bridge/src/reply/types.ts' --exclude 'apps/bridge/src/mesh/runtime-dependencies.ts' --check-coverage --lines 95 --statements 95 --functions 95 --branches 85 node --import tsx --test tests/*.test.ts","internal:serve":"node bin/granttap-mcp.mjs internal serve","prepublishOnly":"npm run package:allowlist && npm run test:coverage && npm run typecheck","package:allowlist":"node scripts/quality/package-allowlist.mjs"},"_npmUser":{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"},"overrides":{"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/sergii-ziborov/granttap-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"Personal live control center runtime for local coding agents on iPhone and Apple Watch.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ws":"^8.18.0","tsx":"^4.23.4","zod":"^3.24.1","qrcode":"^1.5.4","express":"^5.2.1","tweetnacl":"^1.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","jsdom":"^27.4.0","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/jsdom":"^27.0.0","@types/qrcode":"^1.5.6","@types/express":"^5.0.3"},"_npmOperationalInternal":{"tmp":"tmp/granttap-mcp_0.8.17_1789377916500_0.19019644300803007","host":"s3://npm-registry-packages-npm-production"}},"0.8.18":{"name":"granttap-mcp","version":"0.8.18","keywords":["mcp","model-context-protocol","claude-code","codex","cursor","grok-build","iphone","apple-watch","e2ee","approvals"],"license":"MIT","_id":"granttap-mcp@0.8.18","maintainers":[{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"}],"homepage":"https://granttap.com","bugs":{"url":"https://github.com/sergii-ziborov/granttap-mcp/issues"},"bin":{"granttap":"bin/granttap-mcp.mjs","granttap-mcp":"bin/granttap-mcp.mjs"},"dist":{"shasum":"21c0c904d74754b92e03560076c61bc95f8b765c","tarball":"https://registry.npmjs.org/granttap-mcp/-/granttap-mcp-0.8.18.tgz","fileCount":243,"integrity":"sha512-lxo7p7DzRACRe6W/BDX9N6e9p6PoswjGPjetfY+OSuLBiZVMrOQYiuQqcOjVIE0nuJpZL581BXKAgw6+ISIQJQ==","signatures":[{"sig":"MEUCIDhOvVNb58E83Y38WLjFlxd/vEq3NY6NbR8jjsxt7VGvAiEA2o0oi3U/WpLlzNBwq9CIoF2zY4Lq7WBmi9VbIJNnYF4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIFEa4CioxQJKfLbhj7KFsMw0Ix+KszjFdgA0UGJdS+p9AiEA3PH8s1f2uoFFKZr4jZAYnpzG0nZqgcpJsk++o0U15vk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/granttap-mcp@0.8.18","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":4951571},"type":"module","engines":{"node":">=20"},"gitHead":"e5552aea46e2f4dd51eb53d8e62524956d2ac3f9","scripts":{"test":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 node --import tsx --test tests/*.test.ts","setup":"node bin/granttap-mcp.mjs setup","start":"node bin/granttap-mcp.mjs","status":"node bin/granttap-mcp.mjs status","inventory":"node scripts/quality/source-inventory.mjs","typecheck":"tsc --noEmit","cursor:repair":"node bin/granttap-mcp.mjs cursor repair","test:coverage":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 c8 --all --extension .ts --extension .js --exclude '**/tests/**' --exclude 'scripts/**' --exclude 'packages/core/relay-client-types.ts' --exclude 'apps/bridge/src/capabilities/types.ts' --exclude 'apps/bridge/src/reply/types.ts' --exclude 'apps/bridge/src/mesh/runtime-dependencies.ts' --check-coverage --lines 95 --statements 95 --functions 95 --branches 85 node --import tsx --test tests/*.test.ts","internal:serve":"node bin/granttap-mcp.mjs internal serve","prepublishOnly":"npm run package:allowlist && npm run test:coverage && npm run typecheck","package:allowlist":"node scripts/quality/package-allowlist.mjs"},"_npmUser":{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"},"overrides":{"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/sergii-ziborov/granttap-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"Personal live control center runtime for local coding agents on iPhone and Apple Watch.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ws":"^8.18.0","tsx":"^4.23.4","zod":"^3.24.1","qrcode":"^1.5.4","express":"^5.2.1","tweetnacl":"^1.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","jsdom":"^27.4.0","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/jsdom":"^27.0.0","@types/qrcode":"^1.5.6","@types/express":"^5.0.3"},"_npmOperationalInternal":{"tmp":"tmp/granttap-mcp_0.8.18_1789383969214_0.16106446120303763","host":"s3://npm-registry-packages-npm-production"}},"0.8.19":{"name":"granttap-mcp","version":"0.8.19","keywords":["mcp","model-context-protocol","claude-code","codex","cursor","grok-build","iphone","apple-watch","e2ee","approvals"],"license":"MIT","_id":"granttap-mcp@0.8.19","maintainers":[{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"}],"homepage":"https://granttap.com","bugs":{"url":"https://github.com/sergii-ziborov/granttap-mcp/issues"},"bin":{"granttap":"bin/granttap-mcp.mjs","granttap-mcp":"bin/granttap-mcp.mjs"},"dist":{"shasum":"bce285f61faad930aaa76041a4af995deb4fc0f2","tarball":"https://registry.npmjs.org/granttap-mcp/-/granttap-mcp-0.8.19.tgz","fileCount":343,"integrity":"sha512-kiBbJcYJYzP8D1ci1EFT1UQrMY1NCvpLXdW1N3DTEMVTrIFprirt8+dqDKsTYZfZo0WsvYRBukH4I96M+Pai7w==","signatures":[{"sig":"MEUCICH2OrLOEWN/Jr3UglLpQvUfvuOk8cWgb5wc+p1BgLAKAiEA1dbF2jU2BXjEHsFlwrMUVLL9tnhMEREk+R07Ivn8dlU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIEqosZJOn6TRKdBJWy4OCpBuA13lEGBY/dhVc8ZC2Ih0AiEA4FTWVqY7g4Eb+haJdHl2xDvU0Pf7q4cOCLjs+2fctMs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/granttap-mcp@0.8.19","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":5237001},"type":"module","engines":{"node":">=20"},"gitHead":"19d9d3e8a50f2c96c3e20575cf1e2550ee900675","scripts":{"test":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 node scripts/quality/run-tests.mjs","setup":"node bin/granttap-mcp.mjs setup","start":"node bin/granttap-mcp.mjs","status":"node bin/granttap-mcp.mjs status","inventory":"node scripts/quality/source-inventory.mjs","structure":"node scripts/quality/structure.mjs","typecheck":"tsc --noEmit","cursor:repair":"node bin/granttap-mcp.mjs cursor repair","test:coverage":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 c8 --all --extension .ts --extension .js --exclude '**/tests/**' --exclude 'scripts/**' --exclude 'packages/core/relay-client-types.ts' --exclude 'apps/bridge/src/capabilities/types.ts' --exclude 'apps/bridge/src/reply/payload/types.ts' --exclude 'apps/bridge/src/mesh/runtime/dependencies.ts' --check-coverage --lines 95 --statements 95 --functions 95 --branches 85 node scripts/quality/run-tests.mjs","internal:serve":"node bin/granttap-mcp.mjs internal serve","prepublishOnly":"npm run inventory && npm run structure -- --strict && npm run package:allowlist && npm run test:coverage && npm run typecheck","package:allowlist":"node scripts/quality/package-allowlist.mjs"},"_npmUser":{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"},"overrides":{"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/sergii-ziborov/granttap-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"Personal live control center runtime for local coding agents on iPhone and Apple Watch.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ws":"^8.18.0","tsx":"^4.23.4","zod":"^3.24.1","qrcode":"^1.5.4","express":"^5.2.1","tweetnacl":"^1.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","jsdom":"^27.4.0","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/jsdom":"^27.0.0","@types/qrcode":"^1.5.6","@types/express":"^5.0.3"},"_npmOperationalInternal":{"tmp":"tmp/granttap-mcp_0.8.19_1790177760839_0.6035878176293679","host":"s3://npm-registry-packages-npm-production"}},"0.8.20":{"name":"granttap-mcp","version":"0.8.20","keywords":["mcp","model-context-protocol","claude-code","codex","cursor","grok-build","iphone","apple-watch","e2ee","approvals"],"license":"MIT","_id":"granttap-mcp@0.8.20","maintainers":[{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"}],"homepage":"https://granttap.com","bugs":{"url":"https://github.com/sergii-ziborov/granttap-mcp/issues"},"bin":{"granttap":"bin/granttap-mcp.mjs","granttap-mcp":"bin/granttap-mcp.mjs"},"dist":{"shasum":"dc5cb9798082ba617c55fa355e88aa1276ddea93","tarball":"https://registry.npmjs.org/granttap-mcp/-/granttap-mcp-0.8.20.tgz","fileCount":343,"integrity":"sha512-1Yi+gTSsWQMILa2gFmRsYti8t6PoqYFUI+qrCP9Zhstthj/NE/Ek1c2yG1Ru2Xsm6zhFaMXsnlNGZ78dFF9z9Q==","signatures":[{"sig":"MEQCIFlSSog2TgS0xbOPklEozgrz+aqHKZlkidjbU5pPwFHyAiAnG4/904vR5I4ERxPhTxKctmCEWKAkV5PKPFa5NbDG5Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIE1R4zubgJRelIjjXWikVItxI5IINVDMxKOu1XmW8ud/AiEAmOLQm//AgeRTOrPJ7wqPzY9e1+foPZtzPC6f3ApTugs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/granttap-mcp@0.8.20","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":5239608},"type":"module","engines":{"node":">=20"},"gitHead":"ce23212ab13e7338bd6be1c0e4fae849f35185cd","scripts":{"test":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 node scripts/quality/run-tests.mjs","setup":"node bin/granttap-mcp.mjs setup","start":"node bin/granttap-mcp.mjs","status":"node bin/granttap-mcp.mjs status","inventory":"node scripts/quality/source-inventory.mjs","structure":"node scripts/quality/structure.mjs","typecheck":"tsc --noEmit","cursor:repair":"node bin/granttap-mcp.mjs cursor repair","test:coverage":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 c8 --all --extension .ts --extension .js --exclude '**/tests/**' --exclude 'scripts/**' --exclude 'packages/core/relay-client-types.ts' --exclude 'apps/bridge/src/capabilities/types.ts' --exclude 'apps/bridge/src/reply/payload/types.ts' --exclude 'apps/bridge/src/mesh/runtime/dependencies.ts' --check-coverage --lines 95 --statements 95 --functions 95 --branches 85 node scripts/quality/run-tests.mjs","internal:serve":"node bin/granttap-mcp.mjs internal serve","prepublishOnly":"npm run inventory && npm run structure -- --strict && npm run package:allowlist && npm run test:coverage && npm run typecheck","package:allowlist":"node scripts/quality/package-allowlist.mjs"},"_npmUser":{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"},"overrides":{"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/sergii-ziborov/granttap-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"Personal live control center runtime for local coding agents on iPhone and Apple Watch.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ws":"^8.18.0","tsx":"^4.23.4","zod":"^3.24.1","qrcode":"^1.5.4","express":"^5.2.1","tweetnacl":"^1.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","jsdom":"^27.4.0","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/jsdom":"^27.0.0","@types/qrcode":"^1.5.6","@types/express":"^5.0.3"},"_npmOperationalInternal":{"tmp":"tmp/granttap-mcp_0.8.20_1790179358766_0.504353807241771","host":"s3://npm-registry-packages-npm-production"}},"0.8.21":{"name":"granttap-mcp","version":"0.8.21","keywords":["mcp","model-context-protocol","claude-code","codex","cursor","grok-build","iphone","apple-watch","e2ee","approvals"],"license":"MIT","_id":"granttap-mcp@0.8.21","maintainers":[{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"}],"homepage":"https://granttap.com","bugs":{"url":"https://github.com/sergii-ziborov/granttap-mcp/issues"},"bin":{"granttap":"bin/granttap-mcp.mjs","granttap-mcp":"bin/granttap-mcp.mjs"},"dist":{"shasum":"cbbb1135e7cd2973ebc2e5f09d55fd0e995f8d07","tarball":"https://registry.npmjs.org/granttap-mcp/-/granttap-mcp-0.8.21.tgz","fileCount":346,"integrity":"sha512-S7rv6PZMzIlPU8ENG+8aWRu3eKduQelm5g04/6H/BhDOK02XAHFRYBZp+SbzdtDHvm3/1W3B/5sY6xISKIpQJA==","signatures":[{"sig":"MEUCIQDRo5sqAo0pw7FzMERy3pciS0YcOIU/QoaH4/X3+CbJVAIgdjiPNVWxkO1DEbbAoja7XKVtFGgKjoMUeMZeadG6xBI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCc/eTL78rfc1rtIIy5VZ35JilltlGqup6Mq8JOb1OQKAIgWzMoZ2jXaDFHQaAbMWuq61I6WE2D3gQ5at/ZJGHwm98=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/granttap-mcp@0.8.21","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":5251290},"type":"module","engines":{"node":">=20"},"gitHead":"63250495cbb77c03040b82fc30b02f087e5eab90","scripts":{"test":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 node scripts/quality/run-tests.mjs","setup":"node bin/granttap-mcp.mjs setup","start":"node bin/granttap-mcp.mjs","status":"node bin/granttap-mcp.mjs status","inventory":"node scripts/quality/source-inventory.mjs","structure":"node scripts/quality/structure.mjs","typecheck":"tsc --noEmit","cursor:repair":"node bin/granttap-mcp.mjs cursor repair","test:coverage":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 c8 --all --extension .ts --extension .js --exclude '**/tests/**' --exclude 'scripts/**' --exclude 'packages/core/relay-client-types.ts' --exclude 'apps/bridge/src/capabilities/types.ts' --exclude 'apps/bridge/src/reply/payload/types.ts' --exclude 'apps/bridge/src/mesh/runtime/dependencies.ts' --check-coverage --lines 95 --statements 95 --functions 95 --branches 85 node scripts/quality/run-tests.mjs","internal:serve":"node bin/granttap-mcp.mjs internal serve","prepublishOnly":"npm run inventory && npm run structure -- --strict && npm run package:allowlist && npm run test:coverage && npm run typecheck","package:allowlist":"node scripts/quality/package-allowlist.mjs"},"_npmUser":{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"},"overrides":{"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/sergii-ziborov/granttap-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"Personal live control center runtime for local coding agents on iPhone and Apple Watch.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ws":"^8.18.0","tsx":"^4.23.4","zod":"^3.24.1","qrcode":"^1.5.4","express":"^5.2.1","tweetnacl":"^1.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","jsdom":"^27.4.0","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/jsdom":"^27.0.0","@types/qrcode":"^1.5.6","@types/express":"^5.0.3"},"_npmOperationalInternal":{"tmp":"tmp/granttap-mcp_0.8.21_1790195512631_0.012728411796343986","host":"s3://npm-registry-packages-npm-production"}},"0.8.22":{"name":"granttap-mcp","version":"0.8.22","keywords":["mcp","model-context-protocol","claude-code","codex","cursor","grok-build","iphone","apple-watch","e2ee","approvals"],"license":"MIT","_id":"granttap-mcp@0.8.22","maintainers":[{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"}],"homepage":"https://granttap.com","bugs":{"url":"https://github.com/sergii-ziborov/granttap-mcp/issues"},"bin":{"granttap":"bin/granttap-mcp.mjs","granttap-mcp":"bin/granttap-mcp.mjs"},"dist":{"shasum":"93cbe3ed5c47e11f465b4cd6124c7470cc942d77","tarball":"https://registry.npmjs.org/granttap-mcp/-/granttap-mcp-0.8.22.tgz","fileCount":356,"integrity":"sha512-MO5wyjJnh6Mv4W4WkevQxrQg3dVTJtgI+iyNip7Dcmv5lmZMsv+2PrxIFJzv5qsnoKvkO2OXDfhkrxZLxejibA==","signatures":[{"sig":"MEYCIQDG3JnLkIuBuLFqQ0FjyY31QTECN2cfFZKzWEYM/hpi7QIhAIEdsKEwy+I4cZbfCj6+VT5ru+yzIKJZjWPup2xe4qvp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDksDiN+IVOiRAJdoHZqoXbjDMloXLdEsj9sHcEox3KYgIhALPMJiUd0AYzwflMJb40WLXcuVX4bAOQGvhOnkTH4nS7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/granttap-mcp@0.8.22","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6069874},"type":"module","engines":{"node":">=20"},"gitHead":"edc5ec209f233ade6e4cec05bb71f93c49cc7701","scripts":{"test":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 node scripts/quality/run-tests.mjs","setup":"node bin/granttap-mcp.mjs setup","start":"node bin/granttap-mcp.mjs","status":"node bin/granttap-mcp.mjs status","inventory":"node scripts/quality/source-inventory.mjs","structure":"node scripts/quality/structure.mjs","typecheck":"tsc --noEmit","cursor:repair":"node bin/granttap-mcp.mjs cursor repair","test:coverage":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 c8 --all --extension .ts --extension .js --exclude '**/tests/**' --exclude 'scripts/**' --exclude 'packages/core/relay-client-types.ts' --exclude 'apps/bridge/src/capabilities/types.ts' --exclude 'apps/bridge/src/reply/payload/types.ts' --exclude 'apps/bridge/src/mesh/runtime/dependencies.ts' --check-coverage --lines 90 --statements 90 --functions 90 --branches 85 node scripts/quality/run-tests.mjs","internal:serve":"node bin/granttap-mcp.mjs internal serve","prepublishOnly":"npm run inventory && npm run structure -- --strict && npm run package:allowlist && npm run test:coverage && npm run typecheck","package:allowlist":"node scripts/quality/package-allowlist.mjs"},"_npmUser":{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"},"overrides":{"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/sergii-ziborov/granttap-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"Personal live control center runtime for local coding agents on iPhone and Apple Watch.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ws":"^8.18.0","tsx":"^4.23.4","zod":"^3.24.1","qrcode":"^1.5.4","express":"^5.2.1","tweetnacl":"^1.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","jsdom":"^27.4.0","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/jsdom":"^27.0.0","@types/qrcode":"^1.5.6","@types/express":"^5.0.3"},"_npmOperationalInternal":{"tmp":"tmp/granttap-mcp_0.8.22_1790210494181_0.9578450536982757","host":"s3://npm-registry-packages-npm-production"}},"0.8.23":{"name":"granttap-mcp","version":"0.8.23","keywords":["mcp","model-context-protocol","claude-code","codex","cursor","grok-build","iphone","apple-watch","e2ee","approvals"],"license":"MIT","_id":"granttap-mcp@0.8.23","maintainers":[{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"}],"homepage":"https://granttap.com","bugs":{"url":"https://github.com/sergii-ziborov/granttap-mcp/issues"},"bin":{"granttap":"bin/granttap-mcp.mjs","granttap-mcp":"bin/granttap-mcp.mjs"},"dist":{"shasum":"334f699018d95ecad6d4ed7a461bcb99c5a2ba16","tarball":"https://registry.npmjs.org/granttap-mcp/-/granttap-mcp-0.8.23.tgz","fileCount":357,"integrity":"sha512-CrZMAi7XIcev5ZucwVygSENkZH99oFNjmID68hOqZpGFpjXHg2P3DcH2roXUHQGuw56e230rwqqC7wgx8KOD7g==","signatures":[{"sig":"MEYCIQCcJaA8ZQStS0gUx0O2cCxGBp6ooSwW5BY6t+2kHq3gSwIhAPf3JbCfMpQa5xlvPozHPnx6YPEzCq9AjwnZaQ6g6+Mi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIAhwcZ7CZ1GPOmSBtaBmGZGwUjI/QCPdRBI1ai6bLsl6AiEA/Hx5gqXkPH1vvSPs0CpQnn6hIVWpKH5kqbEV74V8a9A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/granttap-mcp@0.8.23","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6073608},"type":"module","engines":{"node":">=20"},"gitHead":"0d7b88e67cbb3d9a6e46ccba28e61e1b2fb2742b","scripts":{"test":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 node scripts/quality/run-tests.mjs","setup":"node bin/granttap-mcp.mjs setup","start":"node bin/granttap-mcp.mjs","status":"node bin/granttap-mcp.mjs status","inventory":"node scripts/quality/source-inventory.mjs","structure":"node scripts/quality/structure.mjs","typecheck":"tsc --noEmit","cursor:repair":"node bin/granttap-mcp.mjs cursor repair","test:coverage":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 c8 --all --extension .ts --extension .js --exclude '**/tests/**' --exclude 'scripts/**' --exclude 'packages/core/relay-client-types.ts' --exclude 'apps/bridge/src/capabilities/types.ts' --exclude 'apps/bridge/src/reply/payload/types.ts' --exclude 'apps/bridge/src/mesh/runtime/dependencies.ts' --check-coverage --lines 90 --statements 90 --functions 90 --branches 85 node scripts/quality/run-tests.mjs","internal:serve":"node bin/granttap-mcp.mjs internal serve","prepublishOnly":"npm run inventory && npm run structure -- --strict && npm run package:allowlist && npm run test:coverage && npm run typecheck","package:allowlist":"node scripts/quality/package-allowlist.mjs"},"_npmUser":{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"},"overrides":{"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/sergii-ziborov/granttap-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"Personal live control center runtime for local coding agents on iPhone and Apple Watch.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"ws":"^8.18.0","tsx":"^4.23.4","zod":"^3.24.1","qrcode":"^1.5.4","express":"^5.2.1","tweetnacl":"^1.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","jsdom":"^27.4.0","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/jsdom":"^27.0.0","@types/qrcode":"^1.5.6","@types/express":"^5.0.3"},"_npmOperationalInternal":{"tmp":"tmp/granttap-mcp_0.8.23_1790227144239_0.23171619913385477","host":"s3://npm-registry-packages-npm-production"}},"0.8.24":{"_id":"granttap-mcp@0.8.24","bin":{"granttap":"bin/granttap-mcp.mjs","granttap-mcp":"bin/granttap-mcp.mjs"},"bugs":{"url":"https://github.com/sergii-ziborov/granttap-mcp/issues"},"dist":{"shasum":"368c5ce12bd9a844bf66b63e594540bf69c9d009","tarball":"https://registry.npmjs.org/granttap-mcp/-/granttap-mcp-0.8.24.tgz","fileCount":357,"integrity":"sha512-HQFqRqC1wcNpyWwI8KS7G6E4/5m3OzIrcsszwtB9dp7L+XbT58vNCSKmQaBT8mUFrO/82cQ3OsuuRrDUibcOWQ==","signatures":[{"sig":"MEQCIH+DGylMgsjVBpy3YhZ+WOrQLnJJQvkqeeWMOWP8ihKVAiA+3zdnPj49Dc/GWh3iqw3jjWk5SQGeK9sK1YU1zNFIdg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDqLTlb6XvPKFNm/9IsfWZ2UzOyIKhaY115d/UgeGqQQwIhAPYka947rNziH6TtNdNEiB/d2lV2i0E98mT3z0HU3bYG"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/granttap-mcp@0.8.24","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":6076342},"name":"granttap-mcp","type":"module","engines":{"node":">=20"},"gitHead":"507f4354769824fcde0e5fb174167ecdb685e230","license":"MIT","scripts":{"test":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 node scripts/quality/run-tests.mjs","setup":"node bin/granttap-mcp.mjs setup","start":"node bin/granttap-mcp.mjs","status":"node bin/granttap-mcp.mjs status","inventory":"node scripts/quality/source-inventory.mjs","structure":"node scripts/quality/structure.mjs","typecheck":"tsc --noEmit","cursor:repair":"node bin/granttap-mcp.mjs cursor repair","test:coverage":"HOME=$(mktemp -d) GRANTTAP_SKIP_LAUNCHCTL=1 c8 --all --extension .ts --extension .js --exclude '**/tests/**' --exclude 'scripts/**' --exclude 'packages/core/relay-client-types.ts' --exclude 'apps/bridge/src/capabilities/types.ts' --exclude 'apps/bridge/src/reply/payload/types.ts' --exclude 'apps/bridge/src/mesh/runtime/dependencies.ts' --check-coverage --lines 90 --statements 90 --functions 90 --branches 85 node scripts/quality/run-tests.mjs","internal:serve":"node bin/granttap-mcp.mjs internal serve","prepublishOnly":"npm run inventory && npm run structure -- --strict && npm run package:allowlist && npm run test:coverage && npm run typecheck","package:allowlist":"node scripts/quality/package-allowlist.mjs"},"version":"0.8.24","_npmUser":{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"},"homepage":"https://granttap.com","keywords":["mcp","model-context-protocol","claude-code","codex","cursor","grok-build","iphone","apple-watch","e2ee","approvals"],"overrides":{"@hono/node-server":"2.0.11"},"repository":{"url":"git+https://github.com/sergii-ziborov/granttap-mcp.git","type":"git"},"_npmVersion":"10.9.8","description":"Personal live control center runtime for local coding agents on iPhone and Apple Watch.","directories":{},"maintainers":[{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"}],"_nodeVersion":"22.23.2","dependencies":{"ws":"^8.18.0","tsx":"^4.23.4","zod":"^3.24.1","qrcode":"^1.5.4","express":"^5.2.1","tweetnacl":"^1.0.3","@modelcontextprotocol/sdk":"^1.30.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^10.1.3","jsdom":"^27.4.0","@types/ws":"^8.5.13","typescript":"^5.7.2","@types/node":"^22.10.2","@types/jsdom":"^27.0.0","@types/qrcode":"^1.5.6","@types/express":"^5.0.3"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/granttap-mcp_0.8.24_1790229126634_0.7530292239732632"}}},"time":{"created":"2026-07-24T14:25:56.998Z","modified":"2026-09-24T05:52:07.119Z","0.1.0":"2026-07-24T14:25:57.367Z","0.2.0":"2026-07-24T19:07:10.669Z","0.6.4":"2026-08-02T12:14:22.831Z","0.6.5":"2026-08-04T11:32:43.069Z","0.6.7":"2026-08-10T20:09:00.938Z","0.6.10":"2026-08-23T12:40:59.537Z","0.7.0":"2026-08-23T20:11:05.798Z","0.7.1":"2026-08-24T04:53:34.135Z","0.7.6":"2026-08-25T22:32:03.773Z","0.8.1":"2026-09-03T07:16:00.427Z","0.8.2":"2026-09-05T00:13:09.316Z","0.8.3":"2026-09-05T14:57:50.871Z","0.8.4":"2026-09-06T10:23:34.189Z","0.8.5":"2026-09-06T12:13:50.798Z","0.8.6":"2026-09-06T16:20:55.505Z","0.8.7":"2026-09-08T21:24:40.250Z","0.8.8":"2026-09-11T20:53:00.897Z","0.8.9":"2026-09-13T19:45:23.682Z","0.8.10":"2026-09-13T20:15:18.642Z","0.8.11":"2026-09-13T21:03:04.553Z","0.8.12":"2026-09-13T21:45:58.172Z","0.8.13":"2026-09-14T00:52:14.709Z","0.8.14":"2026-09-14T01:03:02.353Z","0.8.15":"2026-09-14T08:51:57.964Z","0.8.16":"2026-09-14T09:03:00.008Z","0.8.17":"2026-09-14T09:25:16.689Z","0.8.18":"2026-09-14T11:06:09.411Z","0.8.19":"2026-09-23T15:36:01.001Z","0.8.20":"2026-09-23T16:02:38.989Z","0.8.21":"2026-09-23T20:31:52.952Z","0.8.22":"2026-09-24T00:41:34.379Z","0.8.23":"2026-09-24T05:19:04.513Z","0.8.24":"2026-09-24T05:52:06.791Z"},"bugs":{"url":"https://github.com/sergii-ziborov/granttap-mcp/issues"},"license":"MIT","homepage":"https://granttap.com","keywords":["mcp","model-context-protocol","claude-code","codex","cursor","grok-build","iphone","apple-watch","e2ee","approvals"],"repository":{"url":"git+https://github.com/sergii-ziborov/granttap-mcp.git","type":"git"},"description":"Personal live control center runtime for local coding agents on iPhone and Apple Watch.","maintainers":[{"name":"sergii-ziborov","email":"sergii.ziborov@gmail.com"}],"readme":"# GrantTap MCP\n\n[![npm](https://img.shields.io/npm/v/granttap-mcp)](https://www.npmjs.com/package/granttap-mcp)\n[![CI](https://github.com/sergii-ziborov/granttap-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/sergii-ziborov/granttap-mcp/actions/workflows/ci.yml)\n[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)\n\nGrantTap is a Personal live control center for local coding agents.\n\n> See what your coding agents are doing. Step in when they need you.\n\nThis repository is the canonical machine runtime: CLI, MCP server, provider\nhooks, local adapters, and TypeScript wire schemas. Agents and provider\ncredentials stay on your computer. Native iPhone and Apple Watch traffic is\nend-to-end encrypted.\n\nThe MCP runtime, plugins, and CLI are open source under the MIT License. The\niPhone and Apple Watch app is a separate, proprietary product; use of GrantTap's\nhosted service is governed by its own terms.\n\n[Website](https://granttap.com) · [npm](https://www.npmjs.com/package/granttap-mcp) ·\n[Security model](SECURITY.md) ·\n[Relay source](https://github.com/sergii-ziborov/granttap-relay)\n\n## iPhone and Apple Watch\n\n<p align=\"center\">\n  <img src=\"docs/images/iphone-command-center.png\" width=\"230\" alt=\"GrantTap Now with Needs You and at-risk tasks\">\n  <img src=\"docs/images/iphone-chat.png\" width=\"230\" alt=\"GrantTap live task timeline and composer\">\n  <img src=\"docs/images/iphone-mcp-usage.png\" width=\"230\" alt=\"GrantTap actionable usage overview\">\n</p>\n\n<p align=\"center\">\n  <img src=\"docs/images/apple-watch-inbox.png\" width=\"180\" alt=\"GrantTap Needs You on Apple Watch\">\n  <img src=\"docs/images/apple-watch-approval.png\" width=\"180\" alt=\"GrantTap approval on Apple Watch\">\n</p>\n\n## Supported providers\n\n- Primary: Claude Code and Codex.\n- Beta: Cursor.\n- Experimental where available: Grok Build.\n\nGrantTap reports the depth each provider actually exposes. Visibility does not\nimply deterministic remote blocking or full mobile continuation.\n\nSession catalogs report `lastMessageAt` only when a provider transcript has a\ntimestamped user or assistant message. `lastActivityAt` remains the separate\nruntime activity timestamp and can include metadata or file updates. Clients\nlabel that fallback as activity rather than presenting it as a message time.\n\n## Project Mesh and task handoff\n\nProject Mesh adds stable Project and Task identity above provider-native\nsessions. A Task can retain its `taskId` across multiple executions, agents,\nand computers while each native session remains intact.\n\nAgents publish bounded progress, dependency, question, answer, claim, conflict,\nand completion events through the existing `notify` tool, and read state from a\nMesh resource. Full transcripts and hidden reasoning are never mesh payloads.\nClaims have TTLs; a colliding claim is rejected before it is recorded so agents\ncan choose different work or contact the owner before escalating to Needs You.\nObserved edit-tool requests are intent claims, not confirmed writes. Resource\nidentity includes the repository; equal relative paths from separate repositories\ndo not conflict, and another checkout is a coordination warning. The path\nmatcher respects segment boundaries, so `src/auth.ts` and `src/auth.ts.bak`\nare distinct. A live repository reading refreshes HEAD after commit or checkout.\n\nWhen a separately distributed, verified GrantTap Engine is enabled on the\ncomputer, the bridge sends content-free Invocation events before its small Usage\nbuffer is trimmed. Claude Code, Codex, and Cursor transcript scanners record\nnative call identity, request, reported outcome, resource path, and explicit\nsource gaps. The Engine owns the durable journal and bounded cursor history;\nthe phone requests the latest or older page under the Project E2EE key. A\nreported successful tool call alone does not prove a filesystem change, and\nunavailable Engine history is reported as unavailable.\nThe bridge does not yet produce verified filesystem-change events or attach\nrevision-bound impact/consumer links to individual Invocations. It leaves that\nevidence unknown instead of treating an edit request or reported success as a\nconfirmed content change.\nClaude Code and Codex denials with native call IDs are recorded as separate,\nmetadata-only hook events with the applied rule and policy revision; an\nunidentified Cursor decision is not assigned to an invented call. Script and\n`SKILL.md` fingerprints include a content hash when the local file is readable,\nseparate from their path identity. Missing content evidence remains unknown.\n\n<p align=\"center\">\n  <img src=\"docs/images/iphone-projects-shared.png\" width=\"200\" alt=\"Projects: one owned by this phone, one shared by another\">\n  <img src=\"docs/images/iphone-linked-projects.png\" width=\"200\" alt=\"Two linked Projects with separate access scopes\">\n  <img src=\"docs/images/iphone-project-mesh.png\" width=\"200\" alt=\"A Project: Governance, members and computers, Mesh status, repositories, Tasks\">\n  <img src=\"docs/images/iphone-task-route.png\" width=\"200\" alt=\"A Task: executions, Runtime history, and resource claims\">\n  <img src=\"docs/images/iphone-handoff.png\" width=\"200\" alt=\"Task handoff: destination, push, and readiness checks\">\n</p>\n\n<p align=\"center\"><em>Shared Projects · linked repository bindings with separate Project access · Project management · Task execution history · handoff readiness</em></p>\n\n<p align=\"center\">\n  <img src=\"docs/images/iphone-weavatrix-graph.png\" width=\"200\" alt=\"Full-screen architecture graph with sample evidence\">\n  <img src=\"docs/images/iphone-health-code-towers.png\" width=\"200\" alt=\"Full-screen Health code towers with sample evidence\">\n</p>\n\n<p align=\"center\"><em>These are deterministic simulator fixtures, not reports from a live customer repository.</em></p>\n\nAn authenticated controller can request a separate, one-time device credential\nfor another iPhone or iPad from each Live linked computer. The phone packages\nthe resulting links in an encrypted, single-use QR. This adds the new phone to\nthe same device network; it does not grant Project membership. Explicit human\ndecisions for a bound Project Task can be recorded through Engine Memory, and\na same-scope correction supersedes an earlier decision while retaining history.\nThe computer returns `recorded` only after the Engine confirms storage.\n\nThe capability catalog distinguishes local observations from installed and\ninitialized state. It does not yet transfer and apply complete MCP or skill\nbundles to every host. Usage figures do not enforce spending caps. Project\nEnvironment secrets injected into an agent process remain readable by that\nprocess; a use-only credential broker is not part of this runtime yet.\n\nFor Claude Code, Codex, and Cursor, the provider hook runs inside the agent's\nown session and sees the exact call. GrantTap attributes every `notify` to the\nsession that really made it and publishes the event only for that execution —\na model that learned another session's id cannot act in its name.\n`granttap://mesh/current` therefore carries no Project data: an attributed call returns this execution's opaque\n`granttap://mesh/<capability>` URI, and only that URI serves its Project, Task,\nowners, claims, dependencies, and relevant events. Ownership transfer stays out\nof the tool surface entirely: `HANDOFF_ACCEPTED` and `HANDOFF_REJECTED` are\ndecided by the runtime after receipt verification.\n\nThe first executable handoff path is Claude Code ↔ Codex across linked\ncomputers. GrantTap builds a bounded Task Capsule from explicit task/git facts,\nrequires local phone authorization, creates a separate target branch/worktree,\nstarts the target execution, and returns a receipt bound to the exact capsule.\nCursor uses the same provider-neutral schema and trusted caller attribution.\nGrok Build remains Experimental and observable where available, but does not\nyet expose a trusted caller hook, so agent-authored scoped Mesh events are not\noffered for it. Unsupported remote-start paths fail closed instead of claiming\nparity.\n\nA capsule carries facts, not files. A handoff from a checkout with uncommitted\nchanges is refused — \"This task has uncommitted changes. Commit or checkpoint\nthem before moving the task.\" — instead of silently continuing the Task from\ncommitted state and leaving that work behind. Asked to checkpoint from the\nphone, the source computer commits everything to `granttap/checkpoint/<task>`\nfrom a temporary index, so HEAD, the current branch, and the working tree stay\nexactly as the agent left them, and the capsule carries that commit. Nothing is\npushed unless the phone asks for it per handoff: then the source publishes the\nbranch the capsule names to the checkout's remote — never by force — before the\ncapsule leaves, a push that fails blocks the move, and a destination that lacks\nthe commit fetches that branch once before refusing. A handoff can also stay on\none computer: the same Task continues with another agent there, in a worktree\nof its own from the same commit, taken up at once by the computer that\nprepared it.\n\n### Pause and resume\n\nA chat can be held from the phone. The hold is enforced where the work\nhappens: every provider hook refuses every tool call from that chat — the\nagent reads \"GrantTap paused this chat from the phone\" and is told to wait —\nand a delivery already running for the chat is stopped. A message sent to a\nheld chat is refused for the same reason. Resuming lifts the hold; asked to\ncontinue, the computer answers the phone at once and then delivers one\ncontinuation prompt in the background, so \"start\" is one tap. The hold lives\nin the runtime config as `pausedSessions` and is published on the session as\n`paused`.\n\nClaims do not wait for an agent to announce them. Every edit an agent makes is\nvisible in its transcript, so the runtime derives an intent claim from each\nrecent write — marked as seen rather than said, and expiring ten minutes after\nthe writing stops. Overlap is judged twice: the same file is a conflict, and\nthe same module is the warning that comes before it. A module is recognised\nfrom the path alone, so every computer and the phone reach the same answer,\nand the Task screen names who else is in this Task's files or modules while it\ncan still be avoided. The destination is refused just\nas explicitly when the named commit is not on its computer, or when the\ncapsule's own resource claims overlap another execution's; GrantTap never\npushes or fetches on its own.\n\nA Project usually binds more than one repository, and a bound repository can\nsay which of the others sit on the far side of its databases, topics, and APIs:\ncommit a [`WEAVATRIX.md`](https://github.com/Weavatrix/weavatrix-md) next to the\nREADME and the runtime reads it — only the edges it states, nothing inferred —\nand publishes them with the Project. The Task screen then names another Task\nthat is working on the other side of a contract this Task touches (the consumer\nof a topic it produces, the caller of an API it changes), and the scoped\n`granttap://mesh/{capability}` resource gives the agent the same `peers`,\n`otherSide`, and `neighbours` so it can coordinate before it commits.\n\n### Members, roles, and computers of their own\n\nA Project is shared from the phone that owns it, and that phone stays the\nhub: nothing a member does reaches a computer without passing through it.\n*Invite a person* makes a one-time code, good for fifteen minutes; the other\nphone scans it under *Projects → Join a Project*, and the Project arrives\nthere with the role the owner chose — Viewer, Member, or Admin — and the four\nanswers under it: see the Project's chats, write to them, post to the\nProject, edit Governance. Each answer is checked on the owner's phone before\na message, a pause, a handoff, or a release is forwarded, and a refusal comes\nback to the member's phone as a message of its own, naming the rule. Changing\na role takes effect at once; removing a member stops the forwarding at once,\nthough nothing already seen can be recalled.\n\n<p align=\"center\">\n  <img src=\"docs/images/iphone-members.png\" width=\"200\" alt=\"Members and computers of a Project, seen by its owner\">\n  <img src=\"docs/images/iphone-invite.png\" width=\"200\" alt=\"Invite a person: name, role, and the four answers under it\">\n  <img src=\"docs/images/iphone-join-project.png\" width=\"200\" alt=\"Join a Project from another phone: scan the invite or paste it\">\n  <img src=\"docs/images/iphone-members-shared.png\" width=\"200\" alt=\"A shared Project on the member's phone, with a computer of their own to add\">\n</p>\n\n<p align=\"center\"><em>The owner's members and computers · an invite with its role · joining from another phone · the shared Project as the member sees it, with a computer of their own to add</em></p>\n\nA member works in the Project with computers of their own. Adding one hands\nit the Project's mesh key over the pairing the member's phone already trusts,\nand from then on that computer takes part in the mesh like any other: its\nchats are the Project's, its claims are seen by every other computer, and a\nTask can be handed to it.\n\nA Project can pin new tasks to one confirmed computer. The endpoint id is\nthe stored computer identity, not the display name. Models offered on the\nphone come from that host's catalog. If the pinned host is offline, the\nProject either refuses the create or queues it until a deadline — it does\nnot silently start the task elsewhere. A command issued for a previous\ninstance of the computer (a restore or clone that kept pairing keys) is\nrejected. A pin is not a secure VM.\n\n### A claim released by the person\n\nA claim outlives an agent that crashed or was closed, and the files it names\nstay fenced off until it expires. Touch and hold a claim on the Task screen\nto release it yourself. The phone tells the computer that holds the claim,\nand the computer answers with a result of its own: released, or refused with\nthe reason — no such claim on this computer, a claim that belongs to another\nProject, a role that does not allow it, or no computer to ask. A refusal puts\nthe claim back on the phone with that reason beside it, so what the phone\nshows is what the mesh holds. A release is written to the store as a\ntombstone, so a snapshot or a late event from a computer that was away cannot\nbring the claim back.\n\n### Task reports\n\n<p align=\"center\">\n  <img src=\"docs/images/iphone-report.png\" width=\"200\" alt=\"A Task report: figures first, then every table, as PDF or CSV\">\n</p>\n\nA Task is reported from the phone as a PDF to read and forward, or a CSV with\nevery table: tokens, tool calls, wrong turns, CPU time, peak memory, and wall\ntime, by tool and by execution. Nothing leaves the phone until you choose\nwhere it goes.\n\n### Grok Bot as a scoped Mesh participant\n\nGrok Bot is a persistent agent, not a coding-agent integration. The iPhone\nissues a one-time encrypted Mesh Invite scoped to the Projects you select, and\nthe invite is redeemed on the trusted CLI:\n\n```bash\ngranttap mesh connect <one-time-invite>\n```\n\nGrok Bot then runs `granttap internal mesh-mcp`, a separate scoped MCP server\nthat exposes only the twelve task-scoped Mesh operations. It cannot create\ninvites, change the relay, expand Project scope, or reach `setup`; revoking the\nendpoint from the iPhone stops new Mesh operations immediately while local Task\nhistory stays on the device.\n\n## Install\n\nThe local runtime and plugins are available under the [MIT License](LICENSE).\nThe iPhone and Apple Watch app and hosted service have separate terms.\n\nInstall the GrantTap plugin directly from this repository's marketplace:\n\n```bash\n# Codex\ncodex plugin marketplace add sergii-ziborov/granttap-mcp\ncodex plugin add granttap@granttap\n\n# Claude Code\nclaude plugin marketplace add sergii-ziborov/granttap-mcp\nclaude plugin install granttap@granttap\n\n# Grok Build\ngrok plugin marketplace add sergii-ziborov/granttap-mcp\ngrok plugin install granttap --trust\n```\n\nFor Cursor, use the reviewed **GrantTap** Marketplace listing when it is visible\nto your account. Reload Cursor. On this computer, run `granttap setup`. Pair\nand change settings on [granttap.com/connect](https://granttap.com/connect)\nand in the GrantTap app. Authenticate opens that page even when this Mac is\nalready paired — Approve the coding app, Reconnect, or Add another. A scan in\nGrantTap authorizes a new device; a saved pairing does not skip the page.\nDo not add GrantTap in Cursor Customize → MCPs. Cloud **Error · fetch\nfailed** is leftover HTTP at `http://127.0.0.1:17342/mcp` — a user MCP row\nor an old plugin `mcp.json`. The Cursor plugin is stdio (`node -e`).\n\nOpen GrantTap from the plugin connection card. Pairing status, a one-time QR\nwhen needed, and confirmed reconnect stay on that card, on\n`granttap.com/connect`, and in the GrantTap app. Do not ask an agent to print\na pairing QR in chat. The same tools still return readable MCP content in\nclients that do not render app UI. Detailed plugin instructions are in\n[`plugins/granttap/README.md`](plugins/granttap/README.md).\n\nFor the full background helper and provider hooks, install the CLI and run\nsetup:\n\n```bash\nnpm install -g granttap-mcp\ngranttap setup\n```\n\n`granttap setup` detects supported local agents, installs or repairs their\nhooks, installs the background helper, removes a leftover user GrantTap MCP\nentry when Cursor is present, and starts phone pairing when run in an\ninteractive terminal. It ends with one exact next action.\n\nSetup also declares the separately distributed GrantTap Engine, which Project\nGovernance needs before it can report anything. The standard locations are\nsearched, and `--engine <path>` points at one that lives elsewhere; the binary\nis checksummed here, because that checksum is the only thing verified before it\nis launched. Without an engine the rollout stays off and setup says so, rather\nthan leaving \"Governance not reported\" on the phone as the only symptom.\n\nThe normal CLI surface is intentionally small:\n\n```text\ngranttap setup [--engine <path>]\ngranttap status [--json]\ngranttap connect [--relay <wss-url>]\ngranttap reset [--yes]\ngranttap mesh connect <one-time-invite>\n```\n\n`connect` reuses a valid pairing. If none exists, it creates a one-time QR.\nCustom relays are CLI-only and explicit. `reset` moves active pairing files to\nrecoverable local backups before a new pairing can be created.\n\nCursor setup is automatic in the normal flow. The advanced repair command is:\n\n```bash\ngranttap cursor repair\n```\n\nAfter Codex hooks are installed, open `/hooks`, review and trust both exact\nGrantTap hooks, then restart Codex. GrantTap never treats installation as user\ntrust.\n\n## MCP contract\n\n`tools/list` returns exactly five public tools:\n\n| Tool | Contract |\n| --- | --- |\n| `connect` | Reuse the existing production pairing or return a one-time QR |\n| `reconnect` | Replace the pairing after explicit confirmation and return a fresh one-time QR |\n| `notify` | Send a non-blocking status update of at most 2,000 characters |\n| `ask_yes_no` | Ask a yes/no question and wait for the explicit answer |\n| `ask` | Ask an open question and wait for typed or spoken text |\n\nMCP `connect` accepts no custom routing, replacement, or key-rotation input.\n`reconnect` is declared destructive and requires `confirmed: true`; relay\nacceptance happens before the working local pairing is replaced.\nSetup is CLI-only because it changes provider configuration and must not be\navailable to a model through prompt injection.\n\n`notify` may alternatively carry one bounded task-scoped Mesh event. This does\nnot add a fifth MCP tool or grant any global setup capability, and it publishes\nonly for the execution whose provider hook attributed the call.\n\n`notify`, `ask_yes_no`, and `ask` accept an `operationId`. A named call is\nremembered for fifteen minutes under the chat that made it, the tool, and the\narguments: a retry returns the answer already given instead of asking again,\na retry that arrives while the first call is still waiting waits for the same\nanswer, and the same name used for other arguments is refused. One chat's\nname is never another's — the ledger is keyed by the execution the provider\nhook attributed, and the hook carries the `operationId` with the call.\n\nProvider-native approvals and mobile continuation require the matching local\nadapter. MCP registration alone is never reported as proof that an integration\nis ready.\n\n## What the runtime publishes\n\nThe bounded encrypted protocol preserves:\n\n- provider, task, computer, model, workspace, branch, state, and summary;\n- visible activity, delivery state, context and token counters;\n- MCP, Skill, and CLI observations;\n- child-agent relationships;\n- per-capability outcome: `success`, `error`, `cancelled`, or `unknown`;\n- what a call cost, where the machine can be observed while it ran.\n\nAn optional bounded `errorClass` may describe an error category. Full tool\nerror payloads are not copied into usage telemetry by default.\n\nA shell call is named by the command it ran — `npm`, `git`, `xcodebuild` —\nwith the tool that ran it kept beside the name, so the usage screen can say\nwhich tool was slow or failing rather than listing every call as Bash.\n\nMachine load attributes to an agent everything the agent started — its\nshells, its node workers, the build a shell ran — found through the process\ntree, and names the heaviest kinds of process it runs (`node` ×19, `zsh` ×3)\nso the phone can say what an agent is doing, not only that it is. The\nexecutable path and the command line are read separately and joined by pid,\nbecause a path with a space in it (`~/Library/Application Support/Claude/…`)\ncannot be recovered from a command line split on whitespace.\n\nThe number can be opened. Each agent's sample carries its heaviest forty\nprocesses one by one — pid, name, CPU, memory, and what the process was asked\nto do with the executable's own path and any secret removed — and the same\nload added up by chat. Claude Code hands every MCP server it starts the chat's\nid in `CLAUDE_CODE_SESSION_ID`, and `ps -E` shows a process's environment to\nits owner, so an agent's root process is named by its descendants; only that\none variable is read, the answer is remembered for the root's lifetime, and a\nroot that could not be named is asked about again after a minute. Each agent's\nown folders (`~/.claude`, `~/.codex`, `~/.cursor`, `~/.grok`, plus Claude's\nCLI cache) are measured with `du` in the background every ten minutes, top-level\nchild by child, and carried on the sample; a sample never waits for `du`. The\nhelper log says once in five minutes what each agent weighed, so a wrong\nnumber on the phone can be traced to the computer.\n\nA shell call is fingerprinted for Project policy by the command it runs —\n`git`, `rm`, `npm` — so a Project can allow one command and ask about another\ninstead of deciding about the shell as a whole; a line with no command word\nis still plain `Shell`.\n\n### One computer, whatever the network calls it\n\nThe Mesh keys a computer by an identity written down once, on first use, in\n`computer.json` in the config directory — the hostname it had then — and\nkeeps it. A Mac renamed by the network it joins (\"Mac.lan\" at home,\n\"Serhiis-MacBook-Pro.local\" elsewhere) used to become a second computer with\nits own open executions and repository bindings; now every later hostname is\nremembered as a former name of the same machine, its leftover executions are\nclosed and its bindings marked unavailable, and the current hostname stays\nwhat people see. `GRANTTAP_COMPUTER_ID` overrides the stored id.\n\n### Run journal and prompt-time context\n\nA message from the phone is answered by a fresh `claude -p --resume` of the\nsame chat. Its turns land in the transcript, but a session holding that chat\nopen never sees them — its context was built before they happened. The runtime\ntherefore journals every delivery: what was asked (without the attachment\nnote), what came back, which files were written, how many tool calls it took,\nand whether the run was cut off by the ten-minute delivery limit. The Task\ncarries the same digest as `TASK_PROGRESS`, so the phone's timeline and the\nMesh show it. A `UserPromptSubmit` hook, installed beside the approval hook by\n`granttap setup`, adds the unread journal to the next prompt of the live\nsession together with the Mesh brief — the other live Tasks in the Project,\nwho is in the same file or module, the other side of the repository, and any\nquestion still unanswered — and names the MCP resource `granttap://mesh/map`,\none page of markdown with the whole Project: Tasks, who edits which module,\nthe other side of each repository, dependencies, and what just happened. That\nresource is listed, because Claude Code reads only listed resources, and it is\nscoped without a token: Claude Code starts one MCP server per chat and hands\nit the chat's id in `CLAUDE_CODE_SESSION_ID`, which nothing said over the\nconnection can change. `granttap://mesh/current` serves the same chat's scoped\nstate there. Other providers keep the tokened `granttap://mesh/{capability}`\nand `…/map` forms from an attributed `notify`. Background runs themselves\nreceive nothing from the hook; the journal is kept for the session a person\nis in.\n\n### Tool versions and updates from the phone\n\nThe status also names each provider's command-line tool as it answers on this\ncomputer — its version, how it is kept current, and, for Claude Code, whether a\nnewer copy already sits on the disk (the Claude desktop app keeps its own; the\nruntime uses the newest one it finds). A tool that lags the rest of the\nenvironment fails in ways the phone can only report, so the phone can ask this\ncomputer to update one: the phone names only the tool, and the command is the\nruntime's, fixed by how the tool was installed — `claude update`, `agent\nupdate`, `grok update`, the npm that owns the tool's prefix, or Homebrew. The\nruntime never downloads a tool itself; a tool installed by an installer script\nis left to a trusted terminal, with the command spelled out in the answer. The\nresult — version before and after, the updater's own output — comes back as\n`tool.update.result`.\n\nCost is reported as attributed rather than measured, because that is what it\nis. A call is read back from the transcript once it has finished, so it can\nnever be measured directly: an MCP server outlives its calls and is sampled\ndirectly, while a built-in tool leaves nothing behind and is costed from the\nsamples that fall inside its own start and end. A call with no sample near it\nreports nothing rather than a number borrowed from another moment.\n\n## Local enforcement\n\nGrantTap can narrow later actions for an exact task only where a provider\noffers a deterministic local hook. Global provider configuration always wins.\nRead-only integrations stay read-only in the app instead of presenting a fake\ntoggle.\n\nThe user-facing approval modes map to the existing runtime policy:\n\n| Personal UI | Runtime |\n| --- | --- |\n| Ask for risky actions | `except_push` |\n| Ask for every action | `ask` |\n| Use agent defaults | no GrantTap gate for that task |\n\nLegacy custom levels remain compatible but are not part of the primary flow.\n\n## Project Governance\n\n<p align=\"center\">\n  <img src=\"docs/images/iphone-governance.png\" width=\"200\" alt=\"Project Governance: one answer per kind of capability, and the enforcement it reached\">\n  <img src=\"docs/images/iphone-member-detail.png\" width=\"200\" alt=\"A member: role, answers, and removal\">\n</p>\n\n<p align=\"center\"><em>Governance for the whole Project · a member's answers, changed at once</em></p>\n\nCapabilities are decided per Project, not per task. A policy names an effect —\n`allow`, `ask`, or `deny` — for each kind (skills, MCP servers, shell and\nscripts, file writes, deploy, network), and may name one capability alone: one\nMCP server can be forbidden without forbidding every server. A named rule wins\nover its kind, and a global deny always wins over a Project.\n\nThe phone authors the policy and hands it to every Project computer through the\nrelay, which holds the encrypted packet until each computer reads its mailbox;\na computer that was asleep receives it when it returns. Each computer applies\nthe policy through the GrantTap Engine, acknowledges the revision it enforces,\nand reports coverage — enforced, observed only, unsupported, or unknown — per\ncapability kind, so the phone shows what is actually in force rather than what\nwas sent. Revision zero is a Project with no policy yet, and it is reported so\nthe first policy can be written.\n\nA refused edit is answered, not swallowed. When a computer cannot apply a\npolicy — the phone built it on a revision the computer no longer holds, the\nengine is not running, the policy is invalid — it sends\n`project.policy.rejected` with the reason and the revision it actually holds,\nthen the policy it holds, so the phone can say what happened, keep the edit,\nand offer it again on top of the current revision. The helper log carries the\nsame line. What the engine leaves null is sent as absent: the phone reads a\nstatus strictly, and a `null` where a field was optional was read as a wrong\nvalue and the whole status dropped.\n\nA shell call is fingerprinted by the command it runs (`git`, `rm`), a deploy or\nnetwork call by the phrase that made it one (`git push`, `curl`), so a named\nrule can forbid pushing or deleting while the rest of the shell stays allowed.\nA commit or pull request whose command carries a co-author or \"generated with\"\ntrailer is fingerprinted as `co-authorship`, its own row in the phone's Shell\ntable, so a Project whose history is authored by people can deny the trailer\nand leave git alone.\n\nEvaluation happens in the provider hook before the action runs, with a deadline\nlong enough for a busy machine to answer. A missed answer falls back to the\nlegacy GrantTap gate rather than to a silent allow, and content never crosses\nto the engine: it receives a capability fingerprint, not the command or file.\n\nA refusal is said where the action was. Each one is written down for its chat,\nand the timeline carries it as a status row naming the rule and the reason,\nbeside the call it stopped. On the phone a rule is written where the need for\nit appears: touch and hold a tool on the Project page, or use the Governance\nmenu on a tool's call history, to allow, ask, or deny it for the Project.\n\n## Relay boundary\n\nPairing and task keys are generated locally. The relay receives opaque routing\nmetadata and ciphertext, not provider credentials or task plaintext. Pairing\nhandoff uses a relay-visible random mailbox ID plus an independent transfer key\nthat stays in the QR.\n\nAPNs carries a content-neutral wake only. It contains no prompt, task title,\ncommand, path, request ID, or ciphertext. See [SECURITY.md](SECURITY.md) for the\ncomplete boundary and reporting instructions.\n\n## Development\n\n```bash\nnpm install\nnpm run typecheck\nnpm test\nnpm run package:allowlist\nnpm run test:coverage   # macOS only — see below\n```\n\n`npm test` runs everywhere. Both suites run with an isolated `HOME`, so a\ndeveloper's own Claude/Codex/Cursor data can never inflate a local result: the\nnumbers on this machine and in CI are the same. The coverage contract is\nmeasured on macOS because the background helper, the Cursor OAuth service, and\nthe installer only execute there, so a Linux percentage understates real\nruntime coverage. CI runs the cross-platform suite on Linux and the coverage\ngate on macOS, and `npm publish` enforces the same gate through\n`prepublishOnly`.\n\nDo not publish from a dirty checkout or before the package allowlist, tests,\ntypecheck, and release checks pass.\n\n## License\n\nGrantTap MCP, its CLI, and bundled plugins are distributed under the\n[MIT License](LICENSE). The iPhone and Apple Watch app is licensed separately.\nThird-party dependencies retain their own terms; see\n[THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md).\n\nGrantTap is not affiliated with Anthropic, OpenAI, Apple, Anysphere, or xAI.\n","readmeFilename":"README.md"}