{"_id":"@beremaran/opencode-goal","_rev":"8-b14e157e190c4ad0f584dc553610b0d0","name":"@beremaran/opencode-goal","dist-tags":{"latest":"0.4.2"},"versions":{"0.1.0":{"name":"@beremaran/opencode-goal","version":"0.1.0","keywords":["opencode","opencode-plugin","goal","autonomous-agent","ai-agent","slash-command","developer-tools"],"author":{"url":"https://github.com/beremaran","name":"Berke Arslan"},"license":"MIT","_id":"@beremaran/opencode-goal@0.1.0","maintainers":[{"name":"beremaran","email":"beremaran@gmail.com"}],"homepage":"https://github.com/beremaran/opencode-goal#readme","bugs":{"url":"https://github.com/beremaran/opencode-goal/issues"},"dist":{"shasum":"441790366a3f9014a6a2221fa9a4de2e4257497a","tarball":"https://registry.npmjs.org/@beremaran/opencode-goal/-/opencode-goal-0.1.0.tgz","fileCount":35,"integrity":"sha512-HTVnfyF1H6moUQlSDuEi+2K10YtpJK+T0BdnXOgtsJHEo1oMNDp1Glfjuw7m3zyeCpqVptZlKJdQ00lrcG1J0Q==","signatures":[{"sig":"MEYCIQDYNEA536YTpuf7GORN8Wr31ldo33XeoCAJzO76AwiKJQIhANyG6CutFWsZa3nk0UOdLw20ewa+oBep8kf3p9SWD2oZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":95526},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20","opencode":">=1.18.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./server":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"93f331ccc44152ee53d6ce556eba4c181d598c84","scripts":{"test":"tsc -p tsconfig.test.json && node --test .test-dist/test/*.test.js","build":"tsc -p tsconfig.json","check":"npm run format:check && npm run typecheck && npm test && npm run build","format":"prettier --write .","prepack":"npm run build","typecheck":"tsc -p tsconfig.json --noEmit","format:check":"prettier --check .","prepublishOnly":"npm run check"},"_npmUser":{"name":"beremaran","email":"beremaran@gmail.com"},"repository":{"url":"git+https://github.com/beremaran/opencode-goal.git","type":"git"},"_npmVersion":"11.17.0","description":"Persistent, independently evaluated /goal workflows for OpenCode","directories":{},"sideEffects":false,"_nodeVersion":"26.4.0","dependencies":{"@opencode-ai/plugin":"^1.18.10"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"prettier":"^3.6.2","typescript":"^5.8.3","@types/node":"^24.1.0"},"_npmOperationalInternal":{"tmp":"tmp/opencode-goal_0.1.0_1785441411453_0.12432872520784888","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@beremaran/opencode-goal","version":"0.2.0","keywords":["opencode","opencode-plugin","goal","autonomous-agent","ai-agent","slash-command","developer-tools"],"author":{"url":"https://github.com/beremaran","name":"Berke Arslan"},"license":"MIT","_id":"@beremaran/opencode-goal@0.2.0","maintainers":[{"name":"beremaran","email":"beremaran@gmail.com"}],"homepage":"https://github.com/beremaran/opencode-goal#readme","bugs":{"url":"https://github.com/beremaran/opencode-goal/issues"},"dist":{"shasum":"9d09116a987c910cbd0617c9d7921dc9b0438480","tarball":"https://registry.npmjs.org/@beremaran/opencode-goal/-/opencode-goal-0.2.0.tgz","fileCount":47,"integrity":"sha512-6/5ihttCog32wpG7LThRvEKBzNdtKBvBJfErJopZniVcTIdn+sNN+O3EC8EUlzTih3lAQ7/w/Y8BjJmEGLJKJw==","signatures":[{"sig":"MEUCIQDfVEOlZ9AsFY0eVyZioYrRh8f5tBM2ztPCadO+NQm5/wIgFXatsLzz6J3rxLt36AC0ZGPYUSwgBkdcTPxV73Q7DbA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@beremaran%2fopencode-goal@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":120766},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20","opencode":">=1.18.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./tui":{"types":"./dist/tui.d.ts","import":"./dist/tui.js"},"./server":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"funding":"https://github.com/sponsors/beremaran","gitHead":"44b93f01cdd995483400040edfa22a31aebc3a5e","scripts":{"test":"tsc -p tsconfig.test.json && node --test .test-dist/test/*.test.js","build":"tsc -p tsconfig.json","check":"npm run format:check && npm run typecheck && npm test && npm run build","format":"prettier --write .","prepack":"npm run build","typecheck":"tsc -p tsconfig.json --noEmit","format:check":"prettier --check .","prepublishOnly":"npm run check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:09a73221-ba3a-4d8f-a42d-3032809c5cae"}},"repository":{"url":"git+https://github.com/beremaran/opencode-goal.git","type":"git"},"_npmVersion":"11.16.0","description":"Persistent, independently evaluated /goal workflows for OpenCode","directories":{},"sideEffects":false,"_nodeVersion":"24.18.0","dependencies":{"@opencode-ai/plugin":"^1.18.10"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"prettier":"^3.6.2","solid-js":"^1.9.12","typescript":"^5.8.3","@types/node":"^24.1.0","@opentui/core":"^0.4.5","@opentui/solid":"^0.4.5","@opentui/keymap":"^0.4.5"},"peerDependencies":{"solid-js":"1.9.12","@opentui/core":">=0.4.5","@opentui/solid":">=0.4.5","@opentui/keymap":">=0.4.5"},"_npmOperationalInternal":{"tmp":"tmp/opencode-goal_0.2.0_1785726100061_0.08940730241752992","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@beremaran/opencode-goal","version":"0.3.0","keywords":["opencode","opencode-plugin","goal","autonomous-agent","ai-agent","slash-command","developer-tools"],"author":{"url":"https://github.com/beremaran","name":"Berke Arslan"},"license":"MIT","_id":"@beremaran/opencode-goal@0.3.0","maintainers":[{"name":"beremaran","email":"beremaran@gmail.com"}],"homepage":"https://github.com/beremaran/opencode-goal#readme","bugs":{"url":"https://github.com/beremaran/opencode-goal/issues"},"dist":{"shasum":"12d42a1e3a004a1e209891880b077fc8a9a37d89","tarball":"https://registry.npmjs.org/@beremaran/opencode-goal/-/opencode-goal-0.3.0.tgz","fileCount":55,"integrity":"sha512-bDq/sB1CRa737GhSfdoy+ozVOOjXIfzCslkjFPMUSTHfyzjSfViIlFHNCf/wTm9xKQnnSTBmA2u0fDrjVmlwTA==","signatures":[{"sig":"MEQCIB3CoVbAoHLiGQG/9OXWDdLWlaWECxdXVD7kz5ftoMOJAiAIPMCD7Yuu85J19cO5Y4+aZKX1c3JA2nC252kwa44ljg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@beremaran%2fopencode-goal@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":182242},"main":"./dist/server.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20","opencode":">=1.18.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./v2":{"types":"./dist/v2.d.ts","import":"./dist/v2.js"},"./tui":{"types":"./dist/tui.d.ts","import":"./dist/tui.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"}},"funding":"https://github.com/sponsors/beremaran","gitHead":"279aa71085ac859f11294df20a1396aa731d46be","scripts":{"test":"tsc -p tsconfig.test.json && node --test .test-dist/test/*.test.js","build":"tsc -p tsconfig.json","check":"npm run format:check && npm run typecheck && npm test && npm run build","format":"prettier --write .","prepack":"npm run build","typecheck":"tsc -p tsconfig.json --noEmit","format:check":"prettier --check .","prepublishOnly":"npm run check"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:12c6d729-ed2e-4133-8a2e-a46dd0ff7e51"}},"repository":{"url":"git+https://github.com/beremaran/opencode-goal.git","type":"git"},"_npmVersion":"11.17.0","description":"Persistent, independently evaluated /goal workflows for OpenCode","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.1.8","@opencode-ai/plugin":"^1.18.10"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"prettier":"^3.6.2","solid-js":"^1.9.12","typescript":"^5.8.3","@types/node":"^24.1.0","@opentui/core":"^0.4.5","@opentui/solid":"^0.4.5","@opentui/keymap":"^0.4.5"},"peerDependencies":{"solid-js":"1.9.12","@opentui/core":">=0.4.5","@opentui/solid":">=0.4.5","@opentui/keymap":">=0.4.5"},"_npmOperationalInternal":{"tmp":"tmp/opencode-goal_0.3.0_1787388668939_0.43384119111282016","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@beremaran/opencode-goal","version":"0.4.0","keywords":["opencode","opencode-plugin","goal","autonomous-agent","ai-agent","slash-command","developer-tools"],"author":{"url":"https://github.com/beremaran","name":"Berke Arslan"},"license":"MIT","_id":"@beremaran/opencode-goal@0.4.0","maintainers":[{"name":"beremaran","email":"beremaran@gmail.com"}],"homepage":"https://github.com/beremaran/opencode-goal#readme","bugs":{"url":"https://github.com/beremaran/opencode-goal/issues"},"dist":{"shasum":"c6d69390e030fc387396c296579b4ad05d7c7d38","tarball":"https://registry.npmjs.org/@beremaran/opencode-goal/-/opencode-goal-0.4.0.tgz","fileCount":71,"integrity":"sha512-Sgmz+N07vq1l60SnW5AiQ3O+YRKSlOuB/ybdnFPciO5rdF7ui4+AbKE++Cg/segZL8kJaDR09uAVA2LHq/JWbA==","signatures":[{"sig":"MEUCIQD3ovLuWvosvtytgDvoy9sCnn0i919z+ec8mC4a4qsflgIgB680yCWY8PoR318C55K4gZIUwFFZ7G6Rvykh4DhrTqc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@beremaran%2fopencode-goal@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":156874},"main":"./dist/server.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20","opencode":">=1.18.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./v2":{"types":"./dist/v2.d.ts","import":"./dist/v2.js"},"./tui":{"types":"./dist/tui.d.ts","import":"./dist/tui.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"}},"funding":"https://github.com/sponsors/beremaran","gitHead":"04a685987666d3c086e53e744d02f15ce5257c0c","scripts":{"lint":"eslint .","test":"tsc -p tsconfig.test.json && node --test .test-dist/test/*.test.js","build":"tsc -p tsconfig.json","check":"npm run format:check && npm run lint && npm run typecheck && npm run test:coverage && npm run build && npm run package:check","format":"prettier --write .","prepack":"npm run build","typecheck":"tsc -p tsconfig.json --noEmit","format:check":"prettier --check .","package:check":"npm pack --dry-run --ignore-scripts","test:coverage":"tsc -p tsconfig.test.json && node --test --experimental-test-coverage --test-coverage-include=.test-dist/src/** --test-coverage-lines=65 --test-coverage-branches=60 --test-coverage-functions=70 .test-dist/test/*.test.js","prepublishOnly":"npm run check","security:audit":"bun audit --audit-level=high"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:12c6d729-ed2e-4133-8a2e-a46dd0ff7e51"}},"repository":{"url":"git+https://github.com/beremaran/opencode-goal.git","type":"git"},"_npmVersion":"11.17.0","description":"Persistent, evaluated /goal workflows for OpenCode","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.1.8","@opencode-ai/plugin":"^1.18.10"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.2.23","devDependencies":{"eslint":"^10.9.0","prettier":"^3.6.2","solid-js":"^1.9.12","@eslint/js":"^10.0.1","typescript":"^5.8.3","@types/node":"^24.1.0","@opentui/core":"^0.4.5","@opentui/solid":"^0.4.5","@opentui/keymap":"^0.4.5","typescript-eslint":"^8.67.0"},"peerDependencies":{"solid-js":"1.9.12","@opentui/core":">=0.4.5","@opentui/solid":">=0.4.5","@opentui/keymap":">=0.4.5"},"_npmOperationalInternal":{"tmp":"tmp/opencode-goal_0.4.0_1787454588989_0.47554794518728594","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@beremaran/opencode-goal","version":"0.4.1","keywords":["opencode","opencode-plugin","goal","autonomous-agent","ai-agent","slash-command","developer-tools"],"author":{"url":"https://github.com/beremaran","name":"Berke Arslan"},"license":"MIT","_id":"@beremaran/opencode-goal@0.4.1","maintainers":[{"name":"beremaran","email":"beremaran@gmail.com"}],"homepage":"https://github.com/beremaran/opencode-goal#readme","bugs":{"url":"https://github.com/beremaran/opencode-goal/issues"},"dist":{"shasum":"b90d525d74a6bba7e6ae58e3b4833510388d8d69","tarball":"https://registry.npmjs.org/@beremaran/opencode-goal/-/opencode-goal-0.4.1.tgz","fileCount":71,"integrity":"sha512-VzuakjGK622vgyGcCI0N/HussOPIAc0FdbLffnR3JxOKwa8cmn68Sxjx8bDF3G16Fp6olwz8bO1b+lhBg3UtmA==","signatures":[{"sig":"MEUCIQCBouys18ZcP6QqRbPrkaXb7ejzIuZSUU5L9jjtJuAwtwIgWxTbu01mi5rP9HtQQzuLP9/a0GWjVUHNnpf1xew+qf8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@beremaran%2fopencode-goal@0.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":156971},"main":"./dist/server.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20","opencode":">=1.18.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./v2":{"types":"./dist/v2.d.ts","import":"./dist/v2.js"},"./tui":{"types":"./dist/tui.d.ts","import":"./dist/tui.js"},"./server":{"types":"./dist/server.d.ts","import":"./dist/server.js"}},"funding":"https://github.com/sponsors/beremaran","gitHead":"3181da38d5534c5c97c374aee6abd4acd8687d80","scripts":{"lint":"eslint .","test":"tsc -p tsconfig.test.json && node --test .test-dist/test/*.test.js","build":"tsc -p tsconfig.json","check":"npm run format:check && npm run lint && npm run typecheck && npm run test:coverage && npm run build && npm run package:check","format":"prettier --write .","prepack":"npm run build","typecheck":"tsc -p tsconfig.json --noEmit","format:check":"prettier --check .","package:check":"npm pack --dry-run --ignore-scripts","test:coverage":"tsc -p tsconfig.test.json && node --test --experimental-test-coverage --test-coverage-include=.test-dist/src/** --test-coverage-lines=65 --test-coverage-branches=60 --test-coverage-functions=70 .test-dist/test/*.test.js","prepublishOnly":"npm run check","security:audit":"bun audit --audit-level=high"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:12c6d729-ed2e-4133-8a2e-a46dd0ff7e51"}},"repository":{"url":"git+https://github.com/beremaran/opencode-goal.git","type":"git"},"_npmVersion":"11.17.0","description":"Persistent, evaluated /goal workflows for OpenCode","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.1.8","@opencode-ai/plugin":"^1.18.10"},"publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"packageManager":"bun@1.2.23","devDependencies":{"eslint":"^10.9.0","prettier":"^3.6.2","solid-js":"^1.9.12","@eslint/js":"^10.0.1","typescript":"^5.8.3","@types/node":"^24.1.0","@opentui/core":"^0.4.5","@opentui/solid":"^0.4.5","@opentui/keymap":"^0.4.5","typescript-eslint":"^8.67.0"},"peerDependencies":{"solid-js":"1.9.12","@opentui/core":">=0.4.5","@opentui/solid":">=0.4.5","@opentui/keymap":">=0.4.5"},"_npmOperationalInternal":{"tmp":"tmp/opencode-goal_0.4.1_1787489977803_0.2622781810066772","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@beremaran/opencode-goal","version":"0.4.2","description":"Persistent, independently evaluated /goal workflows for OpenCode 2","type":"module","license":"MIT","author":{"name":"Berke Arslan","url":"https://github.com/beremaran"},"repository":{"type":"git","url":"git+https://github.com/beremaran/opencode-goal.git"},"bugs":{"url":"https://github.com/beremaran/opencode-goal/issues"},"homepage":"https://github.com/beremaran/opencode-goal#readme","funding":"https://github.com/sponsors/beremaran","sideEffects":false,"main":"./src/v2.ts","types":"./src/v2.ts","exports":{".":{"types":"./src/v2.ts","default":"./src/v2.ts"},"./server":{"types":"./src/server.ts","default":"./src/server.ts"},"./v2":{"types":"./src/v2.ts","default":"./src/v2.ts"},"./tui":{"types":"./src/tui.ts","default":"./src/tui.ts"}},"engines":{"node":">=20","opencode":">=2.0.0"},"packageManager":"bun@1.2.23","publishConfig":{"access":"public","provenance":true},"scripts":{"build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit","test":"tsc -p tsconfig.test.json && node --test .test-dist/test/*.test.js","test:coverage":"tsc -p tsconfig.test.json && node --test --experimental-test-coverage --test-coverage-include=.test-dist/src/** --test-coverage-lines=65 --test-coverage-branches=60 --test-coverage-functions=70 .test-dist/test/*.test.js","format":"prettier --write .","format:check":"prettier --check .","lint":"eslint .","package:check":"npm pack --dry-run --ignore-scripts","security:audit":"bun audit --audit-level=high","check":"npm run format:check && npm run lint && npm run typecheck && npm run test:coverage && npm run build && npm run package:check","prepack":"npm run build","prepublishOnly":"npm run check"},"keywords":["opencode","opencode-plugin","goal","goal-tracking","session-persistence","slash-command","automation"],"dependencies":{"@opencode-ai/plugin":"^1.18.10","zod":"^4.1.8"},"peerDependencies":{"@opentui/core":">=0.4.5","@opentui/keymap":">=0.4.5","@opentui/solid":">=0.4.5","solid-js":"1.9.12"},"devDependencies":{"@eslint/js":"^10.0.1","@opentui/core":"^0.4.5","@opentui/keymap":"^0.4.5","@opentui/solid":"^0.4.5","@types/node":"^24.1.0","eslint":"^10.9.0","prettier":"^3.6.2","solid-js":"^1.9.12","typescript":"^5.8.3","typescript-eslint":"^8.67.0"},"gitHead":"60749ed3c6ccfb652deff97ca7252f2dbdb2c12f","_id":"@beremaran/opencode-goal@0.4.2","_nodeVersion":"24.20.0","_npmVersion":"11.19.0","dist":{"integrity":"sha512-h0B5UEf/xxw8xaphUmfKnjW97SoGCJjXAutDZRyiUDpErilhdXEjWFi3RqvJsRuM6HWP2JhS6QTRPP3se/ojQQ==","shasum":"3bf3b3f3cf69fb83865223448bae14f3b8a00f56","tarball":"https://registry.npmjs.org/@beremaran/opencode-goal/-/opencode-goal-0.4.2.tgz","fileCount":21,"unpackedSize":89070,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@beremaran%2fopencode-goal@0.4.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGC7vzXyJ2Lmaf5eGh7WovB0HIIYySWo4+pUsAji7OZoAiAME0dDtysg8zzaGCHYeWJ8BYOgvjNrRyzemKKJUBWtOA=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:12c6d729-ed2e-4133-8a2e-a46dd0ff7e51"}},"directories":{},"maintainers":[{"name":"beremaran","email":"beremaran@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/opencode-goal_0.4.2_1789459576147_0.8909406674804636"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-30T19:56:51.206Z","modified":"2026-09-15T08:06:16.629Z","0.1.0":"2026-07-30T19:56:51.594Z","0.2.0":"2026-08-03T03:01:40.209Z","0.3.0":"2026-08-22T08:51:09.075Z","0.4.0":"2026-08-23T03:09:49.121Z","0.4.1":"2026-08-23T12:59:37.942Z","0.4.2":"2026-09-15T08:06:16.296Z"},"bugs":{"url":"https://github.com/beremaran/opencode-goal/issues"},"author":{"name":"Berke Arslan","url":"https://github.com/beremaran"},"license":"MIT","homepage":"https://github.com/beremaran/opencode-goal#readme","keywords":["opencode","opencode-plugin","goal","goal-tracking","session-persistence","slash-command","automation"],"repository":{"type":"git","url":"git+https://github.com/beremaran/opencode-goal.git"},"description":"Persistent, independently evaluated /goal workflows for OpenCode 2","maintainers":[{"name":"beremaran","email":"beremaran@gmail.com"}],"readme":"# OpenCode Goal\n\n[![CI](https://github.com/beremaran/opencode-goal/actions/workflows/ci.yml/badge.svg)](https://github.com/beremaran/opencode-goal/actions/workflows/ci.yml)\n[![npm](https://img.shields.io/npm/v/@beremaran/opencode-goal)](https://www.npmjs.com/package/@beremaran/opencode-goal)\n[![license](https://img.shields.io/npm/l/@beremaran/opencode-goal)](LICENSE)\n\nA persistent `/goal` workflow for [OpenCode](https://opencode.ai): define a\ncompletion condition once, let OpenCode work across turns, and stop only when\nan independent evaluator finds enough evidence that the condition is\nsatisfied.\n\nThe plugin combines:\n\n- Claude Code-style completion evaluation after every turn.\n- Codex-style session persistence, token accounting, pause/resume controls,\n  model tools, and idle continuation.\n\nRequires OpenCode 2.0.0 or newer. The package root is the OpenCode 2\n`{ id, setup }` plugin; a legacy OpenCode 1 server adapter remains available\nunder the explicit `./server` export.\n\n## Install\n\nInstall the package directly from GitHub with the current OpenCode CLI:\n\n```bash\nopencode plugin add github:beremaran/opencode-goal\n```\n\nNo npm publication is required. For project-local configuration or plugin\noptions, add the package to `opencode.json`:\n\n```json\n{\n    \"$schema\": \"https://opencode.ai/config.json\",\n    \"plugins\": [\n        {\n            \"package\": \"github:beremaran/opencode-goal\",\n            \"options\": {\n                \"evaluatorModel\": \"anthropic/claude-haiku-4-5\"\n            }\n        }\n    ]\n}\n```\n\nThe package also exports `./tui`. OpenCode's CLI loads that export automatically\nwhen the package is configured in `opencode.json`, so the sidebar and `/goal`\ncommand do not need a separate CLI package entry.\n\nFor a local checkout, replace the GitHub spec with its absolute path:\n\n```json\n{\n    \"$schema\": \"https://opencode.ai/config.json\",\n    \"plugins\": [\"/absolute/path/to/opencode-goal\"]\n}\n```\n\nOpenCode installs missing package plugins in the background. Configuration\nchanges under watched directories reload automatically; restart if a local\nsource change is not picked up.\n\n## Usage\n\n```text\n/goal all authentication tests pass and lint is clean\n/goal migrate every call site and make the build pass\n```\n\nControl the current session goal with:\n\n```text\n/goal          Show status, elapsed time, turns, tokens, and the last evaluation\n/goal pause    Pause automatic continuation\n/goal resume   Resume work immediately\n/goal clear    Remove the session goal\n/goal cancel   Alias for clear\n/goal help     Show command syntax\n```\n\nThe goal remains active until it completes, is paused, is cleared, or is marked\nblocked.\n\nWhen a user asks for persistent goal tracking in ordinary language, an agent can\nstart it through the `create_goal` model tool without requiring a `/goal`\ncommand, but it cannot replace an unfinished goal. The user must explicitly\nclear or replace unfinished work.\n\n## TUI sidebar\n\nWhen the TUI entrypoint is enabled, the current session's goal appears in a\ncollapsible **Goal** section beside OpenCode's Todo and Files sections. It shows:\n\n- Status and objective.\n- Elapsed time, turns, and tokens used.\n- The latest independent evaluator reason.\n\nThe section disappears when the session has no goal.\n\n## How it works\n\n1. The V2 server plugin registers the model tools and session context hook.\n2. The `./tui` export registers the sidebar and `/goal` keymap command. The\n   command stores a per-session goal and starts the first work prompt.\n3. When the parent session becomes idle, the plugin reconstructs the goal-period\n   transcript and accounts for input, output, and reasoning tokens. Cache tokens\n   are excluded.\n4. A temporary child session evaluates the completion condition from transcript\n   evidence. The evaluator model is selected from `evaluatorModel`, then the\n   parent session model.\n5. A negative decision and its reason are sent through `session.prompt()`,\n   starting the next turn.\n6. A positive decision marks the durable goal complete and stops continuation.\n\nThe plugin also exposes three model tools:\n\n- `create_goal` starts a persistent goal when the user explicitly requests one.\n  It refuses to overwrite any unfinished goal in the session.\n- `get_goal` returns the current state and usage.\n- `update_goal` records a completion claim for independent evaluation, or marks\n  a genuinely repeated blocker after at least three goal turns.\n\nActive goal context is injected through the V2 session context hook. Interrupting\nan OpenCode response pauses the goal so pressing Escape does not immediately\nrestart it.\n\n## Configuration\n\nPlugin options can be supplied in an OpenCode 2 plugin entry:\n\n```json\n{\n    \"plugins\": [\n        {\n            \"package\": \"github:beremaran/opencode-goal\",\n            \"options\": {\n                \"evaluatorModel\": \"anthropic/claude-haiku-4-5\",\n                \"evaluatorAgent\": \"build\",\n                \"maxTranscriptChars\": 48000,\n                \"continuationDelayMs\": 250,\n                \"deleteEvaluatorSessions\": true,\n                \"stateDirectory\": \"/custom/state/root\"\n            }\n        }\n    ]\n}\n```\n\nAll options are optional. `maxTranscriptChars` defaults to `48000`,\n`continuationDelayMs` to `0`, and `deleteEvaluatorSessions` to `true`.\n`evaluatorModel` accepts a `provider/model` reference; when omitted, the parent\nsession's model is used. `evaluatorAgent` selects the evaluator agent when set.\n\nState is stored outside the repository under:\n\n```text\n$XDG_STATE_HOME/opencode-goal/<project-id>/<session-id>.json\n```\n\nWhen `XDG_STATE_HOME` is unset, the root is\n`~/.local/state/opencode-goal`.\n\n## Runtime and limitations\n\n- The slash command and sidebar are available in OpenCode's terminal CLI. Other\n  OpenCode clients can use the model tools directly.\n- Evaluators can judge only transcript evidence. If work happened but the\n  agent did not surface it, the evaluator should ask for stronger evidence and\n  continue.\n- This plugin cannot bypass provider rate, usage, trust, or permission limits.\n- A provider or model failure pauses the goal instead of risking an unverified\n  runaway loop. The goal remains persisted and can be resumed.\n- The V2 API does not expose evaluator-session deletion, so evaluator sessions\n  may remain in the session list even when `deleteEvaluatorSessions` is enabled.\n\n## Local development\n\n```bash\ngit clone https://github.com/beremaran/opencode-goal.git\ncd opencode-goal\nbun install\nbun run check\n```\n\nTo load the checkout directly in OpenCode 2, add its absolute path to\n`opencode.json`:\n\n```json\n{\n    \"$schema\": \"https://opencode.ai/config.json\",\n    \"plugins\": [\"/absolute/path/to/opencode-goal\"]\n}\n```\n\nOpenCode loads the TypeScript source through the package exports. Restart it if\na local source change is not picked up.\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for the contribution workflow and\n[RELEASING.md](RELEASING.md) for maintainer release instructions.\n\n## License\n\n[MIT](LICENSE)\n\nThe design follows OpenCode's documented\n[plugin configuration](https://opencode.ai/v2/docs/plugins/),\n[server plugin API](https://opencode.ai/v2/docs/build/plugins/), and\n[CLI plugin API](https://opencode.ai/v2/docs/build/plugins/cli). Completion\nbehavior is modeled on Claude Code's documented\n[`/goal` loop](https://code.claude.com/docs/en/goal), while persistence follows\nCodex's goal lifecycle.\n","readmeFilename":"README.md"}