{"_id":"@google/jules-sdk","_rev":"8-7287bd871bcce2587202db8d3b5ce899","name":"@google/jules-sdk","dist-tags":{"latest":"0.2.0"},"versions":{"0.0.1":{"name":"@google/jules-sdk","version":"0.0.1","keywords":["jules","ai","agent","sdk","developer-tools"],"author":{"name":"Google LLC"},"license":"Apache-2.0","_id":"@google/jules-sdk@0.0.1","maintainers":[{"name":"google-wombot","email":"node-team-npm+wombot@google.com"},{"name":"ofrobots","email":"ofrobots@google.com"},{"name":"mrdoob","email":"info@mrdoob.com"}],"homepage":"https://github.com/google-labs-code/jules-sdk#readme","bugs":{"url":"https://github.com/google-labs-code/jules-sdk/issues"},"dist":{"shasum":"804320b38b6e067086a959fdd58e22f3e4f60622","tarball":"https://registry.npmjs.org/@google/jules-sdk/-/jules-sdk-0.0.1.tgz","fileCount":36,"integrity":"sha512-W75lkrMFhW62KcBppTMkuW4Q2GcteGmfMR1pHYbB2Ie6HtkkuTOSBzZumE6dN+1Ub5wpa0kFTIToHq+ywN476A==","signatures":[{"sig":"MEYCIQDDOzYuqdByrhrxVWoMPy46MIQv9f622DfbMKGvi6RPuAIhANOxj78NIVvKNJ8XIDs/Xpi1SemkOZB93mYoCHaErNou","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":524359},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs"},"./types":{"types":"./dist/types.d.ts"},"./package.json":"./package.json"},"gitHead":"9864fae2217bad83b4fded8351dc35fad258196c","scripts":{"test":"vitest","build":"vite build","type-check":"tsc --project tsconfig.test.json"},"_npmUser":{"name":"google-wombot","email":"node-team-npm+wombot@google.com"},"repository":{"url":"git+https://github.com/google-labs-code/jules-sdk.git","type":"git"},"_npmVersion":"10.9.3","description":"Official Jules TypeScript SDK","directories":{},"_nodeVersion":"22.19.0","dependencies":{"zod":"^3.25.76","yaml":"^2.8.2"},"publishConfig":{"access":"public","registry":"https://wombat-dressing-room.appspot.com"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.10.4","vite":"^7.3.0","jsdom":"^27.1.0","vitest":"^3.2.4","js-yaml":"^4.1.0","typescript":"^5.8.3","@types/node":"^22.15.0","@types/js-yaml":"^4.0.9","vite-plugin-dts":"^4.5.4"},"_npmOperationalInternal":{"tmp":"tmp/jules-sdk_0.0.1_1769205066755_0.2736789630513312","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@google/jules-sdk","version":"0.0.2","keywords":["jules","ai","agent","sdk","developer-tools"],"author":{"name":"Google LLC"},"license":"Apache-2.0","_id":"@google/jules-sdk@0.0.2","maintainers":[{"name":"google-wombot","email":"node-team-npm+wombot@google.com"},{"name":"ofrobots","email":"ofrobots@google.com"},{"name":"mrdoob","email":"info@mrdoob.com"}],"homepage":"https://github.com/google-labs-code/jules-sdk#readme","bugs":{"url":"https://github.com/google-labs-code/jules-sdk/issues"},"dist":{"shasum":"be09dce8f680d92d2ea4a7c36664432c07e6c78d","tarball":"https://registry.npmjs.org/@google/jules-sdk/-/jules-sdk-0.0.2.tgz","fileCount":37,"integrity":"sha512-I0D7QSHVE7GX/E2vZf+91HnAdxd2F8RcO2/zeziJ9xqXwy11/agIwmmrVKEeCIgrGNSQhZ9QNjeYYmQvW02RHQ==","signatures":[{"sig":"MEYCIQCD43mwJ7TK2eNWSpLZu23SRfK+dWO2dH00iFw3JIJPPQIhAKgwgcOoGEgecThs9+bkbqZoRJ8NRlNd2MD0kU+qe9zK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":533660},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs"},"./types":{"types":"./dist/types.d.ts"},"./package.json":"./package.json"},"gitHead":"7d3a56199493d59001f4b185a433bc6e56bfdd03","scripts":{"test":"vitest","build":"vite build","type-check":"tsc --project tsconfig.test.json"},"_npmUser":{"name":"google-wombot","email":"node-team-npm+wombot@google.com"},"repository":{"url":"git+https://github.com/google-labs-code/jules-sdk.git","type":"git"},"_npmVersion":"10.9.3","description":"Official Jules TypeScript SDK","directories":{},"_nodeVersion":"22.19.0","dependencies":{"zod":"^3.25.76","yaml":"^2.8.2"},"publishConfig":{"access":"public","registry":"https://wombat-dressing-room.appspot.com"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.10.4","vite":"^7.3.0","jsdom":"^27.1.0","vitest":"^3.2.4","js-yaml":"^4.1.0","typescript":"^5.8.3","@types/node":"^22.15.0","@types/js-yaml":"^4.0.9","vite-plugin-dts":"^4.5.4"},"_npmOperationalInternal":{"tmp":"tmp/jules-sdk_0.0.2_1769205300307_0.6682101217308605","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@google/jules-sdk","version":"0.0.3","keywords":["jules","ai","agent","sdk","developer-tools"],"author":{"name":"Google LLC"},"license":"Apache-2.0","_id":"@google/jules-sdk@0.0.3","maintainers":[{"name":"google-wombot","email":"node-team-npm+wombot@google.com"},{"name":"ofrobots","email":"ofrobots@google.com"},{"name":"mrdoob","email":"info@mrdoob.com"}],"homepage":"https://github.com/google-labs-code/jules-sdk#readme","bugs":{"url":"https://github.com/google-labs-code/jules-sdk/issues"},"dist":{"shasum":"bd4a3701d37723c16537629a749dc81950f4a868","tarball":"https://registry.npmjs.org/@google/jules-sdk/-/jules-sdk-0.0.3.tgz","fileCount":37,"integrity":"sha512-ufK5ajsV02wPMC8J4/fJnFCdn8N/do/pTqNGT8r0dnH4J4h3L2HhWVZtzFF+H9WsdCcCXIERDd4RaIY44YRsig==","signatures":[{"sig":"MEUCIF/5bPIlJ/YuJjZPk7aTOyzGjgShISlwqXjh5xCtxo9rAiEA5i4ysvsjF7w7fMMzS2M03mAdWast34ICgtO+Eg3Q9xc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":531407},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs"},"./types":{"types":"./dist/types.d.ts"},"./package.json":"./package.json"},"gitHead":"e4a2df271fd78ee52efdc671c7e3081d294e9d29","scripts":{"test":"vitest","build":"vite build","type-check":"tsc --project tsconfig.test.json"},"_npmUser":{"name":"google-wombot","email":"node-team-npm+wombot@google.com"},"repository":{"url":"git+https://github.com/google-labs-code/jules-sdk.git","type":"git"},"_npmVersion":"10.9.3","description":"Official Jules TypeScript SDK","directories":{},"_nodeVersion":"22.19.0","dependencies":{"zod":"^3.25.76","yaml":"^2.8.2"},"publishConfig":{"access":"public","registry":"https://wombat-dressing-room.appspot.com"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.10.4","vite":"^7.3.0","jsdom":"^27.1.0","vitest":"^3.2.4","js-yaml":"^4.1.0","typescript":"^5.8.3","@types/node":"^22.15.0","@types/js-yaml":"^4.0.9","vite-plugin-dts":"^4.5.4"},"_npmOperationalInternal":{"tmp":"tmp/jules-sdk_0.0.3_1769813084646_0.36358179023972226","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@google/jules-sdk","version":"0.0.4","keywords":["jules","ai","agent","sdk","developer-tools"],"author":{"name":"Google LLC"},"license":"Apache-2.0","_id":"@google/jules-sdk@0.0.4","maintainers":[{"name":"google-wombot","email":"node-team-npm+wombot@google.com"},{"name":"ofrobots","email":"ofrobots@google.com"},{"name":"mrdoob","email":"info@mrdoob.com"}],"homepage":"https://github.com/google-labs-code/jules-sdk#readme","bugs":{"url":"https://github.com/google-labs-code/jules-sdk/issues"},"dist":{"shasum":"8a91215f864fe76f59843224af7ba41bcfeba367","tarball":"https://registry.npmjs.org/@google/jules-sdk/-/jules-sdk-0.0.4.tgz","fileCount":37,"integrity":"sha512-KkqxTO6xtCQt4d9tTvxS6MDjs25pDuTC7Z/MzFWa5lUPJtSS86sae3uwckswUx7I91OKHL5t910N0sS9uj7mjg==","signatures":[{"sig":"MEUCIQDAjg/nA0djqg3JpXLRQmr+nDZfWdiFQYZNKDB5G4q95wIgN2/JEidCIL3w6nD2UNKe04fpLa75YyjXSZfTkkTAlwg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":531682},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs"},"./types":{"types":"./dist/types.d.ts"},"./package.json":"./package.json"},"gitHead":"1da3b5b7e80a2053c4f57477bf98f802353878d7","scripts":{"test":"vitest","build":"vite build","type-check":"tsc --project tsconfig.test.json"},"_npmUser":{"name":"google-wombot","email":"node-team-npm+wombot@google.com"},"repository":{"url":"git+https://github.com/google-labs-code/jules-sdk.git","type":"git"},"_npmVersion":"10.9.3","description":"Official Jules TypeScript SDK","directories":{},"_nodeVersion":"22.19.0","dependencies":{"zod":"^3.25.76","yaml":"^2.8.2"},"publishConfig":{"access":"public","registry":"https://wombat-dressing-room.appspot.com"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.10.4","vite":"^7.3.0","jsdom":"^27.1.0","vitest":"^3.2.4","js-yaml":"^4.1.0","typescript":"^5.8.3","@types/node":"^22.15.0","@types/js-yaml":"^4.0.9","vite-plugin-dts":"^4.5.4"},"_npmOperationalInternal":{"tmp":"tmp/jules-sdk_0.0.4_1770161764925_0.5390651500184627","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@google/jules-sdk","version":"0.0.5","keywords":["jules","ai","agent","sdk","developer-tools"],"author":{"name":"Google LLC"},"license":"Apache-2.0","_id":"@google/jules-sdk@0.0.5","maintainers":[{"name":"google-wombot","email":"node-team-npm+wombot@google.com"},{"name":"ofrobots","email":"ofrobots@google.com"},{"name":"mrdoob","email":"info@mrdoob.com"}],"homepage":"https://github.com/google-labs-code/jules-sdk#readme","bugs":{"url":"https://github.com/google-labs-code/jules-sdk/issues"},"dist":{"shasum":"d45b42d71d27dd1f723fbfd94e60e39106b710e1","tarball":"https://registry.npmjs.org/@google/jules-sdk/-/jules-sdk-0.0.5.tgz","fileCount":37,"integrity":"sha512-l0jkafrxZUNtv9cWoXY+vdXH1jOMcDGcfpl+fLenA+yqihm8V7QZuQ9KSwC+T/M2R2wgK/+dpFHwwNx2sKdrng==","signatures":[{"sig":"MEQCIDw4TsIPQNalZdnarBWkKEiUhTLEDlhWOxY3NWe+UxqtAiAgygjX2ar0LMaNALCCQX+jT+2zdsRxF3LZv9rUer0O/Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":531731},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs"},"./types":{"types":"./dist/types.d.ts"},"./package.json":"./package.json"},"gitHead":"6c45d2e2e41046e6f0048265c3e707ed6bb69188","scripts":{"test":"vitest","build":"vite build","type-check":"tsc --project tsconfig.test.json"},"_npmUser":{"name":"google-wombot","email":"node-team-npm+wombot@google.com"},"repository":{"url":"git+https://github.com/google-labs-code/jules-sdk.git","type":"git"},"_npmVersion":"10.9.3","description":"Official Jules TypeScript SDK","directories":{},"_nodeVersion":"22.19.0","dependencies":{"zod":"^3.25.76","yaml":"^2.8.2"},"publishConfig":{"access":"public","registry":"https://wombat-dressing-room.appspot.com"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.10.4","vite":"^7.3.0","jsdom":"^27.1.0","vitest":"^3.2.4","js-yaml":"^4.1.0","typescript":"^5.8.3","@types/node":"^22.15.0","@types/js-yaml":"^4.0.9","vite-plugin-dts":"^4.5.4"},"_npmOperationalInternal":{"tmp":"tmp/jules-sdk_0.0.5_1770169234046_0.12194660975161775","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"@google/jules-sdk","version":"0.0.6","keywords":["jules","ai","agent","sdk","developer-tools"],"author":{"name":"Google LLC"},"license":"Apache-2.0","_id":"@google/jules-sdk@0.0.6","maintainers":[{"name":"google-wombot","email":"node-team-npm+wombot@google.com"},{"name":"ofrobots","email":"ofrobots@google.com"},{"name":"mrdoob","email":"info@mrdoob.com"}],"homepage":"https://github.com/google-labs-code/jules-sdk#readme","bugs":{"url":"https://github.com/google-labs-code/jules-sdk/issues"},"dist":{"shasum":"4420dc4c477bfb694b61544ae3fbf2ac5db824d2","tarball":"https://registry.npmjs.org/@google/jules-sdk/-/jules-sdk-0.0.6.tgz","fileCount":37,"integrity":"sha512-ZW1r0QN26RNi0eA8xIB1criJh3gVIvAPtLh6gaWTkqvjviGmRGxwa4dXi0OQgRJdgnYIgneFKD+QHj9yL/hbrg==","signatures":[{"sig":"MEQCIG7hCAcYkoAldAZ9wMmQ/wanzbM9gR0ApWpAcGZ8oVovAiBEs+XJWxZ1J2uz6/wqQBX8sZJIgBK/y+v3Gm9pCi9+HA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":531731},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs"},"./types":{"types":"./dist/types.d.ts"},"./package.json":"./package.json"},"gitHead":"6c45d2e2e41046e6f0048265c3e707ed6bb69188","scripts":{"test":"vitest","build":"vite build","type-check":"tsc --project tsconfig.test.json"},"_npmUser":{"name":"google-wombot","email":"node-team-npm+wombot@google.com"},"repository":{"url":"git+https://github.com/google-labs-code/jules-sdk.git","type":"git"},"_npmVersion":"10.9.3","description":"Official Jules TypeScript SDK","directories":{},"_nodeVersion":"22.19.0","dependencies":{"zod":"^3.25.76","yaml":"^2.8.2"},"publishConfig":{"access":"public","registry":"https://wombat-dressing-room.appspot.com"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.10.4","vite":"^7.3.0","jsdom":"^27.1.0","vitest":"^3.2.4","js-yaml":"^4.1.0","typescript":"^5.8.3","@types/node":"^22.15.0","@types/js-yaml":"^4.0.9","vite-plugin-dts":"^4.5.4"},"_npmOperationalInternal":{"tmp":"tmp/jules-sdk_0.0.6_1770170600003_0.6822367154186482","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@google/jules-sdk","version":"0.1.0","keywords":["jules","ai","agent","sdk","developer-tools"],"author":{"name":"Google LLC"},"license":"Apache-2.0","_id":"@google/jules-sdk@0.1.0","maintainers":[{"name":"google-wombot","email":"node-team-npm+wombot@google.com"},{"name":"ofrobots","email":"ofrobots@google.com"},{"name":"mrdoob","email":"info@mrdoob.com"}],"homepage":"https://github.com/google-labs-code/jules-sdk#readme","bugs":{"url":"https://github.com/google-labs-code/jules-sdk/issues"},"dist":{"shasum":"bc29f876703a548122da7322110e56db16b8e634","tarball":"https://registry.npmjs.org/@google/jules-sdk/-/jules-sdk-0.1.0.tgz","fileCount":37,"integrity":"sha512-DBVhFOsLfWaVtO0miEeX+zQoazB55EYmK5/0VJSX/YHdeheZqNuPlKRV1vrnd9uSQAtU6ACRicQssMbnvJM6ng==","signatures":[{"sig":"MEUCICmfPFtd3Y/sUfn7TxZXU1kuJBCpv8jv+t/KNVfTwj7GAiEA4r91qm5mxJ2m+Aj/fAwM2BIlT80FE+Qlmtob95tIIcw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":558768},"type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs"},"./types":{"types":"./dist/types.d.ts"},"./package.json":"./package.json"},"gitHead":"34d54771b7ed626ab7da6350c16811e7a91c5609","scripts":{"test":"vitest","build":"vite build","type-check":"tsc --project tsconfig.test.json"},"_npmUser":{"name":"google-wombot","email":"node-team-npm+wombot@google.com"},"repository":{"url":"git+https://github.com/google-labs-code/jules-sdk.git","type":"git"},"_npmVersion":"10.9.3","description":"Official Jules TypeScript SDK","directories":{},"_nodeVersion":"22.19.0","dependencies":{"zod":"^3.25.76","yaml":"^2.8.2"},"publishConfig":{"access":"public","registry":"https://wombat-dressing-room.appspot.com"},"_hasShrinkwrap":false,"devDependencies":{"msw":"^2.10.4","vite":"^7.3.0","jsdom":"^27.1.0","vitest":"^3.2.4","js-yaml":"^4.1.0","typescript":"^5.8.3","@types/node":"^22.15.0","@types/js-yaml":"^4.0.9","vite-plugin-dts":"^4.5.4"},"_npmOperationalInternal":{"tmp":"tmp/jules-sdk_0.1.0_1772401865079_0.4612655263653662","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@google/jules-sdk","version":"0.2.0","type":"module","description":"Official Jules TypeScript SDK","repository":{"type":"git","url":"git+https://github.com/google-labs-code/jules-sdk.git"},"types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs"},"./types":{"types":"./dist/types.d.ts"},"./package.json":"./package.json"},"scripts":{"build":"vite build","test":"vitest","type-check":"tsc --project tsconfig.test.json"},"keywords":["jules","ai","agent","sdk","developer-tools"],"author":{"name":"Google LLC"},"license":"Apache-2.0","publishConfig":{"registry":"https://wombat-dressing-room.appspot.com","access":"public"},"dependencies":{"yaml":"^2.8.2","zod":"^3.25.76"},"devDependencies":{"@types/js-yaml":"^4.0.9","@types/node":"^22.15.0","js-yaml":"^4.1.0","jsdom":"^27.1.0","msw":"^2.10.4","typescript":"^5.8.3","vite":"^7.3.0","vite-plugin-dts":"^4.5.4","vitest":"^3.2.4"},"_id":"@google/jules-sdk@0.2.0","gitHead":"e6fc09fed9bcfb54733142660c0c7eb63a18b59c","bugs":{"url":"https://github.com/google-labs-code/jules-sdk/issues"},"homepage":"https://github.com/google-labs-code/jules-sdk#readme","_nodeVersion":"22.19.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-fKutNR8VvzsxqKA4uYkkJUZauXhiuIu9aVpjgeMuFADKt95y7oQbRJX/QmOS74fy2yAsY6SwKnIY6cJaaG6kpQ==","shasum":"0e5f226d6338b66637e647df0c9f07175272802c","tarball":"https://registry.npmjs.org/@google/jules-sdk/-/jules-sdk-0.2.0.tgz","fileCount":37,"unpackedSize":561950,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCvNznkhKvMtEHTQmDlwlkJejpa5oJQDKl+RR2MVTUcqAIgTCJxpSwii7/DKX9D/Kb8XwU/I96Usxb1J+Ia7qE1bqA="}]},"_npmUser":{"name":"google-wombot","email":"node-team-npm+wombot@google.com"},"directories":{},"maintainers":[{"name":"google-wombot","email":"node-team-npm+wombot@google.com"},{"name":"ofrobots","email":"ofrobots@google.com"},{"name":"mrdoob","email":"info@mrdoob.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/jules-sdk_0.2.0_1773097587237_0.8039376569509806"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-23T21:51:06.606Z","modified":"2026-03-09T23:06:27.710Z","0.0.1":"2026-01-23T21:51:06.915Z","0.0.2":"2026-01-23T21:55:00.454Z","0.0.3":"2026-01-30T22:44:44.800Z","0.0.4":"2026-02-03T23:36:05.074Z","0.0.5":"2026-02-04T01:40:34.205Z","0.0.6":"2026-02-04T02:03:20.158Z","0.1.0":"2026-03-01T21:51:05.243Z","0.2.0":"2026-03-09T23:06:27.558Z"},"bugs":{"url":"https://github.com/google-labs-code/jules-sdk/issues"},"author":{"name":"Google LLC"},"license":"Apache-2.0","homepage":"https://github.com/google-labs-code/jules-sdk#readme","keywords":["jules","ai","agent","sdk","developer-tools"],"repository":{"type":"git","url":"git+https://github.com/google-labs-code/jules-sdk.git"},"description":"Official Jules TypeScript SDK","maintainers":[{"name":"google-wombot","email":"node-team-npm+wombot@google.com"},{"name":"ofrobots","email":"ofrobots@google.com"},{"name":"mrdoob","email":"info@mrdoob.com"}],"readme":"# Jules SDK\n\n## An SDK for running a fleet of coding agents in the Cloud\n\nOrchestrate complex, long-running coding tasks to an ephemeral cloud environment integrated with a GitHub repo.\n\n## Examples\n\n- [Basic Session](./examples/basic-session/README.md)\n- [Advanced Session](./examples/advanced-session/README.md)\n- [Agent Workflow](./examples/agent/README.md)\n- [Webhook Integration](./examples/webhook/README.md)\n- [GitHub Actions](./examples/github-actions/README.md)\n\n## Send work to a Cloud based session\n\n```ts\nimport { jules } from '@google/jules-sdk';\n\nconst session = await jules.session({\n  prompt: `Fix visibility issues in the examples/nextjs app.\n\n  **Visibility issues**\n  - White text on white backgrounds\n  - Low contrast on button hover\n\n  **Instructions**\n  - Update the global styles and page components to a dark theme with the shadcn zinc palette.\n`,\n  source: { github: 'davideast/dataprompt', baseBranch: 'main' },\n  autoPr: true,\n});\n```\n\n## Monitor agent progress\n\n```ts\nimport { jules } from '@google/jules-sdk';\n\nconst session = jules.session('<session-id>');\n\nfor await (const activity of session.stream()) {\n  switch (activity.type) {\n    case 'planGenerated':\n      console.log(`${activity.plan.steps.length} steps.`);\n      break;\n    case 'progressUpdated':\n      console.log(`${activity.title}`);\n      // Check for code updates\n      if (artifact.type === 'changeSet') {\n        const parsed = artifact.parsed();\n        for (const file of parsed.files) {\n          console.log(`${file.path}: +${file.additions} -${file.deletions}`);\n        }\n      }\n      break;\n    case 'sessionCompleted':\n      console.log('Session finished successfully.');\n      break;\n  }\n}\n\n// Get the pull-request URL once complete\nconst outcome = await session.result();\nif (outcome.pullRequest) {\n  console.log(`PR: ${outcome.pullRequest.url}`);\n}\n```\n\n## Installation\n\n```bash\nnpm i @google/jules-sdk\nexport JULES_API_KEY=<api-key>\n```\n\n## Core Features\n\n### Run Cloud Functions with a Coding Agent\n\nJules sessions run in the cloud and can run without a GitHub repository. We call these \"Repoless\" sessions. They are incredibly powerful because they act like preconfigured serverless functions. The Jules VM comes with a preconfigured image with Node.js, Python, Rust, Bun, and other many other runtimes and tools.\n\nPass context through the prompt and have the agent generate the result.\n\n```ts\nimport { jules } from '@google/jules-sdk';\nimport { sql } from 'drizzle-orm';\n\nconst longDocumentsNobodyWantsToRead = await sql`SELECT * FROM documents`;\nconst userPrompt = process.argv[2];\n\nconst session = await jules.session({\n  prompt: `You are a assistant that can read long documents and answer questions about them.\n\n  ## The user's question\n  ${userPrompt}\n\n  ## The documents\n  ${longDocumentsNobodyWantsToRead.map((e) => e.title).join('\\n')}\n  \n  ## Answer Format\n  Create a markdown response with the following sections:\n  - Summary\n  - Answer\n  - Sources Cited\n  `,\n});\n\nconst result = await session.result();\nconst files = result.generatedFiles();\nconst answer = files.get('answer.md');\nconsole.log(answer?.content);\n\n// Call the script as CLI\n// node index.js \"Review the policies and explain to me delivery timelines like I'm 7 years old.\"\n```\n\n### Interactive Sessions\n\nUse `jules.session()` for workflows where you observe, provide feedback, and guide the process.\n\n```typescript\nconst session = await jules.session({\n  prompt: 'Refactor the user authentication module.',\n  source: { github: 'your-org/your-repo', baseBranch: 'develop' },\n});\n\nconsole.log(`Session created: ${session.id}`);\n\nawait session.waitFor('awaitingPlanApproval');\nconsole.log('Plan is ready. Approving it now.');\nawait session.approve();\n\nconst reply = await session.ask(\n  'Start with the first step and let me know when it is done.',\n);\nconsole.log(`[AGENT] ${reply.message}`);\n\nconst outcome = await session.result();\nconsole.log(`Session finished with state: ${outcome.state}`);\n```\n\n### Create a fleet of agent sessions\n\nProcess multiple items in parallel with `jules.all()`. Feels like `Promise.all()` but with built-in concurrency control.\n\n```javascript\nconst todos = ['Fix login bug', 'Update README', 'Refactor tests'];\n\nconst sessions = await jules.all(todos, (task) => ({\n  prompt: task,\n  source: { github: 'user/repo', baseBranch: 'main' },\n}));\n\nconsole.log(`Created ${sessions.length} sessions.`);\n```\n\nFor more control over the concurrency count and error handling.\n\n```javascript\nconst sessions = await jules.all(largeList, mapFn, {\n  concurrency: 10,\n  stopOnError: false,\n  delayMs: 500,\n});\n```\n\n### Query your local knowledge base\n\nThe SDK caches session data locally and exposes a query language for filtering and projecting across all sessions.\n\n```typescript\n// Find failed sessions\nconst failures = await jules.select({\n  from: 'sessions',\n  where: { state: 'failed' },\n  limit: 10,\n});\n\n// Get recent agent messages with computed summaries\nconst messages = await jules.select({\n  from: 'activities',\n  where: { type: 'agentMessaged' },\n  select: ['id', 'createTime', 'summary', 'artifactCount'],\n  order: 'desc',\n  limit: 5,\n});\n\n\n```\n\n### Reactive Streams\n\nThe `.stream()` method returns an `AsyncIterator` to observe the agent's progress.\n\n```typescript\nfor await (const activity of session.stream()) {\n  switch (activity.type) {\n    case 'planGenerated':\n      console.log(\n        'Plan:',\n        activity.plan.steps.map((s) => s.title),\n      );\n      break;\n    case 'agentMessaged':\n      console.log('Agent says:', activity.message);\n      break;\n    case 'sessionCompleted':\n      console.log('Session complete!');\n      break;\n  }\n}\n```\n\n### Code Diffs and Media Artifacts\n\nActivities can contain artifacts: code changes (`changeSet`) or images (`media`).\n\n```typescript\nfor (const artifact of activity.artifacts) {\n  if (artifact.type === 'changeSet') {\n    const parsed = artifact.parsed();\n    for (const file of parsed.files) {\n      console.log(`${file.path}: +${file.additions} -${file.deletions}`);\n    }\n  }\n  if (artifact.type === 'media' && artifact.format === 'image/png') {\n    await artifact.save(`./screenshots/${activity.id}.png`);\n  }\n}\n```\n\n### SDK Configuration\n\nThe default `jules` instance looks for the environment variable `JULES_API_KEY`. If you need to set an API key in code or create multiple instances, use the `with` method.\n\n```typescript\nimport { jules } from '@google/jules-sdk';\n\n// Multiple API keys\nconst customJules = jules.with({ apiKey: 'other-api-key' });\n\n// Polling & timeouts\nconst customJules = jules.with({\n  pollingIntervalMs: 2000,\n  timeout: 60000,\n});\n```\n\n### Error Handling\n\nThe SDK provides multiple error types that inherit from `JulesError`.\n\n```typescript\nimport {\n  jules,\n  JulesError,\n  JulesNetworkError,\n  JulesApiError,\n  JulesRateLimitError,\n  MissingApiKeyError\n} from '@google/jules-sdk';\n\ntry {\n  const session = await jules.session({ ... });\n} catch (error) {\n  if (error instanceof JulesError) {\n    console.error(`SDK error: ${error.message}`);\n  }\n}\n```\n\n### Agent Sources\n\nEach agent session has a `source` property that defines what the source context is used for the session. This is primarily a GitHub repository, but sessions can also run without a source and use only the context passed in the prompt.\n\n```typescript\n// List all connected sources\nfor await (const source of jules.sources()) {\n  if (source.type === 'githubRepo') {\n    console.log(`${source.githubRepo.owner}/${source.githubRepo.repo}`);\n    console.log(`  Private: ${source.githubRepo.isPrivate}`);\n  }\n}\n\n// Get a specific source\nconst myRepo = await jules.sources.get({ github: 'my-org/my-project' });\nif (myRepo) {\n  console.log(`Found: ${myRepo.id}`);\n}\n```\n\n### API Overview\n\n- **Core:**\n  - `jules`: The pre-initialized client.\n  - `jules.with(options)`: Creates a new client with custom configuration.\n  - `jules.run(options)`: Creates an automated session.\n  - `jules.session(options)`: Creates or rehydrates an interactive session.\n  - `jules.all(items, mapFn, options)`: Batch processing.\n- **Session Control:**\n  - `session.ask()`: Sends a message and awaits the agent's reply.\n  - `session.send()`: Sends a fire-and-forget message.\n  - `session.approve()`: Approves a pending plan.\n  - `session.waitFor()`: Pauses until the session reaches a specific state.\n  - `session.result()`: Awaits the final outcome.\n- **Observation:**\n  - `session.stream()`: Async iterator of all activities.\n  - `session.history()`: Stream of cached activities.\n  - `session.updates()`: Stream of live activities.\n  - `session.select(query)`: Query local cache.\n  - `session.info()`: Fetch latest session state.\n- **Artifacts:**\n  - `artifact.save()`: Save to filesystem.\n  - `artifact.toUrl()`: Get data URI.\n  - `artifact.parsed()`: Structured diff parsing for changesets.\n- **Sources:**\n  - `jules.sources()`: Async iterator over all connected sources.\n  - `jules.sources.get(filter)`: Retrieve a specific source by identifier.\n\n## License\n\nApache-2.0\n\n> **Note:** This is not an officially supported Google product. This project is not eligible for the [Google Open Source Software Vulnerability Rewards Program](https://bughunters.google.com/open-source-security).\n\n","readmeFilename":"README.md"}