Skip to content

Week of July 27 -- August 2, 2026

This week delivered a full-stack session metrics subsystem from agent-side telemetry aggregation through API endpoints and web UI dashboards, completed the config-driven auth migration that eliminates all hardcoded per-provider credentials, and shipped pre-start customization hooks at both project and hub scope. The A2A protocol bridge gained admin UI integration with live config management, Discord added one-step thread+agent creation and file retrieval commands, and a sustained chain of auth and injection fixes resolved a class of Vertex AI restart failures.


An entirely new observability subsystem shipped end-to-end. M3 introduced an agent-side telemetry aggregation engine in sciontool, a MetricsPayload field in the StatusUpdate protocol, a new agent_session_metrics Ent schema, and a hub ingestion endpoint with auth gating. M4 followed immediately with three API endpoints (/agents/{id}/metrics/summary, /metrics/session/{id}, /projects/{id}/metrics/summary), SQL-level aggregation with IDOR-safe authorization, and a web UI layer including an agent detail metrics tab, stats columns in the agents list, and a project summary view.

2. Config-Driven Auth Migration (Phases 3–4)

Section titled “2. Config-Driven Auth Migration (Phases 3–4)”

All hardcoded per-provider auth fields — AnthropicAPIKey, GeminiAPIKey, CodexAPIKey, and their switch-case dispatch tables — were removed. Every built-in harness now resolves credentials exclusively through FromConfig variants, decoupling the auth pipeline from provider-specific knowledge. This completes a multi-phase architectural cleanup that makes adding new model providers a configuration change rather than a code change.

Project-level pre-start hooks shipped on July 27 with a new ProjectPreStartHook Ent entity, project-scoped shell scripts staged as pre-start.d/30-project-custom with abort-on-failure wiring. The next day, scope expanded to hub-level hooks with a scope enum (project/hub), web UI components in Hub Resources and Project Settings, a scion hub hook CLI subcommand, and project-overrides-hub precedence resolution. Operators can now inject environment setup, credential validation, or compliance checks that run before every agent start.

