Code Pluginsource linked

ebb-ai — carbon-aware deferralv0.1.13

OpenClaw plugin: auto-defer "do it later" / "by tomorrow" / "overnight" tasks to the cleanest electricity-grid hour inside a deadline. Native OpenClaw tools for carbon-aware AI workflow scheduling. Shares ~/.ebb-ai/queue.db with the ebb-ai MCP server and CLI.

@vitalini/ebb·runtime ebb·by @vitalini
Community code plugin. Review compatibility and verification before install.
openclaw plugins install clawhub:@vitalini/ebb
Latest release: v0.1.13Download zip

Capabilities

configSchema
Yes
Executes code
Yes
HTTP routes
0
Runtime ID
ebb

Compatibility

Built With Open Claw Version
2026.3.24-beta.2
Min Gateway Version
2026.3.24-beta.2
Plugin Api Range
>=2026.3.24-beta.2
Plugin Sdk Version
2026.3.24-beta.2
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Suspicious
high confidence
!
Purpose & Capability
The core scheduling, grid-forecast, queue, and provider-dispatch behavior fits the stated purpose, but arbitrary webhook delivery and unrestricted file output materially expand the impact of deferred task execution.
!
Instruction Scope
The README and tool description use broad natural-language triggers such as deferral phrases, 'no rush,' and 'not urgent' for schedule_task, creating a real risk of unintended state-changing scheduling.
Install Mechanism
The package is a normal npm-pack OpenClaw plugin with a declared manifest, source-linked metadata, no install script, and a clean VirusTotal result.
Credentials
Use of grid APIs, OpenAI/Anthropic or the OpenClaw runtime LLM bridge, Telegram, SQLite, and env API keys is mostly coherent with the feature set, but users should understand that prompts and outputs can leave the local environment.
!
Persistence & Privilege
The plugin starts on gateway startup, maintains a persistent SQLite queue under ~/.ebb-ai by default, runs a recurring dispatcher, stores task bodies/results, and can write report files to user-supplied paths without a sandboxed output directory.
Scan Findings in Context
[SDI-2] unexpected: The delivery channels are disclosed, but arbitrary webhook POSTs and arbitrary file writes are broader than necessary for carbon-aware scheduling and are not tightly constrained.
[SQP-1] unexpected: Automatic invocation on broad conversational timing phrases is a material concern because schedule_task changes state and can trigger later background execution.
[SQP-2] unexpected: The scanner's concerns about missing privacy and safety controls are supported by the artifact: prompts/results can be sent to LLM providers, arbitrary webhooks, Telegram, or filesystem paths without strong in-code allowlists or redaction gates.
[E1] expected: External transmission to OpenAI/Anthropic, Telegram, and grid-data APIs is real and mostly feature-related, but it remains sensitive because deferred prompts and results may contain private data.
[suspicious.env_credential_access] expected: Environment API keys for electricity-map/grid providers are expected for live grid forecasts and are not by themselves malicious.
What to consider before installing
Install only if you are comfortable with a startup-activated scheduler that stores queued prompts/results locally and can run them later through OpenAI, Anthropic, or the OpenClaw runtime. Avoid using webhook or file delivery unless you fully trust the destination/path, and prefer explicit scheduling language plus chat or queue-only delivery for sensitive tasks.
dist/index.js:4298
Environment variable access combined with network send.
Patterns worth reviewing
These patterns may indicate risky behavior. Check the VirusTotal and OpenClaw results above for context-aware analysis before installing.

Verification

Tier
source linked
Scope
artifact only
Summary
Validated package structure and linked the release to source metadata.
Commit
4cd3f0122658
Tag
main
Provenance
No
Scan status
suspicious

Tags

latest
0.1.13

@vitalini/ebb

OpenClaw plugin that exposes ebb-ai as native OpenClaw tools. Published on ClawHub as @vitalini/ebb; its runtime id in the gateway is ebb.

When a user says "do this later", "by tomorrow", "tonight", "overnight", "by EOD", "remind me to", or any other deferral phrase, this plugin's schedule_task tool gets invoked automatically — the LLM dispatch is routed to the cleanest electricity-grid hour inside the deadline, 40-70 % lower carbon vs running immediately.

Tools registered

Tool names match the @ebb-ai/mcp MCP-server surface (no ebb_ prefix).

