Skip to content

logly/mureo

v0.9.4 Feature

This release adds 2 notable features for engineering teams evaluating rollout.

✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →

✓ No known CVEs patched in this version

Topics

advertising agentic-ai ai-agents claude-code cli codex
+11 more
cursor facebook-ads gemini-cli google-ads marketing marketing-automation mcp meta-ads model-context-protocol python search-console

ReleasePort's take

Light signal
editorial:auto 13d

v0.9.4 introduces pluggable persistence protocols (SecretStore, StateStore, KnowledgeStore, ThrottleStore) with a new `mureo learn add` CLI command. Default file-backed implementations available via mureo.core.

Why it matters: Custom storage backend implementations now possible via pluggable Protocols; default file-backed implementations stable. Evaluate custom backends for your infrastructure; test in dev if implementing.

Summary

AI summary

Added extensible core protocols (SecretStore, StateStore, etc.) with a new mureo learn add CLI command.

Changes in this release

Feature Medium

Introduces pluggable persistence protocols under `mureo.core` for SecretStore, StateStore, KnowledgeStore, and ThrottleStore.

Introduces pluggable persistence protocols under `mureo.core` for SecretStore, StateStore, KnowledgeStore, and ThrottleStore.

Source: granite4.1:8b-q6_K@2026-05-21

Confidence: high

Feature Medium

Adds `mureo learn add <text> [--scope {operator,workspace}]` CLI to persist /learn insights via RuntimeContext.knowledge_store.

Adds `mureo learn add <text> [--scope {operator,workspace}]` CLI to persist /learn insights via RuntimeContext.knowledge_store.

Source: granite4.1:8b-q6_K@2026-05-21

Confidence: low

Feature Medium

Provides `mureo.core.default_runtime_context()` factory wiring default file-backed implementations.

Provides `mureo.core.default_runtime_context()` factory wiring default file-backed implementations.

Source: granite4.1:8b-q6_K@2026-05-21

Confidence: low

Feature Medium

Introduces `mureo.core.get_runtime_context()` resolver for zero-arg entry-point `mureo.runtime_context_factory`.

Introduces `mureo.core.get_runtime_context()` resolver for zero-arg entry-point `mureo.runtime_context_factory`.

Source: granite4.1:8b-q6_K@2026-05-21

Confidence: low

Dependency Medium

`mureo.core.RuntimeContext` aggregates the four stores and a workspace_id as a frozen dataclass.

`mureo.core.RuntimeContext` aggregates the four stores and a workspace_id as a frozen dataclass.

Source: granite4.1:8b-q6_K@2026-05-21

Confidence: low

Refactor Medium

Routes consumers through new Protocols: auth credential loading, MCP handlers, rollback command, BYOD data directory resolution.

Routes consumers through new Protocols: auth credential loading, MCP handlers, rollback command, BYOD data directory resolution.

Source: granite4.1:8b-q6_K@2026-05-21

Confidence: high

Full changelog

Added — Extension Protocols and mureo learn CLI (#125)

A new public surface under mureo.core lets alternate backends and tests inject pluggable persistence without forking call sites. The shape mirrors the existing mureo.core.providers and mureo.core.skills extension patterns. Every default reproduces today's file-backed behaviour, so existing users see no change.

  • mureo.core.SecretStoreProtocol for credential round-trip (load / save / delete). Default FilesystemSecretStore reads and writes ~/.mureo/credentials.json byte-for-byte equivalent to the previous flow (atomic write, 0o600 via mureo.fsutil.secure_fchmod, ensure_ascii=False).
  • mureo.core.StateStoreProtocol for STATE.json / STRATEGY.md / action_log persistence. Default FilesystemStateStore composes the existing helpers in mureo.context.state / mureo.context.strategy.
  • mureo.core.KnowledgeStore — two-tier Protocol for /learn insights (operator + workspace). Default FilesystemKnowledgeStore writes to today's ~/.claude/skills/_mureo-pro-diagnosis/SKILL.md location with the same frontmatter scaffold.
  • mureo.core.ThrottleStoreProtocol for per-key API rate limiting. Default ProcessLocalThrottleStore wraps mureo.throttle.Throttler; register(key, config) pre-installs custom buckets matching the MCP server's _PLUGIN_TOOL_THROTTLERS pattern.
  • mureo.core.RuntimeContext — frozen dataclass aggregating the four stores plus a workspace_id. DEFAULT_WORKSPACE_ID = "default" is the canonical single-workspace sentinel.
  • mureo.core.default_runtime_context() — factory wiring the four file-backed defaults.
  • mureo.core.get_runtime_context() — process-cached resolver that discovers a single zero-arg factory under the mureo.runtime_context_factory entry-point group; raises RuntimeContextFactoryError on multiple registrations or a returning-non-RuntimeContext factory.

Added — mureo learn add CLI

mureo learn add <text> [--scope {operator,workspace}] persists /learn insights through RuntimeContext.knowledge_store rather than writing files directly. Default scope operator writes the cross-workspace tier (today's pro-diagnosis location); --scope workspace writes a workspace-scoped tier if one is configured. The /learn skill (skills/learn/SKILL.md) now invokes the CLI instead of carrying its own copy of the file scaffold.

Changed — Consumers routed through the new Protocols

These refactors are call-site changes only; all on-disk artefacts and CLI behaviour are byte-equivalent in the default file-backed runtime.

  • mureo.auth.load_google_ads_credentials / load_meta_ads_credentials read through SecretStore (get_runtime_context().secret_store when path is not passed; one-shot FilesystemSecretStore(path=…) when it is).
  • MCP handlers mureo_strategy_*, mureo_state_*, rollback_*, analysis_anomalies_check resolve their path / state_file argument against state_store.workspace rather than raw CWD. Error messages and traversal-refusal semantics are preserved; symlink refusal in the analysis handler is unchanged.
  • MCP plugin dispatch acquires its throttle slot via RuntimeContext.throttle_store. The default ProcessLocalThrottleStore is seeded with the existing per-tool Throttler instances (_PLUGIN_TOOL_THROTTLERS) on first call; alternate backends receive acquire(name) and own per-key fallback semantics.
  • mureo.cli.rollback_cmd --state-file default is now resolved through RuntimeContext (rather than the literal Path("STATE.json")).
  • mureo.byod.runtime.byod_data_dir() adds a middle-priority resolution path: when a non-default RuntimeContext exposes a filesystem workspace, BYOD data lives at <workspace>/byod/. MUREO_BYOD_DIR env var and the legacy ~/.mureo/byod/ fallback are unchanged.

Install

pip install --upgrade mureo

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

Share this release

Track logly/mureo

Get notified when new releases ship.

Sign up free

About logly/mureo

Framework for AI agents (Claude Code, Cursor, Codex, Gemini) to operate Google Ads, Meta Ads, and Search Console. Grounded in a local STRATEGY.md — not metric-chasing. Defense-in-depth security, local-first. Apache 2.0.

All releases →

Beta — feedback welcome: [email protected]