{"_id":"@cernion/openclaw-energy-tools-sidecar","_rev":"4-7541328179366a073e9c3f436cea6832","name":"@cernion/openclaw-energy-tools-sidecar","dist-tags":{"latest":"0.1.3"},"versions":{"0.1.0":{"name":"@cernion/openclaw-energy-tools-sidecar","version":"0.1.0","license":"Apache-2.0","_id":"@cernion/openclaw-energy-tools-sidecar@0.1.0","maintainers":[{"name":"zoernert","email":"me@thorsten-zoerner.com"}],"homepage":"https://github.com/SmartEnergySolutions/cernion-openclaw-sidecar#readme","bugs":{"url":"https://github.com/SmartEnergySolutions/cernion-openclaw-sidecar/issues"},"dist":{"shasum":"420e51d67c048bb64263443c75469082054209c8","tarball":"https://registry.npmjs.org/@cernion/openclaw-energy-tools-sidecar/-/openclaw-energy-tools-sidecar-0.1.0.tgz","fileCount":19,"integrity":"sha512-rQb9niKFrh3T2ExKulhvZ7NBrZbNhNFQAb1jIl7byMHF576M+zc+pszvVQ9z8PTSUlG3tQHOCIJSGCsg7r8+Qg==","signatures":[{"sig":"MEUCIHo3WgDdl7W6awNJGKSwNpvxqyDyoPJDUIJmE7sEHxZUAiEA84j/1BlZKxfHqHvj4gy3reak2CuhYi4Qrn3W7CsfW4A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cernion%2fopenclaw-energy-tools-sidecar@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":129544},"type":"module","gitHead":"a33c20499bc8021d73d52571a623ffabebaa8a7f","scripts":{"test":"vitest run","build":"tsc -p tsconfig.json","plugin:build":"npm run build && env -u OPENCLAW_STATE_DIR -u OPENCLAW_SERVICE_KIND -u OPENCLAW_GATEWAY_PORT -u OPENCLAW_SERVICE_VERSION openclaw --profile cernion-sidecar-build plugins build --entry ./dist/index.js","plugin:validate":"npm run build && env -u OPENCLAW_STATE_DIR -u OPENCLAW_SERVICE_KIND -u OPENCLAW_GATEWAY_PORT -u OPENCLAW_SERVICE_VERSION openclaw --profile cernion-sidecar-build plugins validate --entry ./dist/index.js","test:integration":"npm run build && node scripts/sidecar-smoke.mjs"},"_npmUser":{"name":"zoernert","email":"me@thorsten-zoerner.com"},"openclaw":{"extensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/SmartEnergySolutions/cernion-openclaw-sidecar.git","type":"git"},"_npmVersion":"11.13.0","description":"Dedicated OpenClaw sidecar for Cernion Energy Tools.","directories":{},"_nodeVersion":"24.17.0","dependencies":{"typebox":"^1.1.38"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.0","openclaw":"latest","typescript":"^5.9.0","@types/node":"^24.0.0"},"peerDependencies":{"openclaw":">=2026.6.11-beta.1"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-energy-tools-sidecar_0.1.0_1782375571731_0.4574133202528734","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@cernion/openclaw-energy-tools-sidecar","version":"0.1.1","license":"Apache-2.0","_id":"@cernion/openclaw-energy-tools-sidecar@0.1.1","maintainers":[{"name":"zoernert","email":"me@thorsten-zoerner.com"}],"homepage":"https://github.com/SmartEnergySolutions/cernion-openclaw-sidecar#readme","bugs":{"url":"https://github.com/SmartEnergySolutions/cernion-openclaw-sidecar/issues"},"dist":{"shasum":"cbbe53304f5fee514d121faf607a5f8bbde21b10","tarball":"https://registry.npmjs.org/@cernion/openclaw-energy-tools-sidecar/-/openclaw-energy-tools-sidecar-0.1.1.tgz","fileCount":19,"integrity":"sha512-XivhaTt3BNcRIp26aut7nBwiN3Q+XZxu15drI3LSiO17Z9PD6M3mHr3m1aQwtRYiJZS30Ph7eJnzNOeM/RhyAg==","signatures":[{"sig":"MEUCIFA082o1VMf67fTPLkf/VKIQFYGcrnGpaZK/SCXKWsPkAiEAszTG3a1VBzshmT0BI14iofkWmPYhWx/nZ8z4lSn503w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cernion%2fopenclaw-energy-tools-sidecar@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":129942},"type":"module","gitHead":"bb68950acef3a89505e934c44c852064a85acfb8","scripts":{"test":"vitest run","build":"tsc -p tsconfig.json","plugin:build":"npm run build && env -u OPENCLAW_STATE_DIR -u OPENCLAW_SERVICE_KIND -u OPENCLAW_GATEWAY_PORT -u OPENCLAW_SERVICE_VERSION openclaw --profile cernion-sidecar-build plugins build --entry ./dist/index.js","plugin:validate":"npm run build && env -u OPENCLAW_STATE_DIR -u OPENCLAW_SERVICE_KIND -u OPENCLAW_GATEWAY_PORT -u OPENCLAW_SERVICE_VERSION openclaw --profile cernion-sidecar-build plugins validate --entry ./dist/index.js","test:integration":"npm run build && node scripts/sidecar-smoke.mjs"},"_npmUser":{"name":"zoernert","email":"me@thorsten-zoerner.com"},"openclaw":{"build":{"openclawVersion":"2026.6.11-beta.1"},"compat":{"pluginApi":">=2026.6.11-beta.1"},"extensions":["./dist/index.js"],"runtimeExtensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/SmartEnergySolutions/cernion-openclaw-sidecar.git","type":"git"},"_npmVersion":"11.13.0","description":"Dedicated OpenClaw sidecar for Cernion Energy Tools.","directories":{},"_nodeVersion":"24.17.0","dependencies":{"typebox":"^1.1.38"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.0","openclaw":"latest","typescript":"^5.9.0","@types/node":"^24.0.0"},"peerDependencies":{"openclaw":">=2026.6.11-beta.1"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-energy-tools-sidecar_0.1.1_1782376845303_0.28125638505755957","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@cernion/openclaw-energy-tools-sidecar","version":"0.1.2","keywords":["openclaw","cernion","energy","energy-tools","grid-planning","netzplanung","zielnetzplanung","znp","redispatch","mastr","ma-st-r","enwg","14a","14d","photovoltaic","pv","bess","grid-context","knowledge-rag","evidence","sidecar"],"license":"Apache-2.0","_id":"@cernion/openclaw-energy-tools-sidecar@0.1.2","maintainers":[{"name":"zoernert","email":"me@thorsten-zoerner.com"}],"homepage":"https://github.com/SmartEnergySolutions/cernion-openclaw-sidecar#readme","bugs":{"url":"https://github.com/SmartEnergySolutions/cernion-openclaw-sidecar/issues"},"dist":{"shasum":"b881d4d2a9acb5830268dade9ce456be564f181b","tarball":"https://registry.npmjs.org/@cernion/openclaw-energy-tools-sidecar/-/openclaw-energy-tools-sidecar-0.1.2.tgz","fileCount":20,"integrity":"sha512-OJZ/JVD24hx2k7iH89ZyvytqG3StBO2LCbgFqroONecO5si4uMqArKQxy9EysT+ZAzV07fN/laSIvsWLS+aoFw==","signatures":[{"sig":"MEUCIQCmTft/OhsWAyuwfZ74qJ7fZSbMkGUKHnOngV/t+8byrAIgOUrfUxzOHnHeYSV2xxOdGlWFHc6zCJSWjzXaiIALH84=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cernion%2fopenclaw-energy-tools-sidecar@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":138666},"type":"module","gitHead":"06a19fd0b2937697d683bd8d66d5622bd1a40d9e","scripts":{"test":"vitest run","build":"tsc -p tsconfig.json","plugin:build":"npm run build && env -u OPENCLAW_STATE_DIR -u OPENCLAW_SERVICE_KIND -u OPENCLAW_GATEWAY_PORT -u OPENCLAW_SERVICE_VERSION openclaw --profile cernion-sidecar-build plugins build --entry ./dist/index.js","plugin:validate":"npm run build && env -u OPENCLAW_STATE_DIR -u OPENCLAW_SERVICE_KIND -u OPENCLAW_GATEWAY_PORT -u OPENCLAW_SERVICE_VERSION openclaw --profile cernion-sidecar-build plugins validate --entry ./dist/index.js","test:integration":"npm run build && node scripts/sidecar-smoke.mjs"},"_npmUser":{"name":"zoernert","email":"me@thorsten-zoerner.com"},"openclaw":{"build":{"openclawVersion":"2026.6.11-beta.1"},"compat":{"pluginApi":">=2026.6.11-beta.1"},"extensions":["./dist/index.js"],"runtimeExtensions":["./dist/index.js"]},"repository":{"url":"git+https://github.com/SmartEnergySolutions/cernion-openclaw-sidecar.git","type":"git"},"_npmVersion":"11.13.0","description":"Cernion energy evidence tools for OpenClaw agents: MaStR assets, grid context, Redispatch, ZNP, §14a/§14d, Knowledge RAG, and read-only operational APIs.","directories":{},"_nodeVersion":"24.17.0","dependencies":{"typebox":"^1.1.38"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.0","openclaw":"latest","typescript":"^5.9.0","@types/node":"^24.0.0"},"peerDependencies":{"openclaw":">=2026.6.11-beta.1"},"_npmOperationalInternal":{"tmp":"tmp/openclaw-energy-tools-sidecar_0.1.2_1782818127251_0.06447453255118729","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@cernion/openclaw-energy-tools-sidecar","version":"0.1.3","description":"Cernion energy evidence tools for OpenClaw agents: MaStR assets, grid context, Redispatch, ZNP, §14a/§14d, Knowledge RAG, and read-only operational APIs.","keywords":["openclaw","cernion","energy","energy-tools","grid-planning","netzplanung","zielnetzplanung","znp","redispatch","mastr","ma-st-r","enwg","14a","14d","photovoltaic","pv","bess","grid-context","knowledge-rag","evidence","sidecar"],"type":"module","license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/SmartEnergySolutions/cernion-openclaw-sidecar.git"},"bugs":{"url":"https://github.com/SmartEnergySolutions/cernion-openclaw-sidecar/issues"},"homepage":"https://github.com/SmartEnergySolutions/cernion-openclaw-sidecar#readme","scripts":{"build":"tsc -p tsconfig.json","plugin:build":"npm run build && env -u OPENCLAW_STATE_DIR -u OPENCLAW_SERVICE_KIND -u OPENCLAW_GATEWAY_PORT -u OPENCLAW_SERVICE_VERSION openclaw --profile cernion-sidecar-build plugins build --entry ./dist/index.js","plugin:validate":"npm run build && env -u OPENCLAW_STATE_DIR -u OPENCLAW_SERVICE_KIND -u OPENCLAW_GATEWAY_PORT -u OPENCLAW_SERVICE_VERSION openclaw --profile cernion-sidecar-build plugins validate --entry ./dist/index.js","test":"vitest run","test:integration":"npm run build && node scripts/sidecar-smoke.mjs"},"peerDependencies":{"openclaw":">=2026.6.11-beta.1"},"dependencies":{"typebox":"^1.1.38"},"devDependencies":{"@types/node":"^24.0.0","openclaw":"latest","typescript":"^5.9.0","vitest":"^3.2.0"},"openclaw":{"extensions":["./dist/index.js"],"runtimeExtensions":["./dist/index.js"],"compat":{"pluginApi":">=2026.6.11-beta.1"},"build":{"openclawVersion":"2026.6.11-beta.1"}},"publishConfig":{"access":"public"},"gitHead":"5d1ced1be18d50fefece3cc26043112c6d0d2b09","_id":"@cernion/openclaw-energy-tools-sidecar@0.1.3","_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-/nX7VBqs5VtUiFHvt3J15GXGW9sx7TdDCajXp+mYKpfTnyr95gjAwJhtu1F8I28wrlVFLYPUKxUqL4pojGgQPQ==","shasum":"e6ca268b38f0d7bfab0eacd110fee11f363591ba","tarball":"https://registry.npmjs.org/@cernion/openclaw-energy-tools-sidecar/-/openclaw-energy-tools-sidecar-0.1.3.tgz","fileCount":20,"unpackedSize":148901,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cernion%2fopenclaw-energy-tools-sidecar@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC6p106Fijvho6XT4ILD0KmmTgKFNaSLd805TFCJ+ksQQIhAJTEESa2RKN29rRHerFLrs8pYrGjzdhYq4IP/2DhqQsQ"}]},"_npmUser":{"name":"zoernert","email":"me@thorsten-zoerner.com"},"directories":{},"maintainers":[{"name":"zoernert","email":"me@thorsten-zoerner.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/openclaw-energy-tools-sidecar_0.1.3_1783642359340_0.843986659322949"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-25T08:19:31.563Z","modified":"2026-07-10T00:12:39.768Z","0.1.0":"2026-06-25T08:19:31.869Z","0.1.1":"2026-06-25T08:40:45.438Z","0.1.2":"2026-06-30T11:15:27.405Z","0.1.3":"2026-07-10T00:12:39.522Z"},"bugs":{"url":"https://github.com/SmartEnergySolutions/cernion-openclaw-sidecar/issues"},"license":"Apache-2.0","homepage":"https://github.com/SmartEnergySolutions/cernion-openclaw-sidecar#readme","keywords":["openclaw","cernion","energy","energy-tools","grid-planning","netzplanung","zielnetzplanung","znp","redispatch","mastr","ma-st-r","enwg","14a","14d","photovoltaic","pv","bess","grid-context","knowledge-rag","evidence","sidecar"],"repository":{"type":"git","url":"git+https://github.com/SmartEnergySolutions/cernion-openclaw-sidecar.git"},"description":"Cernion energy evidence tools for OpenClaw agents: MaStR assets, grid context, Redispatch, ZNP, §14a/§14d, Knowledge RAG, and read-only operational APIs.","maintainers":[{"name":"zoernert","email":"me@thorsten-zoerner.com"}],"readme":"# Cernion Energy Tools Sidecar for OpenClaw\n\nCernion-backed energy evidence tools for OpenClaw agents: MaStR assets, grid\ncontext, Redispatch, Zielnetzplanung (ZNP), §14a/§14d EnWG, regulatory\nKnowledge RAG, process intake, and read-only operational APIs.\n\nMost users will not search for a \"Cernion Sidecar\" directly. They usually have\nan energy-domain question and need an agent that can work with evidence instead\nof generic model memory. This plugin is the bridge: OpenClaw provides the agent\nruntime, conversation, tool orchestration, and final answer synthesis; Cernion\nEnergy Tools provides the fachliche energy layer, policies, evidence semantics,\nand read-only execution plans.\n\nUse it when an OpenClaw assistant should answer questions such as:\n\n- \"Welche PV-Anlagen, Speicher oder Lasten gibt es in dieser Gemeinde?\"\n- \"Welche Redispatch-, §14a-, §14d- oder ZNP-Pruefschritte sind relevant?\"\n- \"Welche Netzbereiche wirken fuer PV, BESS, HPC-Laden oder Waermepumpen kritisch?\"\n- \"Welche MaStR-, OSM-, Marktpartner-, Last-, CO2- oder Betriebsdaten stuetzen diese Aussage?\"\n- \"Welche Cernion-Faehigkeit oder API sollte fuer diese Energiefrage genutzt werden?\"\n- \"Kann ein Prozess vorbereitet werden, ohne ihn schon auszufuehren?\"\n\n## Who This Is For\n\n- Stadtwerke, Verteilnetzbetreiber, Energieberater, Asset-MDM-Teams, grid\n  planning teams, Redispatch teams, market-communication teams, and software\n  teams building energy-domain assistants.\n- OpenClaw users who want a local/private assistant to use Cernion data and\n  policies without copying tokens, business logic, or raw operational context\n  into prompts.\n- Cernion users who want a conversational agent surface without moving Cernion's\n  capability routing, policy gates, or source-of-truth semantics into OpenClaw.\n\n## How OpenClaw And Cernion Work Together\n\n| Layer | Responsibility |\n| --- | --- |\n| OpenClaw | Agent runtime, user conversation, memory/workspace instructions, model choice, tool orchestration, answer synthesis, and human-readable explanation. |\n| This Sidecar | Host-side plugin configuration, secret loading, Cernion tool discovery, request validation, token scrubbing, read-only REST plan proxying, and boundary enforcement. |\n| Cernion Energy Tools | Energy-domain capabilities, MaStR and grid evidence, Knowledge RAG, Evidence Router, process-intake policy, capability manifests, and read-only operational APIs. |\n\nThis split is the product value: OpenClaw can become an energy assistant without\nlearning Cernion internals, while Cernion remains the authority for policies,\nevidence semantics, and which operations are safe.\n\n## Example Prompts\n\n```text\nMich wuerde interessieren, ob die Gemeinde Meckesheim bereits so viel Erzeugungskapazitaet hat, dass sie sich unter idealen Bedingungen selbst versorgen koennte. Wenn nicht, wie viel Solar muesste zugebaut werden?\n```\n\n```text\nWelche Pflichten ergeben sich aus §14a EnWG fuer einen Verteilnetzbetreiber, und welche Cernion-Evidenz sollte ich fuer einen konkreten Fall pruefen?\n```\n\n```text\nIch plane 20 MWp PV, 10 MW / 20 MWh Speicher, 30 HPC-Ladepunkte, 800 Waermepumpen und 1.500 Wallboxen in Sinsheim. Welche Spannungsebenen und Netzbereiche koennten kritisch werden, und welche Evidenz fehlt?\n```\n\n```text\nWelche Cernion-Capability passt zu einer Redispatch-Asset-Register-Pruefung, und kann OpenClaw den passenden read-only REST-Plan ausfuehren?\n```\n\n## Capabilities At A Glance\n\n- Regulatory and procedural knowledge: EnWG, §14a/§14d, BNetzA guidance,\n  internal procedures, roles, obligations, and job-help context through Cernion\n  Knowledge RAG.\n- Asset and market evidence: MaStR-backed PV, storage, load, market-partner,\n  and operational evidence through read-only Cernion APIs.\n- Grid context: OSM-visible substations, transformers, lines, voltage-level\n  hints, and topology metrics for ZNP, Netzanschluss, PV/BESS/HPC siting, fNAV,\n  and planning hypotheses.\n- Evidence routing: Cernion recommends the safe read-only endpoint and result\n  semantics; OpenClaw executes through this Sidecar and synthesizes the answer.\n- Capability resolution: OpenClaw can resolve Cernion capability and operation\n  manifests instead of hard-coding domain routing.\n- Process intake: OpenClaw can prepare a pending process receipt through a\n  separate token boundary without executing or resolving the process.\n\n## Install From ClawHub\n\n```bash\nopenclaw plugins install clawhub:@cernion/openclaw-energy-tools-sidecar\n```\n\nThen configure the Cernion base URL and a read-only token:\n\n```bash\nexport CERNION_BASE_URL=\"https://cernion.example\"\nexport CERNION_READONLY_TOKEN_FILE=\"$HOME/.config/cernion/readonly-token\"\n```\n\nSee [docker/README.md](docker/README.md) for a browser-based demo container\nthat starts OpenClaw with this plugin preinstalled.\n\n## Cernion Sidecar Contract\n\nThe plugin consumes the Cernion Sidecar contract implemented by Cernion Energy Tools:\n\n- `GET /api/agent-sidecar/descriptor`\n- `GET /api/agent-sidecar/mcp/tools`\n- `POST /api/agent-sidecar/mcp/tools/:name/call`\n- `POST /api/agent-sidecar/mcp/tools/cernion.ask/call`\n- `POST /api/knowledge-rag/query`\n- `POST /api/evidence-router/route`\n- `POST /api/copilot-process/intents`\n- `GET /api/_agent/capabilities[?domain=]`\n- `GET /api/_agent/capabilities/:name`\n- `GET /api/_agent/operations[?domain=]`\n\nThe Cernion provider remains the policy owner. This plugin stores host-side configuration, discovers tools, and forwards calls through separated provider boundaries:\n\n- read-only evidence lookup/execution, using the read-only Cernion token\n- read-only regulatory and procedural knowledge lookup through Cernion Knowledge RAG\n- process intake, using a separate process token and creating only `pending_confirmation` receipts\n\nIt does not implement Cernion domain logic and must not expose admin/token/HITL-resolve actions. Cernion Energy Tools remains the source of truth for capabilities, policies, evidence semantics, and executable read-only REST plans.\n\n`cernion.ask` is the generic learning/compile boundary for OpenClaw. It may return a direct read-only REST execution plan that was selected by Cernion's Blueprint/Capability runtime. OpenClaw can then ask this plugin to proxy that plan against the configured Cernion `baseUrl` without learning tokens or hard-coding domain routing in the Sidecar.\n\nWhen curated capabilities or `cernion.ask` do not resolve a rarely used endpoint, the Sidecar also provides a generic OpenAPI fallback. It loads Cernion's operation manifest, ranks operations locally against the user request, and may execute the best Sidecar-safe `GET` endpoint with supplied parameters. This is intentionally narrower than the full Cernion policy runtime: `POST` or otherwise blocked operations are returned as non-executable candidates and still require a curated Cernion Evidence Router policy plan before execution.\n\n## Tools\n\n- `cernion_sidecar_descriptor` loads the Cernion Energy Tools Sidecar descriptor.\n- `cernion_sidecar_tools` loads the MCP/OpenClaw-like tool list.\n- `cernion_sidecar_call` calls one curated Cernion provider tool through the provider policy gate.\n- `cernion_query_domain_knowledge` queries Cernion Knowledge RAG for regulatory, procedural, and fachliche evidence such as laws, BNetzA guidance, Verfahrensanweisungen, roles, obligations, definitions, and job-help context. It starts the async Knowledge RAG job, waits briefly for the result, and returns an `evidenceAssessment`. This assessment describes primary-source support for hard legal/procedural claims, not the value of Cernion domain knowledge itself. If `evidenceAdequacy` is `low`, OpenClaw should say that Cernion returned useful domain/strategy knowledge but not enough primary-source support for hard obligations.\n- `cernion_query_grid_context` queries Cernion OSM Geo for visible grid infrastructure context such as substations, transformers, voltage-level hints, lines, and topology metrics. Use it for ZNP, Netzanschluss, data-center/PV/BESS/HPC siting, fNAV, and likely critical voltage-level hypotheses. For broad county or region searches, query substations first and enable full topology only for candidate-place drill-down. Treat the result as OSM-based hypothesis evidence, not as a capacity proof or complete grid-operator asset model. For data centers and other large loads, explicit grid-connection availability maps, published capacity, and operator-confirmed Anschlusskapazität outrank generic grid-expansion or OSM proximity evidence.\n- `cernion_route_evidence` calls Cernion's backend Evidence Router and returns read-only endpoint recommendations plus result semantics.\n- `cernion_execute_evidence_endpoint` executes one GET or POST read-only endpoint recommended by `cernion_route_evidence`, requiring `policy.readOnly=true` and `sideEffects=none`. For `/api/assets...` GETs, the Sidecar sets an explicit default `limit=500` when no limit is supplied and adds `_sidecar` pagination/export guidance when the returned rows exhaust the requested limit.\n- `cernion_prepare_process_intent` calls Cernion's separate Process Intake boundary and creates only a `pending_confirmation` receipt. It uses a separate process token.\n- `cernion_ask` calls the generic `cernion.ask` provider tool and returns structured answers, evidence, capability/blueprint hints, and optional read-only REST execution plans.\n- `cernion_resolve_capabilities` resolves llm.txt capability cluster heads to full capability details, optionally filtered by `domain`.\n- `cernion_resolve_capability` resolves a single capability id to full detail.\n- `cernion_resolve_operations` resolves manifest operation clusters to deduplicated operation details, optionally filtered by `domain`.\n- `cernion_execute_rest_plan` proxies one GET-only REST execution plan emitted by Cernion. It validates that the plan is a relative `/api/` path and blocks admin/auth/token/HITL-resolve/provider-tool recursion paths. Asset-list GETs receive explicit limit and pagination/export guidance.\n- `cernion_openapi_fallback` searches the Cernion OpenAPI operation manifest as a generic read-only fallback. It scores natural-language requests against operation paths, ids, summaries, tags, and aliases; returns ranked candidates; and can optionally execute the top safe `GET` operation with supplied params. Use it after curated capabilities, Evidence Router, or `cernion.ask` fail to return a deterministic plan.\n- `cernion_api_request` performs an authenticated read-only GET against Cernion for fallback resolution or domain data queries. Asset-list GETs receive explicit limit and pagination/export guidance.\n\n`cernion_resolve_operations` uses the provider's canonicalized operation list: duplicate `operationId` entries that appear under trailing-slash or service-prefix aliases are returned once with a canonical path and an `aliases` list.\n\nThe provider tool names currently exposed by Cernion are:\n\n- `cernion.ask`\n- `cernion.answer_dossier`\n- `cernion.recommend_capability`\n- `cernion.list_readonly_capabilities`\n- `cernion.get_evidence_status`\n\n## Configuration\n\nConfigure through OpenClaw plugin settings or environment variables:\n\n- `baseUrl` or `CERNION_BASE_URL`: Cernion base URL, for example `https://cernion.example`.\n- `bearerToken` or `CERNION_READONLY_TOKEN`: read-only Cernion Sidecar token.\n- `bearerTokenEnv`: optional alternate token environment variable name.\n- `bearerTokenFile` or `CERNION_READONLY_TOKEN_FILE`: optional path to a local file containing the read-only token.\n- `processBearerToken` or `CERNION_PROCESS_TOKEN`: separate Cernion token for `cernion_prepare_process_intent`.\n- `processBearerTokenEnv`: optional alternate process-token environment variable name.\n- `processBearerTokenFile` or `CERNION_PROCESS_TOKEN_FILE`: optional path to a local file containing the process token.\n- `allowRestProxy` or `CERNION_ALLOW_REST_PROXY`: optional switch for `cernion_execute_rest_plan`, default enabled. Set to `false`, `0`, `no`, or `off` to disable.\n- `timeoutMs`: optional HTTP timeout, default `15000`.\n\nStore the token as an OpenClaw secret. The token is sent only as an `Authorization: Bearer ...` header and is scrubbed from returned payloads if a provider accidentally echoes it.\n\n## Asset Lists, Pagination, and Exports\n\nCernion asset endpoints can return large MaStR-backed lists. The Sidecar does\nnot let those lists silently fall back to the provider default limit:\n\n- for `/api/assets...` GET requests without `limit`, it sends `limit=500`;\n- when returned rows exhaust the requested limit, it adds `_sidecar.assetListPagination`;\n- the metadata includes `nextPage` parameters and CSV/XLS `exportOptions`;\n- assistants must not present the returned rows as complete when\n  `_sidecar.assetListPagination.limitExhausted=true` or `hasMore=true`.\n\nExample guidance for a user-facing answer:\n\n```text\nCernion returned 500 rows for the current asset query, which exhausts the requested limit. I can continue with the next page or retrieve the complete list as CSV/XLS.\n```\n\n## Local Development\n\n```bash\nnpm install\nnpm run plugin:build\nnpm run plugin:validate\nnpm test\n```\n\n## Docker Demo Container\n\nThe repository includes a Docker-based OpenClaw demo under `docker/`. It starts\nOpenClaw with this plugin installed and exposes the browser Control UI on\n`http://localhost:19101`.\n\n```bash\ncp docker/.env.example docker/.env\n# edit docker/.env: CERNION_BASE_URL, CERNION_TOKEN, OPENCLAW_MODEL, OPENCLAW_THINKING, and a model-provider key\ndocker compose --env-file docker/.env -f docker/compose.yml up --build\n```\n\nThe demo accepts `CERNION_BASE_URL`, `CERNION_TOKEN`,\n`CERNION_READONLY_TOKEN`, and `CERNION_PROCESS_TOKEN` through environment\nvariables. No operator workspace, memory, transcripts, or personal OpenClaw\nstate are mounted.\n\nSee [docker/README.md](docker/README.md) for the full end-user walkthrough,\nincluding the Cernion demo workspace profile and the Meckesheim self-supply\nexample prompt.\n\n## Local Install\n\nFrom this directory:\n\n```bash\nopenclaw plugins install .\n```\n\nOr from GitHub:\n\n```bash\nopenclaw plugins install https://github.com/SmartEnergySolutions/cernion-openclaw-sidecar\n```\n\nOr from npm after publication:\n\n```bash\nopenclaw plugins install @cernion/openclaw-energy-tools-sidecar\n```\n\nThen configure:\n\n```bash\nexport CERNION_BASE_URL=\"https://cernion.example\"\nexport CERNION_READONLY_TOKEN_FILE=\"$HOME/.config/cernion/readonly-token\"\n```\n\nThe token file should contain only the bearer token and should be readable only by the OpenClaw runtime user, for example mode `0600`.\n\n## Boundaries\n\nAllowed:\n\n- read-only/advisory tool discovery\n- calls to curated Cernion Sidecar tools\n- read-only Knowledge RAG queries for regulatory and procedural domain evidence\n- read-only OSM Geo grid-context queries for ZNP and Netzanschluss hypotheses\n- read-only Evidence Router calls and execution of router-recommended GET/POST evidence endpoints\n- Process Intake creation of `pending_confirmation` receipts through a separate process-token boundary\n- resolve calls to the Cernion agent manifest endpoints\n- generic `cernion.ask` calls where Cernion decides capabilities, blueprints, routing, policies, and evidence\n- GET-only proxy execution of Cernion-issued REST plans against the configured provider `baseUrl`\n- structured propagation of `sidecar_policy_blocked`\n\nBlocked:\n\n- Full Cernion OpenAPI export\n- admin/token/HITL-resolve actions\n- process execution or HITL resolution after Process Intake\n- Sidecar-owned domain routing such as hard-coded MaStR asset tools\n- arbitrary external URLs or non-`/api/` REST proxy paths\n- production mutation\n- secrets in descriptors, logs, or tool responses\n- OpenClaw workspace coupling inside Cernion\n\n## Publishing\n\nThe package name is `@cernion/openclaw-energy-tools-sidecar`. Publishing under\nthat scope requires:\n\n- access to the `@cernion` npm organization or user scope;\n- an npm automation token stored as `NPM_TOKEN` for GitHub Actions;\n- 2FA/provenance settings compatible with the selected npm release policy;\n- a release tag such as `v0.1.0`.\n\nRelease checks should pass before publishing:\n\n```bash\nnpm ci\nnpm run build\nnpm test\nnpm run plugin:validate\nnpm pack --dry-run\n```\n","readmeFilename":"README.md"}