ToolPurpose
schedule_taskQueue a task at the cleanest hour. The deferral trigger.
recommend_windowPreview the cleanest hour without queueing. Read-only.
check_queue_statusList all tasks / detail one (with carbon receipt). Read-only.
cancel_taskCancel a queued task. Idempotent.
get_grid_forecastHourly grid carbon-intensity forecast. Read-only.
update_deadlineMove a queued/scheduled task's deadline.
cancel_allCancel every queued/scheduled task at once.
set_deliveryChoose how a task's result is delivered when it completes.
expedite_taskDispatch a queued/scheduled task now, skipping the window.
retry_taskRe-dispatch a failed task.

Result delivery

When a deferred task completes, its result is delivered through the mode(s) chosen per task — chat (the active OpenClaw chat), telegram, webhook (POST to any URL), file (a report in md/html/txt/json), or queue (no push). The result is always kept in the queue too. Call set_delivery right after schedule_task, once you've asked the user how they want the result. Default: chat.

Install

openclaw plugins install clawhub:@vitalini/ebb

Restart the OpenClaw gateway. To update later: openclaw plugins update @vitalini/ebb.

Verify the install (smoke test)

After installing and restarting the gateway:

  1. Inspect — all ten tools should be listed:

    openclaw plugins inspect ebb --runtime --json
    

    The tools array contains schedule_task, recommend_window, check_queue_status, cancel_task, get_grid_forecast, update_deadline, cancel_all, set_delivery, expedite_task, retry_task. (Shape: non-capability in the plain inspect output is the normal label OpenClaw gives tool plugins — it is not an error.)

  2. Validate the installed package:

    openclaw plugins validate --root ~/.openclaw/extensions/ebb --entry ./dist/index.js
    
  3. Exercise the tools in any OpenClaw session:

    • "preview the cleanest window for a task due tomorrow 6pm in GB" → recommend_window
    • "do this overnight: summarise today's commits" → schedule_task
    • "what's in my ebb queue?" → check_queue_status

The queue is a SQLite ledger opened through Node's built-in node:sqlite (Node ≥ 22.5) — there is no native module to compile, so a fresh install needs no extra build step.

Building from source

pnpm --filter @vitalini/ebb build          # bundle to dist/index.js
openclaw plugins build    --root packages/openclaw-plugin --entry ./dist/index.js
openclaw plugins validate --root packages/openclaw-plugin --entry ./dist/index.js
pnpm --filter @vitalini/ebb test           # run the plugin test suite

Pack and install the tarball directly (no ClawHub round-trip):

cd packages/openclaw-plugin && npm pack
openclaw plugins install ./vitalini-ebb-<version>.tgz

Configuration

Optional config schema:

{
  "dbPath": "/home/you/.ebb-ai/queue.db",
  "defaultRegion": "GB"
}

dbPath defaults to ~/.ebb-ai/queue.db — the same path used by @ebb-ai/mcp (MCP server) and @ebb-ai/cli (CLI). All three share one ledger, so deferring a task in OpenClaw and listing it from ebb stats Just Works.

defaultRegion — the grid region used when a tool call doesn't name one. Leave it unset and ebb-ai auto-detects the region from the host machine's timezone: Europe/LondonGB, America/Los_AngelesUS-CAL-CISO, America/New_YorkUS-MIDA-PJM, Europe/ParisFR, Europe/BerlinDE. Timezones it can't map fall back to GB (always-live data via UK National Grid ESO, no API key). Set defaultRegion explicitly for any other region (US-TEX-ERCO, US-NE-ISNE, …). Each tool call may also pass its own region, which overrides everything; schedule_task reports a region_source (request / config / timezone / default) so you can see which rule applied. Non-GB regions may need EBB_*_API_KEY env vars for live data, otherwise a deterministic mock is used.

When does the plugin auto-invoke?

The schedule_task tool description tells the LLM to invoke when the user's phrasing signals deferral:

  • "do this later" / "by tomorrow" / "tonight" / "overnight"
  • "by EOD" / "this week" / "next week"
  • "when you have a moment" / "remind me to"
  • "queue this up" / "schedule this"
  • "no rush" / "not urgent"

For interactive tasks ("summarize this", "what does X do", "write a function") the plugin stays out of the way.

License

Apache-2.0 © Vitalii Borovyk · https://github.com/Vitalini/ebb-ai