{"_id":"@akalsey/openclaw-feedback","_rev":"3-04d4c82025e5633e99a90b83a1dcdb0d","name":"@akalsey/openclaw-feedback","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@akalsey/openclaw-feedback","version":"0.1.0","_id":"@akalsey/openclaw-feedback@0.1.0","maintainers":[{"name":"akalsey","email":"adam@kalsey.com"}],"dist":{"shasum":"afb58eb1d3f1823ca4e6dfc85e82195181f704b0","tarball":"https://registry.npmjs.org/@akalsey/openclaw-feedback/-/openclaw-feedback-0.1.0.tgz","fileCount":10,"integrity":"sha512-LGcEfAX+Yvud1L520/o+5G4Lu4zTONvBesbqi3ifSuGA6hrHmsc1yEBMrvKKSKo2R4m+Spys6FwTlZTENGPxNA==","signatures":[{"sig":"MEYCIQDFvmzQdvdOjGqSU6IjFf6pDwpAWr5BvG6GXPYYW8dvzQIhALUkArtw4Tx1ZRDXLr1Bl+hPcklVneSnDN8rFoAFGtzj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13811},"main":"./dist/index.js","type":"module","exports":{".":"./dist/index.js"},"gitHead":"f1b1febcca21adfba5d6ba11efc67803d1b445ca","scripts":{"test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"akalsey","email":"adam@kalsey.com"},"openclaw":{"compat":{"pluginApi":">=2026.3.24-beta.2","minGatewayVersion":"2026.3.24-beta.2"},"install":{"localPath":"."},"extensions":["./dist/index.js"]},"_npmVersion":"11.13.0","description":"You give feedback constantly — correcting a format choice, confirming something worked well, redirecting how the agent handled a decision. This plugin catches those signals from your normal chat messages and makes them permanent.","directories":{},"_nodeVersion":"26.0.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","openclaw":"latest","typescript":"^5.5.0","@types/node":"^22.0.0"},"peerDependencies":{"openclaw":">=2026.3.24-beta.2"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-feedback_0.1.0_1779425073893_0.21403408184822448","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @akalsey/sapience-feedback"},"0.1.1":{"name":"@akalsey/openclaw-feedback","version":"0.1.1","_id":"@akalsey/openclaw-feedback@0.1.1","maintainers":[{"name":"akalsey","email":"adam@kalsey.com"}],"dist":{"shasum":"a2e7582a54fc066866d8c49479a16d9756ec4d59","tarball":"https://registry.npmjs.org/@akalsey/openclaw-feedback/-/openclaw-feedback-0.1.1.tgz","fileCount":10,"integrity":"sha512-tAooo5afsvw7fTLIU0yU+Amk9WiZQX8kObJSUfE5N7OWRIIPoat7LAi4xDAMTKRqUTlKSxxCi8OVVKr7YDirOQ==","signatures":[{"sig":"MEUCIQDhCL6LZwu80V0EpM+4I+kINfcFsOpf2MB704tHniMGwAIgSduXiw+T90D7STit80k1pdlfgXHzJDLS+DcnR+XrBfs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13854},"main":"./dist/index.js","type":"module","exports":{".":"./dist/index.js"},"gitHead":"b70d59d46562e15bcf869902d2a8227a82ab834d","scripts":{"test":"vitest run","build":"tsc","typecheck":"tsc --noEmit","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"akalsey","email":"adam@kalsey.com"},"openclaw":{"compat":{"pluginApi":">=2026.3.24-beta.2","minGatewayVersion":"2026.3.24-beta.2"},"install":{"localPath":"."},"extensions":["./dist/index.js"]},"_npmVersion":"11.13.0","description":"You give feedback constantly — correcting a format choice, confirming something worked well, redirecting how the agent handled a decision. This plugin catches those signals from your normal chat messages and makes them permanent.","directories":{},"_nodeVersion":"26.0.0","_hasShrinkwrap":false,"devDependencies":{"vitest":"^2.0.0","openclaw":"latest","typescript":"^5.5.0","@types/node":"^22.0.0"},"peerDependencies":{"openclaw":">=2026.3.24-beta.2"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-feedback_0.1.1_1779425648250_0.2110874670840639","host":"s3://npm-registry-packages-npm-production"},"deprecated":"Renamed to @akalsey/sapience-feedback"}},"time":{"created":"2026-05-22T04:44:33.757Z","modified":"2026-05-24T16:05:49.185Z","0.1.0":"2026-05-22T04:44:34.023Z","0.1.1":"2026-05-22T04:54:08.390Z"},"description":"You give feedback constantly — correcting a format choice, confirming something worked well, redirecting how the agent handled a decision. This plugin catches those signals from your normal chat messages and makes them permanent.","maintainers":[{"name":"akalsey","email":"adam@kalsey.com"}],"readme":"# OpenClaw Feedback\n\nYou give feedback constantly — correcting a format choice, confirming something worked well, redirecting how the agent handled a decision. This plugin catches those signals from your normal chat messages and makes them permanent.\n\nA correction becomes a calibration. A confirmation reinforces a pattern. The sapience calibration profile updates in real time so the agent's behavior reflects how you actually want it to operate.\n\nThis plugin is part of the Sapience Suite that gives your OpenClaw agent genuine agency — not just the ability to execute tasks, but the judgment to know when to act, when to ask, when to propose, and when to say \"I'm not sure how you want me to handle this.\"\n\nThis plugin can be used without Sapience if all you want to do is have the agent track and incorporate feedback.\n\n---\n\n## Setup\n\n### Prerequisites\n\n`openclaw-sapience` must be installed. This plugin writes to the shared calibration profile at `~/.openclaw/sapience/calibration.json`.\n\n### Install\n\n```bash\nopenclaw plugins install npm:@akalsey/openclaw-feedback\n```\n\n### Configuration\n\n```json\n{\n  \"plugins\": {\n    \"sapience-feedback\": {\n      \"logPath\": \"~/.openclaw/sapience/feedback.md\",\n      \"calibrationPath\": \"~/.openclaw/sapience/calibration.json\",\n      \"memoryEnabled\": true\n    }\n  }\n}\n```\n\nAll settings are optional — defaults are used if omitted.\n\n---\n\n## What it detects\n\nThe plugin scans every message you send for three types of signals:\n\n### Corrections\n\nPhrases that express \"don't do that\" or \"do it differently\":\n\n- `don't update OKRs for other teams without asking`\n- `stop doing that`\n- `never push to main without a PR`\n- `use the company template, not the default`\n- `you shouldn't have done that without checking`\n\n**Effect:** Confidence on the matching domain/action-class drops by 0.3.\n\n### Confirmations\n\nPhrases that express \"yes, that was right\":\n\n- `yes exactly`\n- `good call`\n- `perfect, keep doing that`\n- `that's exactly right`\n\n**Effect:** Confidence on the matching domain/action-class increases by 0.1.\n\n### Tier adjustments\n\nExplicit instructions about how much autonomy you want:\n\n- `just do it` / `you don't need to ask` → bumps toward **Act**\n- `always ask me first` / `ask me before touching X` → bumps toward **Ask**\n\n**Effect:** Tier for matching domain/action-class is updated directly.\n\n---\n\n## Domain detection\n\nThe plugin extracts domains from context in your message:\n\n| Text contains | Domain |\n|---------------|--------|\n| `github`, `PR`, `push` | `github` |\n| `Salesforce` | `salesforce` |\n| `PostHog` | `posthog` |\n| `Slack` | `slack` |\n| `slides`, `deck` | `slides` |\n| `OKR` | `okr-system` |\n| `Linear` | `linear` |\n| (nothing matched) | `general` |\n\nDomain detection is keyword-based, not semantic. Be explicit when giving feedback: \"don't update Salesforce records\" works better than \"don't do that\" (which routes to `general`).\n\n---\n\n## Reading the feedback log\n\n```bash\ncat ~/.openclaw/sapience/feedback.md\n```\n\nEach entry shows:\n- Signal type (correction / confirmation / tier_adjustment)\n- Domain and action class affected\n- The original message\n- Tier adjustment, if any\n- Meta-pointer written to memory, for corrections\n\n---\n\n## Meta-memory pointers\n\nFor corrections, the plugin writes a memory pointer:\n\n> \"Before working on github / github/action: check feedback log — correction recorded: 'don't push to main without a PR'\"\n\nThis means future sessions will be reminded to check the feedback log before acting in that domain, even if the calibration confidence hasn't yet dropped below the threshold.\n\nRequires `memoryEnabled: true` (default) and OpenClaw's built-in memory API.\n\n---\n\n## Troubleshooting\n\n**Feedback not being detected**\nThe plugin only scans messages you send (role: `user`), not the agent's responses. Make sure you're sending the correction as a chat message, not just thinking it.\n\n**Calibration not updating**\nCheck that `calibration.json` exists and has an entry for the domain you're correcting. Feedback only updates *existing* entries — it doesn't create new ones. New domains are created by `openclaw-sapience` when it first routes a proposal in that domain.\n\n**Domain matching to \"general\" when it shouldn't**\nAdd more specific keywords to your feedback message. \"Don't do that\" → \"Don't update the Salesforce contact without asking.\"\n\n**Too many false positives in the feedback log**\nThe pattern matching is intentionally broad. If casual phrases are being captured incorrectly, check the log and note which patterns are misfiring. You can't currently tune the patterns without modifying `src/feedback-parser.ts`.\n","readmeFilename":"README.md"}