The A2A protocol bridge was elevated from a standalone plugin to a first-class Hub admin integration across three phases. Phase 1 introduced a KnownPlugin catalog replacing the flat plugin list, with a self-managed install flow and frontend platform support. Phase 3 delivered real config management through the admin UI — Configure() with atomic snapshot swap, AdminOverlay hot-swap, and enriched HealthCheck(). Earlier in the week, the bridge also gained per-user access token auth with hubUAT and hubJWT schemes, SHA-256 keyed token cache, and CallerIdentity context propagation.


  • GCP Error Reporting integration: serviceContext, stack_trace on ERROR+, and @type annotation for automatic error detection in GCP console.
  • Subsystem logging tags: Tier 3 logging tags added to remaining CRUD handlers, completing structured log coverage across the hub.
  • Telemetry pipeline resilience: Retry with exponential backoff for telemetry exports; GCP project ID derived from SA credentials for metrics dashboards instead of requiring manual configuration.
  • Cloud Monitoring query fix: Corrected ALIGN_SUM to ALIGN_DELTA for single-point cumulative series, fixing inaccurate metric visualizations.
  • Harness auth corruption fix chain: Resolved a self-perpetuating corruption bug where harness implementation names (e.g. container-script) leaked into opts.HarnessAuth and scion-agent.json, causing Vertex AI agents to fail with “not logged in” on every restart. Added GOOGLE_CLOUD_PROJECTANTHROPIC_VERTEX_PROJECT_ID translation and a defensive guard rejecting known harness names from auth backfill.
  • as_needed injection enforcement: The as_needed annotation was previously stored and shown in the UI but never filtered at dispatch time. Enforcement was added to all three injection paths in httpdispatcher.go, followed by a three-part fix chain: two-pass env-gather resolution, DispatchAgentRestart env/secret resolution, and second-pass resolution in DispatchFinalizeEnv. File-type and variable-type secrets are now exempt from the filter.
  • Policy API admin gating: All 11 policy API handlers now require requireAdmin — previously any authenticated user could create, modify, or delete authorization policies.
  • Multi-GitHub credential support: Convention-based secret key derivation (GH_OWNER__REPO, GH_OWNER) inserted into the tokenForRef precedence chain, enabling differently-scoped tokens for multiple repos. Purely additive and backward compatible.
  • Credential decoupling from NoAuth guard: provisionCredentials no longer skips when no_auth.behavior: drop-to-shell is set, unblocking GitHubSkillResolver access to convention-based GH_ tokens for private repo skill resolution.
  • Permission error surfacing: Secret creation permission errors now return 403 with actionable guidance instead of generic 500.
  • Hub-side gh:// skill cache activation (Phase 3): RegisterFallback routing infrastructure with context-cancellation-safe fallback flips resolution to the hub-side cache, with broker-side fallback when the Hub is unreachable. Phase 2 defects (hash format, expiring URLs, cross-project authz) were fixed in the same cycle.
  • Batch skill import: Paste a GitHub directory URL to discover skill subdirectories, select via checkbox interstitial, and add all checked skills as individual URI references in a single atomic PUT. URLs are stripped of credentials before logging.
  • Scope-based skill collision resolution: Replaces the hard error in installResolvedSkills with a precedence dedup pass (project > template > user > hub > platform). Scope field annotated at all injection sites; collisions logged and recorded in resolved-skills.json.
  • Ref→SHA deduplication: Duplicate gh:// ref→SHA lookups within a single resolve request are now deduplicated with case-insensitive owner/repo memo keys.
  • Broker-singleton skill cache: GitHub skill resolution cache promoted from per-request ephemeral to broker-level singleton with extended TTLs (5m → 30m default, 24h for SHA resolution).
  • Platform skill expansions: Six skills added or updated — scheduler, git-operations, workspace orientation, messaging, agent management recovery, and shell safety.
  • Settings precedence overhaul: Hub agent defaults and env scope ordering corrected, with thinking-level propagation fix and comprehensive design documentation. Project default-harness-config now correctly outranks template harness config.
  • Project clone: Deep-copies settings, labels, env vars, skills, hooks, harness configs, and templates with defer-driven rollback. Frontend displays hub-default placeholders.
  • Resolved settings endpoint: New GET /projects/{id}/settings/resolved shows hub defaults per-setting, enabling the UI to distinguish inherited from overridden values.
  • Hub agent defaults pipeline: DefaultModel and DefaultThinkingLevel wired into the hub defaults pipeline. Canonical shared harness name list replaces three inconsistent hardcoded lists.
  • Init ordering: Git clone now runs before pre-start hooks — provisioner-created files in /workspace previously caused isWorkspaceEmpty to skip the clone.
  • /scion thread command: Create a Discord thread and a Scion agent in one step, with X-Scion-On-Behalf-Of delegated identity middleware, template autocomplete, and in-thread progress feedback.
  • /scion send enhancements: File retrieval from the shared scratchpad by absolute path or partial-name search with button picker and symlink traversal protection. Container-to-host path translation added so agent container paths resolve correctly, with configurable send_search_root.
  • System message category: New type:system messages for hub-generated operational notices (delivery-failed, scheduler, port-forward), with rendering support across all chat integrations.
  • @mention parsing and –cc flag: Multi-recipient notification fan-out via @mention parsing in message bodies and a new --cc flag.
  • Build version display: /help command output now shows build version and git commit hash via build-time ldflags injection across Discord and Telegram.
  • Agent status icon corrections: Stopped, errored, and crashed agents now display correct phase-specific icons instead of a generic play icon.
  • Thread parent cache fix: Transient Discord API errors no longer permanently block thread parent lookups; threadParentID() now distinguishes confirmed results from failures.
  • IAP transport inheritance: longHTTPClient inherits IAP transport, fixing 401 errors on IAP-protected deployments for long-running operations like CreateAgent.
  • Inbound attachment downloads: Configurable downloads_path for inbound attachments in isolated workspace modes.
  • Shoelace dialog migration: All 39 native alert() calls and 23 confirm() calls across 22 files replaced with shared Shoelace-based showToast() and showConfirm() components.
  • Quick-message buttons: One-click message modal for agents in detail, list, and graph views — Enter sends, Shift+Enter for newline — capability-gated via existing message check.
  • Restructured server-config: General tab split into three cards (General, Agent Defaults with sub-tabs, Project Default Settings). Message Broker moved to Hub Server tab; Telemetry toggle moved to Agent Defaults.
  • Terminal shortcut on graph cards: Icon-only connect-to-terminal button in graph view, gated by attach capability and disabled for offline agents.
  • Agent list improvements: lastActivityEvent shown instead of heartbeat time; harness config dropdown sorted alphabetically; label-filter control added to project-level agent list.
  • Skill URI handling: Web skill picker now generates canonical skill://scion/<slug> URIs; long URIs middle-truncated to preserve the identifying skill name, with full URI on hover.
  • GCP telemetry settings: GCP Project ID and Cloud Logging configuration added to admin telemetry UI.
  • Graph view polish: Text selection prevented during drag-to-pan; graph-view toggle removed from the projects list page (where it was meaningless).
  • Agent port forwarding: Agents can expose local HTTP ports through the Hub as authenticated, reverse-proxied URLs. Auto-expose package scans /proc/net/tcp{,6} with diff-based reconciliation on configurable ticker; auto_expose_ports wired through admin settings API. HTML error pages returned for browser requests to unexposed ports.
  • scion resume --force: Recover crashed agents from the error phase with in-place restart and harness resume flag, so interrupted sessions continue rather than starting fresh.
  • Message attachments through scratchpad: Attachment delivery now routes through the scratchpad shared volume, fixing silent delivery failure in isolated workspace modes.
  • Scheduler concurrency: Configurable scheduler interval and per-task concurrency (max_concurrency, default 2) with jitter before semaphore acquire to avoid thundering-herd. Fixes DB connection pool saturation on small deployments.
  • Scratchpad auto-provisioning: New projects automatically receive a default scratchpad shared directory via project_defaults.default_scratchpad toggle (default: ON).
  • Claude harness model alias resolution: provision.py now resolves model aliases using harness config model_aliases with SCION_MODEL env var fallback.
  • Chown root-owned files: Provisioner-created root-owned files chowned after provisioning to prevent undeletable agents.
  • Runtime error propagation: ImageExists now propagates errors from daemon-unreachable instead of returning (false, nil). Detected runtime used for broker heartbeat instead of hardcoding container.
  • Image registry validation: image_registry validated before starting runtime broker — fails fast with an actionable error instead of causing opaque image-pull 404s.
  • Broker message rejection: Inbound messages to non-running agents rejected with 409 instead of being silently swallowed. Non-existent agent messages on Discord now show an error.
  • Mention metadata preservation: CC’d agents correctly see primary recipients in delivery messages; group message type set to group-set instead of instruction.
  • SA verification honesty: Returns 503 when verifying service account without token generator instead of false Verified=true.
  • Config cleanup: project_id written instead of legacy grove_id; Content-Type checked before falling back to legacy grove endpoint to fix spurious deprecation warnings; schema_version advisory warning for settings files.
  • Hub maintenance guard: Concurrent maintenance operations rejected with 409 Conflict, preventing go build pile-up that caused the July 28 outage.
  • A2A Protocol Bridge documentation: Consolidated and revamped A2A bridge documentation.
  • Multi-GitHub credential guide: Naming convention, normalization rules, setup examples, credential resolution order, and injection mode semantics.
  • Shared directory patterns: Common patterns for project shared directories — build caches, producer/consumer artifacts, shared knowledge base, file-based coordination.
  • Agent lifecycle corrections: Fixed false safety guarantee (“committed” is not “pushed”), clarified --preserve-branch behavior, replaced “broker slots” with “system resources.”
  • Skill documentation updates: Messaging skill (2000-rune limit, inbound type discrimination, --notify deprecation), agent management (troubleshooting triage table, recovery sections), scheduler (whoami recipe for self-scheduling agents).