What shipped
A memory-server and CI-safety week: the first governed MCP backend server (artemis-memory) lands over the canonical memory service, duplicate Obsidian MCP shells are retired, and CI security gates now run before merge instead of after.New features
artemis-memory MCP server. The first governed backend server ships four tools over the canonical memory service: write-memory, read-memory, search-memory, and get-memory-status. Every call is authorized through the governed gate with a namespace-scope check, so memory access is bounded by the caller’s authority context rather than raw credentials. The server runs over stdio by default and also exposes an authenticated Streamable HTTP transport at /mcp with bearer auth. See Hybrid memory bus and Agentic Memory Layer.
Updates
- Duplicate Obsidian MCP shells removed. Two byte-identical TypeScript “Obsidian MCP server” trees that had never been buildable (both shipped with a broken
./middleware/auth import) have been deleted, along with a stray top-level src/package.json. The Agentic Memory Layer shell remains the sole Obsidian REST surface, and make server no longer fails closed on it. Self-hosted operators who were building against the deleted trees should switch to the canonical Memory Layer path. See Agentic Memory Layer.
services/ now covered by the security-static scan. Bandit was previously invoked as bandit -r src app, so the MCP server packages under services/ — including the new artemis-memory server — were never scanned. The scan is now bandit -r src app services, with services/mcp/*/tests/* excluded to match the existing src/tests policy. See Environments.
- CI gates run on pull requests before merge. The promote workflow now also triggers on
pull_request, so the test, security, and docs-mirror gates run against the ephemeral merge commit — the tree that will actually land on dev. Previously the gates only ran after the push, letting a red commit reach dev and stall the promotion cascade. Promotion and lineage jobs remain push- and dispatch-only, and contents: write is scoped to just those two jobs. See Environments.
Bug fixes
- Bandit suppressions no longer orphaned by multi-line formatting. A style-only refactor had wrapped seven single-line calls across multiple lines, moving their
# nosec annotations off the offending expression’s line and silently disabling the suppressions. The affected sites in the postal service and the Supabase vector store were restored to a form Bandit matches, and a new security-policy test proves the class of regression is now caught. make security is green again with zero findings.
What shipped
A new Monitoring page in the dashboard, backed by two independent read paths so operators keep a governance view even when the metrics stack is off.New features
- Monitoring page under Inspect. The dashboard gains an Inspect → Monitoring page with stat tiles for quarantined and suspended agents, Sentinel alerts, governance-store readability, and Prometheus connectivity, plus tables for Prometheus alert rules, scrape targets, agent trust and violations, and Hebbian Sentinel scopes. The page auto-refreshes every 30 seconds to match the scrape interval, and unscored agents render as
unscored rather than 0.00 so an unmeasured agent is never confused with a low-trust one. See Monitoring dashboard.
GET /api/monitoring/governance. A new authenticated endpoint returns a durable governance snapshot read straight from the SQLite stores with the same strictly read-only access as the /metrics collector — per-agent trust, tier, status, and violations, status counts, Hebbian Sentinel scopes, and per-store readability flags. Available in every mode, including SQLite-only fallback with the monitoring stack down. See Get governance snapshot.
GET /api/monitoring/prometheus. A new authenticated endpoint proxies alert-rule states and scrape-target health from the Prometheus HTTP API server-side, so the browser keeps a single API origin and never needs to reach :9090. When the stack is off, the endpoint returns available: false with empty arrays instead of an error, and the Monitoring page shows the durable snapshot with a hint to start the stack. See Get Prometheus snapshot.
Updates
ARTEMIS_PROMETHEUS_URL on the kernel service. The Docker Compose kernel service now sets ARTEMIS_PROMETHEUS_URL=http://prometheus:9090, wiring the Prometheus proxy for the default stack. Self-hosted operators running the kernel outside Compose can export their own value (for example http://localhost:9090) or leave it unset to run in degraded mode. ARTEMIS_PROMETHEUS_TIMEOUT (seconds, defaults to 3) controls the client timeout. See Monitoring dashboard.
What shipped
A governance-and-routing week: the routing kernel gains hard eligibility and authorization gates that run before Hebbian ranking, Authstructure lands as a credential-free auth boundary, memory writes go through a canonical write-through service, and the ATP validation surface ships as a strict, authenticated MCP server.New features
- Routing kernel with pre-ranking eligibility and authorization gates. Candidate agents now have to clear hard admission checks — capability match, tenant scope, agent status, and delegated authority — before the Hebbian router ranks them. Denials are fail-closed with stable error codes, so a request that lacks the required capability or scope is rejected up front instead of silently falling through to a different candidate. Capability is now derived from the strict ATP envelope rather than caller input, closing intent-policy bypasses. See Routing modes and the ATP walkthrough.
- Authstructure: credential-free authority contracts. A new auth boundary verifies signed receipts to produce an authority context, without agents ever handling raw credentials. Sensitive proof names (API keys, access tokens, bearer tokens, provider secrets) are rejected on input, URI credential components are stripped, and verifier failures are sanitized so error paths can’t leak proof material. Bearer-token detection is now structured, not substring-based, so structured tokens are consumed cleanly and free-text messages that happen to contain the word
bearer are no longer misclassified. See Trust scoring.
- Canonical write-through memory service. Memory writes now go through a single service that persists to a durable ledger, then materializes projections (Obsidian, vector store) with typed receipts. Metadata is validated against a strict JSON contract, projection failures return a
projection_failed code with retryable state so callers can drive their own retry loop, and namespace conflicts across projections are rejected instead of silently overwriting. Design signed off for the Neon + Obsidian write-through path. See Hybrid memory bus and Agentic Memory Layer.
- Read-only registry read service. A new read service exposes safe, typed projections of canonical registry records for
get_agent_record and list_agent_records. Malformed records raise a dedicated RegistryRecordError instead of being handed to callers as raw dictionaries, so downstream consumers can’t accidentally act on partial data. See the API reference.
- Authenticated ATP validation MCP server. The ATP parse, validate, and format tools are now exposed as a first-class MCP service with strict typed input and output models and an authenticated server factory. Every request runs through the governed principal gate, so tool calls carry a verified authority context and results are normalized to typed outputs instead of loose JSON. See the ATP walkthrough and the API reference.
Updates
- Alpha-only routing blend contract locked. The
alpha routing blend now has a locked contract with test coverage, so composite + Hebbian weightings behave the same across releases. Operators tuning ARTEMIS_HEBBIAN_ROUTING_BETA and related knobs get stable, reproducible ranking behavior. See Routing modes.
- Coding standards baseline recorded. The repository now publishes an explicit coding-standards adoption baseline, so self-hosted contributors and downstream forks can align lint, typing, and review rules to the same reference.
Bug fixes
- Promote workflow no longer recurses. The
dev → staging → prod promote workflow was retriggering itself on the staging and prod pushes it created, wasting CI runs and occasionally opening duplicate promotion PRs. Push triggers now exclude the promote workflow’s own commits, so each promotion runs exactly once. See Environments.
- Blank principal evidence rejected on the MCP surface. The governed MCP gate now denies requests whose principal evidence or local capability set is blank, instead of accepting an empty authority context. See the API reference.
--atp wrapper fails closed on reserved use. The reserved --atp CLI wrapper now fails closed when invoked outside its supported call path, so a mis-scripted invocation returns an explicit error instead of silently running with an unbounded authority context. See the Kernel CLI reference.
What shipped
A dev-experience week for self-hosted operators: the root Makefile is now the single dependency contract, docs move to a proper MkDocs site, and the promote workflow runs through make.Updates
- Root Makefile owns installation end to end.
make install, make install-dev, make install-web, and make install-all are now the only supported paths for setting up an environment. The root Makefile creates or validates a Python 3.12 .venv, runs uv sync --locked against the committed lockfile, and installs both web workspaces from a shared npm lock. Existing environments can be selected explicitly with VENV=... PYTHON=... make install-dev. Poetry, Pipenv, conda, pyenv range files, and direct pip are no longer supported install paths. See Environments.
- Node.js 20+ required. The floor for the TypeScript API and React frontend moves up from Node 18 to Node 20. Update your local toolchain and any container base images before pulling. See Environments.
- Promote workflow standardized on
make. The dev → staging → prod promotion job now runs make install-dev, make lint, make test, and make docs, so CI executes the same commands you run locally instead of a bespoke pipeline. See Environments.
- MkDocs documentation site. The in-repo docs now build as a Material-themed MkDocs site (
make docs, make docs-serve) with grouped navigation for Getting Started, Architecture, Agents and APIs, Governance, and Development and Operations. Documentation renders live during development and ships as a build artifact from the promote workflow.
- Standalone Obsidian MCP TypeScript service retired from the checkout. The
src/Artemis Agentic Memory Layer/ tree is now a historical boundary only — its package.json, source tree, and Docker files are no longer in the repository. Memory integration continues through the Python paths under src/integration/ and src/memory/, which are unchanged. If you depended on the standalone service, pin to a pre-v0.7.1 tag until it is restored. See Agentic Memory Layer.
What shipped
Task-level deep links and a full activity trail land in the dashboard and the API.New features
- Task detail and report detail deep links. The dashboard now has route-backed pages at
/tasks/:taskId and /reports/:filename that survive refresh and can be shared. The Tasks list also accepts a ?status=... query parameter for filtering, and creating a task now redirects into its detail page instead of clearing the form. See the API reference.
GET /api/tasks/{task_id}. A new dashboard read endpoint returns a single task by exact ID across every status, not just pending. This is what keeps a task addressable after execution moves it out of the pending queue served by GET /api/v1/tasks. Task IDs are matched against parsed metadata only and never turned into a filesystem path. See Get task by ID.
GET /api/tasks/{task_id}/activity. A new activity-trail endpoint returns the task record, routing decision, provenance chain, matching run-log events, and any reports the task produced — the read path behind the new task activity view. Events are filtered by exact task_id in metadata and stitched together by parent and child prov_id, so a whole task can be replayed from one ID. Accepts an optional limit between 1 and 500 (defaults to 200). See Get task activity trail.
Updates
- Cancellable dashboard requests. Task, agent, and executor pages now cancel in-flight requests when you navigate away, so stale responses don’t overwrite a newer view. The API client also surfaces typed errors and richer response options for consumers building against the dashboard API.
What shipped
A big week focused on ATP-aware routing, Hebbian observability, a real LLM bridge to Exo, and a proper legal-summarization eval pipeline.New features
- ATP-aware routing and end-to-end provenance tracing. Task envelopes now carry Artemis Transmission Protocol (ATP) headers that resolve to routing scope, required capability, and action metadata before dispatch. Every execute and stream response returns an
atp block plus a provenance_id, and run events link routing, dispatch, memory, learning, and task lifecycle through parent/child provenance IDs so an entire task can be replayed from a single ID. ATP headers are stripped from agent-visible content, and provenance logging is fail-closed. See the ATP walkthrough and the API reference.
- Hebbian Sentinel observability. New Sentinel state and alert endpoints land on the FastAPI and Express layers, and the Executor’s routing panel now surfaces per-candidate oscillation rate, alert flag, and sample count alongside trust and score. Operators can see routing instability in the dashboard the moment it starts, instead of waiting for a downstream failure. See Trust scoring and Routing modes.
- Legal summarization evaluation pipeline. The legal summarization experiment is now a configurable eval pipeline with Hub and local dataset loading, streaming, column/task mapping, an extractive baseline mode, and dependency-free ROUGE-style metrics with per-run and per-record aggregation. Dataset provenance is persisted alongside every run, and Hugging Face access uses
HF_TOKEN (with an optional interactive fallback). A new make legal-summarization target plus a dependency-doctor mode (--check-dependencies) make first-run setup self-diagnosing. Useful as a reference workload for ATP and memory-bus tuning.
- Concept Demos hub. The interactive Artemis, city postal, and memory-integration demos are consolidated under
Concept_Demos/ and wired into the root Makefile using locked uv sync installs, so a fresh clone can run every demo without hand-editing paths.
Updates
- Real LLM calls through the v1 API.
/api/v1/llm (chat, complete, config) now delegates to the Python bridge and hits Exo for real instead of returning simulated controller output. Provider failures are reported as provider failures (no synthetic success unless an operator opts into a degraded local baseline), and every call records redacted Exo wire evidence — request/response IDs, endpoint, status, latency, hashes — for audit. Demo-era LLM routes that were never implemented now respond with an explicit 501. See the API reference.
- Exo timeout, retry, and compression controls. New environment variables tune Exo request timeouts, retry behavior, and long-response compression, and oversized model outputs are routed through governed summarization and preserved as artifacts. Streaming responses now emit heartbeat events so idle SSE connections don’t drop mid-generation. See Environments.
- Rate limiting with
Retry-After. Protected LLM routes are now rate-limited and return a standards-compliant Retry-After header when a client exceeds its budget, so integrations can back off cleanly instead of hammering the API. See the API reference.
- CI/CD consolidated on CircleCI. The stale, overlapping GitHub Actions workflows (including one with invalid YAML and one referencing a missing action) have been removed. CircleCI is the single source of truth, GitHub Actions keeps only the promotion cascade, and docs now match the pipeline that actually runs. See Environments.
- Coverage floor raised to 90%. Python coverage is now standardized on a single
pyproject.toml source list and enforced at a 90% floor across local runs and CI, with expanded contract and branch coverage for the bridge, dashboard API, orchestrator, kernel memory bus, CLI entry points, trust and registry round-trips, and legal summarization.
- Backend tables unified under one data folder. Backend data sourcing for the registry, memory bus, and run logs is now consolidated under a single canonical
data/ folder, so self-hosted operators no longer have to reconcile parallel paths after upgrades. See Environments.
- Legacy demo frontend removed. The old
Concept_Demos/web/frontend Vite app and the quantum-harmony-marketplace submodule reference have been deleted. If you were building against either, switch to the new demo entry points under Concept_Demos/.
Bug fixes
- Streaming responses terminate cleanly on failure. Startup wiring and streaming termination were fixed so a routing or execution failure closes the SSE stream and marks the task correctly instead of leaving the connection open or the task in an ambiguous state. See the API reference.
- Provider outages no longer look like agent bugs. LLM agent responses now separate provider failures from agent failures on the wire, so a downed Exo endpoint surfaces as a provider error with the recorded evidence instead of an opaque agent failure. Learning updates are gated to eligible outcomes so a failed call doesn’t skew Hebbian weights.
- Obsidian parsing unified in FastAPI. The FastAPI layer now reuses the canonical Obsidian parser used elsewhere in the stack, so task and note reads return the same structure regardless of which entry point served them. See Agentic Memory Layer.
What shipped
The Quantum Harmony plugin marketplace expands with three new scaffolding and governance plugins, and ramble-on gets a resilience pass.New features
- Three new marketplace plugins for agent scaffolding and provenance. The Quantum Harmony marketplace adds
project-scaffolder (lays a project’s .agents/ governance frame — instructions, index, seeded logs), agent-definition (writes an Agent Card to agents/<name>/AGENTS.md, inheriting parent governance), and atp-provenance-logging (line-item action provenance with parent + child prov_id in agent logs, and halt-and-alert on log failure). They stack cleanly with the existing agent-scaffolder and artemis-transmission-protocol plugins to define, scaffold, communicate, and audit agents end to end. See the ATP walkthrough and Trust scoring.
- Anaconda Agent Studio skill pack. A new
anaconda-agent-studio skill scaffolds agents for the Anaconda Agent Studio runtime — agent.yaml / pixi.toml layout, @tool authoring against anaconda_agent_runtime, MCP tool servers, multi-agent orchestration, and a migration path for existing Claude skills. Bundled alongside the ATP skill so a single install covers the Artemis City → Agent Studio bridge. See Environments.
- ATP packaged as a Claude plugin. The Artemis Transmission Protocol skill is now distributed as
artemis-transmission-protocol@1.1.0 on the marketplace, with a pre-seeded tag registry, portable persona.py loading, and a bundled scripts/ + assets/ layout so a fresh install works without hand-editing paths. See the ATP walkthrough.
Updates
ramble-on 1.3.0: cross-provider fallback and safer key handling. The signal-translation plugin now transparently fails over to a secondary provider when the primary returns an auth error, 404, or 429 quota response, so a single vendor outage doesn’t drop the request. A shared key inspector runs at three checkpoints (seed script, on-demand tool, load-time warning) and reports a masked fingerprint plus structural issues, catching malformed pastes without exposing the secret. The retired claude-3-5-sonnet-latest default was swapped for claude-opus-4-8, and the server version string is now aligned across plugin.json, mcp/package.json, the marketplace entry, and the running MCP server’s SERVER_INFO.
ramble-on 1.2.0: esbuild-bundled MCP sidecar. The plugin’s MCP sidecar is now bundled with esbuild, producing a smaller, self-contained install and stable file paths. Unsupported HTTP methods on the sidecar now return a normalized error instead of crashing the transport.
- MCP architecture reference. A new marketplace-level architecture doc walks the MCP tool lifecycle and sidecar model used by
ramble-on and the ATP plugin, so plugin authors have a single reference for how tools are discovered, invoked, and torn down.
What shipped
A quiet week — one infrastructure update for self-hosted operators.Updates
- Unified CircleCI pipeline for self-hosted forks. CircleCI is now the single source of truth for CI/CD, with parallel checks (docs mirror, Python 3.11/3.12/3.13 matrix, TypeScript API, secrets scan) and branch-gated workflows for
dev, staging, and prod. dev auto-deploys on green, and the dev → staging → prod promotion cascade is wired in behind approval gates that match the environment policy. Per-version pytest results, coverage, and a Bandit security report are stored as build artifacts, and advisory linters (Black, isort, Flake8) run once per build. See Environments.
What shipped
Artemis City v0.7.0 is out. Highlights below.New features
- Sandbox City simulation environment. A new metaphorical simulation layer maps system functions to named “zones” — Post Office (secure transfer), Town Hall (governance), Library (memory archives), Workshop (agent onboarding and validation), Public Square (CLI and interface layer), and Watchtower (monitoring). Useful for visualizing agent interactions and onboarding new operators. See Living City.
- Vector store seed script. A standalone seed script is now bundled with the API tree so self-hosted operators can bootstrap a fresh vector store with a usable corpus in one step, instead of relying on an empty index. See Environments.
Updates
- Express API now bridged through the Python core. The agent registry, ATP, memory, trust, and Hebbian endpoints on the Node/Express API now route every mutation through the Python orchestrator instead of an in-memory TypeScript shim. Behavior and responses are consistent between the Express layer and a direct Python call, and Obsidian vault path handling was hardened along the way. The public route surface is unchanged. See the API reference.
- Automated dev → staging → prod promotion cascade. Self-hosted CI now fast-forwards
dev to staging and staging to prod automatically once the test gate passes, instead of requiring a manual promotion PR for each hop. The deploy workflow is now reusable, and a pre-commit branch guard blocks accidental commits to protected branches. See Environments.
- CircleCI runnable out of the box. The CircleCI config was simplified, the Python orb was updated, and pytest is now wired in, so a fresh fork of the repo passes CI without manual tweaks. Dependency submission was fixed at the same time.
Bug fixes
- Reflected XSS hardening on the agent card endpoint. The agent card markdown endpoint now responds with
text/plain and X-Content-Type-Options: nosniff so browsers can’t render an attacker-influenced response as HTML. Markdown rendering continues to work in clients that opt in explicitly. See the API reference.
What shipped
New features
- Trust-aware routing. The Hebbian router now blends a third signal — composite + Hebbian + trust — so high-trust agents are preferred when capabilities tie. Operators can also set a trust floor that excludes any agent below the threshold from candidacy before scoring. Both controls are opt-in via
ARTEMIS_HEBBIAN_ROUTING_BETA and ARTEMIS_ROUTING_TRUST_FLOOR (default 0.0, off). When the trust source is unavailable, routing falls back to a neutral prior instead of blocking, and a floor that excludes every candidate now raises a dedicated error instead of silently routing to a fallback capability. See Trust scoring and Routing modes.
- Streaming task execution. A new
POST /api/cli/execute/stream endpoint returns a Server-Sent Events stream with four event types — routing, token, complete, error — so dashboard and CLI clients can render LLM output token by token. Non-streaming agents are served by the same path with a single token event, so clients don’t need to branch on agent type. See the API reference.
- Live streaming in the dashboard Executor. The Executor view gains a Stream response checkbox plus a live token buffer that fills in as the model produces output, then rolls into the final result summary on completion. The routing panel now also surfaces a per-candidate trust column and a trust-floor badge when one is configured.
Updates
- Exo LLM endpoint wired up end-to-end. The built-in LLM agent now targets
/v1/chat/completions directly (previously a misconfigured base URL returned 405 Method Not Allowed), default max_tokens was raised from 600 to 4000 so reasoning-mode models like Qwen3 finish before hitting the budget, and the default request timeout was raised from 5s to 60s to match real local-inference latencies. The default EXO_MODEL_ID is now mlx-community/Qwen3-0.6B-4bit — the smallest text-gen model in the registry — so a fresh self-hosted install boots with a working model. See Environments.
- Reasoning fallback when models exhaust the token budget. When a reasoning-mode model fills its budget thinking and emits no final answer, responses now fall back to the model’s
reasoning_content prefixed with a clear [Model hit max_tokens during reasoning — increase max_tokens to get a final answer.] note, instead of returning an empty result.
- Dark-theme contrast across the dashboard. Native
<select> dropdowns in Executor, Tasks, and Database now use the dark surface palette so menu items are legible. The Executor’s blue / teal / purple / gray callouts and the Database’s event-row panel were re-skinned with translucent dark backgrounds and explicit text colors. The Reports modal now styles headings, paragraphs, code blocks, blockquotes, tables, lists, and links for the dark theme, so report bodies are readable end to end.
Bug fixes
- Trust-floor exclusion no longer silently falls back. When every candidate for a requested capability is below the configured trust floor, the router now raises an explicit error instead of returning
None and letting the orchestrator fall back to a different capability (typically llm_chat). This preserves the operator’s policy — a trust-gated request will not be served by an un-gated capability.
- Trust source failures no longer block routing. If
TrustInterface fails to initialize, the orchestrator now zeroes out the trust blend and trust floor for the run instead of leaving every agent at the 0.5 neutral prior — which, with a floor above 0.5, would have excluded everyone and made the system look hung. A warning is logged so operators can repair the trust source.
- Streaming routing failures now update task state. When routing fails during a streaming execution (missing capability, trust-floor exclusion, etc.), the task note is now marked
routing_failed before the error event is yielded, matching the non-streaming contract. Tasks no longer get stuck at in progress with no execution record.
- Streaming responses redact internal error detail. The streaming executor’s
error and complete events now return generic messages ("Streaming executor crashed; see server logs.", "Hebbian persistence failed; see server logs.") instead of raw exception strings. Full detail still lands in the server log. See the API reference.
- Hebbian persistence failures surface to streaming clients. If the post-execution Hebbian weight update fails on a streaming task, the
complete event now reports a generic persistence error in its error field, so the client knows the learning update was lost even though the task itself succeeded. Previously the failure was swallowed.
- Code-scanning autofixes. Cleared eight log-injection findings by routing every logged user-controlled value through the recognized sanitizer pattern, plus stack-trace-exposure findings on the new streaming error paths.
What shipped
New features
- Anaconda Agent Studio integration. External agents running under Anaconda Agent Studio (Oracle, Compsuite, Packrat, Compressor, Loki) can now be registered into the Artemis City agent registry and routed to through the same capability-based path as built-in agents. Each external agent keeps its own persona, system prompt, and tools — Artemis City is the transport and governance layer. Opt in by setting
ANACONDA_AGENT_PORTS (and optionally ANACONDA_DESKTOP_URL) before starting the orchestrator. See Environments and the API reference.
- Versioned rollback for system state. A new rollback manager lets operators create, list, restore, and prune versioned checkpoints of Artemis City’s state, with retention policies and provenance logging on every transition. This gives self-update and routing changes a durable, auditable safety net. See Trust scoring.
Updates
- Orchestrator auto-discovers external agents at startup. When
ANACONDA_AGENT_PORTS is configured, the orchestrator now registers each matching Anaconda Agent Studio agent as part of its standard startup sequence and logs which agents joined the registry. When the variable is unset, startup is unchanged — the integration is fully opt-in and any discovery or network failure is logged without blocking boot.
- Bearer auth on external agent calls. Requests to Anaconda Agent Studio’s per-agent endpoints and the Desktop discovery endpoint now send an
Authorization: Bearer header on every call. The key resolves in order: explicit caller argument → ANACONDA_API_KEY environment variable → a permissive default that works with the Agent Studio Beta out of the box. A single environment variable now configures the whole stack.
Bug fixes
- Streaming responses from external agents parse correctly. External agents return Server-Sent Events even when a non-streaming response is requested. The integration now consumes the stream end-to-end and separates the model’s reasoning (
reasoning_content) from the user-facing response (content) so callers can surface answers and audit reasoning independently, instead of failing on the first non-JSON line.
What shipped
New features
- Refreshed dashboard design. The web dashboard ships a new “Glass Robo” look — dark navy surface, glass panels, semantic kernel/memory/attention accents, and JetBrains Mono + Inter typography applied across every page. The sidebar is grouped into Operate and Inspect sections with an inline health card that polls orchestrator state every few seconds, and the home page now opens on a cluster overview with KPI tiles for Agents, Hebbian, Vectors, and Reports plus an Agent Topology panel. See the API reference for the endpoints driving each view.
Updates
- Drift-resistant secrets setup.
setup_secrets.sh no longer rotates keys on every run. It now discovers canonical values from existing .env files, fills gaps without overwriting, and syncs the same value into every consumer so the FastAPI dashboard and orchestrator can’t fall out of sync. Two new modes ship: --check exits non-zero on drift (CI-friendly) and --regenerate force-rotates all canonical keys. See Secrets setup.
- Dashboard auth wired end-to-end. The web dashboard now sends
X-API-Key on every request and reads FASTAPI_API_KEY / MCP_API_KEY from the project root .env automatically, so running setup_secrets.sh followed by the dashboard no longer 401s. A new make api target boots the FastAPI dashboard backend on :8000 alongside make frontend.
- Dashboard data sources unified. The Agents, Database, Hebbian Stats, Vector Stats, and Runs endpoints now read from the canonical repo-root
data/ directory used by the orchestrator instead of an empty parallel path, so all five views populate on a fresh install. Container operators can override individual stores via ARTEMIS_DATA_DIR, ARTEMIS_REGISTRY_DB, ARTEMIS_HEBBIAN_DB, ARTEMIS_VECTOR_DB, and ARTEMIS_RUN_LOG_DB. See Environments.
- Unified
docker-compose.yaml. The root compose file is now docker-compose.yaml (matching the devcontainer and every other reference in the repo). Self-hosted operators should pull the latest file; the memory-layer subdirectory’s compose file is unchanged.
Bug fixes
- LLM provider keys no longer leaked over the API.
POST /api/v1/llm/provider and GET /api/v1/llm/providers previously echoed the upstream provider apiKey (resolved from server env vars) back to any caller holding the dashboard’s X-API-Key. Both responses now redact apiKey and return apiKeyConfigured: boolean instead. Chat and completion paths still use the real key server-side. See the API reference.
- Client options can’t override server-side LLM credentials. Client-supplied
options.apiKey and options.baseUrl on the provider configure endpoint can no longer overwrite the env-derived key and base URL. Non-object options payloads are also coerced to {} instead of being spread.
- Docker runtime image fixes. The runtime image’s
ARTEMIS_REPO_ROOT now points at the correct working directory so the TypeScript-to-Python bridge resolves, the production stage runs npm ci --omit=dev so the API can boot, EXPOSE matches the documented API_PORT, and the container healthcheck honors API_PORT overrides instead of probing a hard-coded port.
- Trust score store isolation. Trust-interface tests now use a per-test SQLite database instead of sharing the project default store, so local runs no longer carry decay or penalty state across test invocations. See Trust scoring.
- Code-scanning autofixes. Picked up GitHub code-scanning autofixes for a log-injection finding and a disabled-certificate-validation finding.
What shipped
Updates
- Unified CLI entry point. CLI logic is now consolidated under
app.kernel.cli so the terminal, demo, and bridge flows all share the same kernel surface. The legacy artemis_cli.py entry still works, so existing scripts and shortcuts continue to run unchanged. See the Kernel CLI reference.
.env-aware Makefile targets. Make targets for the demo, CLI, and server now auto-load values from a local .env before running, so self-hosters no longer need to export variables by hand for each session. See Secrets setup.
- Container image cleanup. The Python image was renamed from
Dockerfile.python to Dockerfile-python and docker-compose.yml was updated to match. A new .dockerignore keeps secrets and build artifacts out of image context, producing smaller, safer builds. Self-hosted operators rebuilding images should pull the latest compose file. See Environments.
What shipped
New features
- Governance checkpoints and rollback. Deployment, scheduled, and manual checkpoints now persist a hashed snapshot of agent state with a configurable retention window, and a rollback manager verifies integrity before returning a checkpoint for restore. Operators get a durable safety net for self-update and routing changes. See Trust scoring.
- Per-agent sandbox with tool whitelisting. Agents now run against a per-agent allowlist of tools, paths, and operations. Denied calls are recorded as typed violations (
unauthorized_tool, unauthorized_path, rate_limit, missing_capability, unsafe_network), and an agent is auto-quarantined on its third strike. See Metrics.
- Artemis persona and reflection layer. The flagship Artemis agent ships with a structured persona (reflective, architectural, conversational, technical, and poetic response modes) and a reflection module for higher-level planning and summarization. See Living City.
- Legal-judgment summarization experiment. A new CLI experiment (
python -m src.Experiments.legal_summarization.main) runs single-document and batch summaries across English and Urdu judgments, with run history, side-by-side run comparison, and a dataset describe mode. Useful as a reference workload for ATP and memory-bus tuning.
Updates
- Approval-tier thresholds clarified. Self-update tiers now publish their exact boundaries:
auto requires trust > 0.9, < 1% code change, backwards-compatible, and no new dependencies; monitored covers trust 0.7–0.9, 1–10% change, additive API, with new deps gated on review; everything else (including any policy or governance change, regardless of trust) routes to human. See Trust scoring.
- Agentic Memory Layer hardening. The MCP server gains explicit auth middleware, request logging, and dedicated tools for note read/update/delete, frontmatter and tag management, global search, and search-and-replace against the Obsidian vault. See Agentic Memory Layer.
What shipped
New features
- Trust-score engine and self-update approval tiers. A new governance service computes a per-agent trust score from weighted sub-metrics (success rate, security, code quality, audit, uptime) and exposes a per-component breakdown for transparency. A companion approval governor classifies proposed agent self-updates into
auto, monitored, or human review tiers — breaking changes, large diffs, policy or governance edits, unknown agents, and low-trust agents are routed to humans automatically. Two new endpoints land under /api/v1/governance: POST /agents/{id}/trust computes and persists a trust score, and POST /updates returns the approval tier for a proposed update. See Trust scoring and the API reference.
Bug fixes
- Security: remediated Dependabot alerts across Python and Node dependencies. Vulnerable lower bounds were raised to the first clean release for
requests, python-multipart, setuptools, black, pyarrow, pytest, pydantic, fastapi, httpx, and wheel, alongside npm audit fix for the web dashboard. Self-hosted operators should re-resolve their lockfiles to pick up the patched versions.
What shipped
New features
- Kernel CLI and built-in agents. The kernel layer is now importable as
app.kernel and ships a terminal entry point at python -m app.kernel.cli with one-shot, plan-file, and interactive modes. Two concrete agents are wired in: a daemon system anchor (also the default fallback for unimplemented routes) and a planner that drafts execution plans. Routes without a concrete handler now fall back to the daemon and log the gap, and responses report the agent that actually handled the command. See the Kernel CLI reference.
Updates
daemon replaces codex_daemon. The default route in agent_router.yaml was renamed from codex_daemon to daemon. Update any custom router configs or scripts that referenced the old name.
- Installable
app package. The Hatch wheel now ships the app/ tree, so installed consumers can import app.kernel.kernel and run python -m app.kernel.cli without a source checkout.
What shipped
Updates
- Agentic Memory Layer now talks to the real Obsidian Local REST API. The MCP server’s vault client was rewritten against the documented Local REST API v4.x surface: file CRUD targets
/vault/{path} with segment-wise URL encoding and text/markdown content types, search uses POST /search/simple/?query=…, and frontmatter/tag edits go through PATCH /vault/{path} with the documented Operation / Target-Type / Target headers. Tag add/remove now does read-modify-write so duplicates and missing arrays are handled cleanly, and listNotes walks the vault depth-first via GET /vault/{dir}/. Exported function signatures are unchanged, so existing MCP tool wrappers keep working without edits. See Agentic Memory Layer.
- Environment branching docs reference branch protection rulesets. Environments now points to the
Protect dev, Protect staging, and Protect prod rulesets that enforce required CI checks and approvals on each environment branch.
Bug fixes
- Removed unconfigured security workflows. The placeholder APIsec and Jscrambler starter workflows have been removed from CI. They were never wired up and were failing on every push to
staging and prod. Real scanners will be re-added once accounts and secrets are provisioned.
What shipped
New features
- Environment branching (dev / staging / prod). Three long-lived environment branches now map 1:1 to GitHub Environments and deploy targets, with per-environment YAML under
config/environments/ and an ARTEMIS_ENV-keyed Python loader. CI validates all three configs on every push, deploy.yml routes pushes to the matching GitHub Environment, and a manual Promote workflow opens draft dev → staging and staging → prod PRs. Setup steps and the secrets model are documented in Environments.
What shipped
New features
- Web dashboard UI. A new browser-based dashboard lands with dedicated views for Agents, Tasks, an Executor, Reports, and a Database explorer. Operators can now monitor and drive runs without leaving the browser. See the API reference for the endpoints powering each view.
- Versioned v1 web API. Agents, ATP, memory, trust, LLM, and health endpoints are now grouped under a stable
/v1 namespace with auth and logging middleware, so integrations can target a versioned surface instead of unversioned routes. Full schema in the API reference.
- Artemis Transmission Protocol (ATP). First-class ATP support ships with a parser, validator, and shared models, giving agents a structured way to negotiate task envelopes and routing boundaries across the city. Background in the ATP walkthrough guide.
- Artemis CLI. A command-line interface is now available for driving the orchestrator from a terminal, alongside an
agent_router configuration for declarative routing setups.
- Postal service & trust interface. A new postal service handles inter-agent message delivery, and a dedicated trust interface exposes scoring, validation, and credentialed-reviewer signals to clients. See Trust scoring.
Updates
- Memory client with decay. A reusable memory client now talks to the hybrid memory bus on behalf of agents and applies decay so stale entries fall out of routing automatically. See Hybrid memory bus and Hebbian learning.
- Vector store seeding. A seeding workflow is available for bootstrapping the vector store on a fresh deployment, so new environments start with a usable corpus instead of an empty index.
- Containerized deploys. A separate Docker dependency set is now maintained alongside the standard install, keeping self-hosted images lean.
- Health checks. A built-in health check surfaces orchestrator, memory bus, and API status in one call for uptime monitoring and load balancers.
- Refreshed architecture docs. Architecture, Living City, Memory bus, and API reference have been updated to reflect the new dashboard, v1 API, and ATP surfaces.
Bug fixes
- API reference grammar. Minor copy fixes in the API reference for clearer endpoint descriptions.
What shipped
New features
- Whitepaper v3 release. Artemis City v3 introduces the Domain-Locked Hebbian Marketplace, replacing the v2 binary weight rule with a continuous morphological learning formula (ΔW = tanh(a · x · y)). In simulation, the new routing outperforms unconstrained routing by 81.2% and runs at 180× lower compute cost than k-NN lookup. Read the full v3 whitepaper.
- Active Sentinel & Immune System. The sentinel layer now actively reroutes traffic when it detects routing oscillation in a domain, instead of just raising passive alerts. Interventions concentrate automatically in volatile domains, so stable workflows are left untouched. See Trust scoring and Metrics.
- Hebbian + k-NN reconciliation layer. Hebbian routing now acts as a cheap O(1) elimination layer that defers to k-NN verification only on disagreement. Reconciled decisions run at 71.9% of pure k-NN cost while improving accuracy — useful for high-stakes domains that need an auditable decision trail. Details in the routing modes reference.
Updates
- Distributed weight resilience. Corpus corruption is now contained to a single agent instead of propagating system-wide. The routing graph automatically deselects poisoned agents within a few tasks. See Hebbian learning.
- Missing-flow detection. When a new task type appears that no agent has been trained on, the system surfaces a clear 7.2× failure-rate spike that triggers a kernel-level expansion workflow rather than silent degradation. See the Kernel CLI reference.
- Faster failure recovery. Hebbian agents now recover from failure events in 4–5 steps versus 17–24 for monolithic baselines, a 4–5× improvement in adaptation speed.
- Human validators as weighted reviewers. Credentialed human reviews now carry more weight than hobbyist feedback in agent scoring, with validated reviews exposed as a tradeable signal inside the marketplace. See Trust scoring.
- Memory bus SLOs published. Documented write latency under 200 ms p95 (500 ms p99), read latency under 50 ms p95 for cache hits, and sync lag under 300 ms between the Obsidian vault and Supabase index. See Hybrid memory bus.
What shipped
New features
- Hugging Face integration. Artemis City agents can now reach Hugging Face models through the orchestrator. This expands the catalog of models available to agents without custom adapter work. See Translator Protocol for how agents negotiate model and encoding boundaries.
- Vault-backed task and agent endpoints. The dashboard API can now list tasks directly from your Obsidian vault and read the agent registry from local storage, so the dashboard stays useful even when the orchestrator is offline. See the API reference for endpoint details.
Updates
- Docker install path. A dedicated dependency set is now available for containerized deployments, simplifying setup for self-hosted environments.
- Dashboard performance. Web dashboard build tooling was upgraded for faster page loads and improved browser compatibility.
- Architecture documentation. Refreshed system diagrams and the Living City reference to reflect current routing and orchestration behavior.
Bug fixes
- Agent listing resilience. Listing registered agents no longer fails when the orchestrator hasn’t initialized; results are read from the agent registry directly.
- Task parsing. Task notes with frontmatter and inline metadata are parsed more reliably, including subtask checkboxes.
Last modified on August 24, 2026