What's New

Recent additions to Hue — new services, skills, agents, and infrastructure.

April 25, 2026

v2 P0 complete — reliability, search quality, ranking signals
  • status.health now surfaces circuit breaker state — returns circuitBreakers[] with per-upstream state (closed/open/half_open), consecutive failures, last error, cooldown remaining. Reports 'degraded' when any breaker is tripped.
  • Graceful degradation sweep — all external-API skills upgraded from Errors.internal() to Errors.upstreamUnavailable() with structured messages. Congress (8 skills, 12 error sites), Regulations.gov, CourtListener, Bluesky all throw actionable errors with fallback portal URLs.
  • Fallback portal URLs added — Regulations.gov (regulations.gov), Congress.gov (congress.gov + hearings portal), CourtListener (courtlistener.com). Joins existing FARA, GDELT/Google News, and 50-state lobbying portals.
  • External API monitoring cron — background monitor pings all 9 endpoints every ~15 minutes. Results logged to api_health_checks table. Transition-based email alerts when an endpoint goes from healthy to down.
  • New status.apiHistory skill — query uptime %, average latency, downtime minutes, and check history per endpoint over configurable time windows (1–168 hours).
  • Auto-index body quality rewritten — extractTextBody() pulls description, text, body, content, summary, message, and 8 other text fields from skill output objects. Falls back to flat scalar key:value pairs. No more raw JSON.stringify() in the search index.
  • search.reindex fixed — was referencing non-existent search_vector column (should be search_tsv), causing silent failure on every reindex. Also removed incorrect ::text cast on the tsvector update.
  • Three ranking signals added to search.query — recency boost (linear decay over 1 year, floor 0.3x), space-scoping boost (1.15x for caller's own space vs ancestors), edge-count boost (+2% per graph edge, capped at 1.2x via LEFT JOIN to edges table).
  • Test suite fixed — 35 previously-broken tests across 13 plugin test files repaired: dependency stubs for registration tests, mock updates for changed error types, assertion alignment for refactored APIs.
  • Pin-warming hooks for 5 plugins — FEC (candidate→office, candidate→committee), OpenStates (bill→sponsor/cosponsor), Senate-LDA (filing→registrant/client), FARA (registrant→principal), Asana (task→assignee/project). All fire on spaces.pinned and tear down on spaces.unpinned.
  • Cortex soft-defaults on 9 skills — fec.listCommittees, fec.listContributions, fec.listIndependentExpenditures, congress.listCosponsors, state-lobby.search, social-listen.search, reddit.search, polling.search all fall back to pinned refs when the caller omits the entity filter.
  • Test coverage expanded — google (9 tests), courts (21, was 1), fb-business (28, was 2). 753 total tests passing.
  • Security hardening — JWT session maxAge 8 hours (was unbounded), CORS explicit allowlist (j.a-gnt.com + a-gnt.com only), HSTS + X-Content-Type-Options + X-Frame-Options + Referrer-Policy on every response, PII scrub namespace list auto-derived from plugin registry (was hardcoded 5 plugins). Server: .env permissions 664→600, AIDE cron --config fix, postfix loopback-only, port 3011 UFW rule.
  • nodemailer CVE patched — upgraded 7.0.13 → 8.0.6, resolving SMTP command injection (GHSA-c7w3, GHSA-vvjj). Real risk was low (sendmail transport to local postfix), but the CVE is now closed.
  • Streaming skills (j-0013) — executeSkillStream() AsyncGenerator in execute.ts with full auth/permission/scope/budget/audit pipeline. REST SSE surface at /api/rest/{plugin}/{skill}/stream (text/event-stream, one frame per chunk). MCP buffers deltas and returns final payload. llm.complete is the reference streaming port: yields delta chunks from the Anthropic Messages API SSE stream.
  • pgvector embeddings (j-0023) — embedding vector(1536) column on search_index with HNSW cosine index. Lightweight embed() facade (OPENAI_API_KEY gated, returns null when absent). search.query uses vector cosine when embeddings exist, falls back to TF-IDF when they don't. search.reindex backfills embeddings in batches of 100.
  • BYO data ingest (j-0017) — new ingest plugin with CSV and markdown parsers. upload skill parses files into chunks, indexes each via search engine with SHA-256 dedup. list and remove skills for audit and purge. ingest_sources table tracks uploads per workspace.
  • Performance measurement harness (j-0035) — monitor.measureSkillOverhead skill benchmarks framework overhead (p50/p95/p99) on any skill. scripts/bench-skills.ts CLI saves JSON baselines to .j/benchmarks/. npm run bench:skills.
  • Teach Hue audit — 16 submissions marked accepted (hearings, social-listen, fara, regulations, polling, courts, proactive monitoring, graph density, cortex defaults, drive import, google dashboard, footer, humans UX, duplicate tabs). 3 idea tasks moved to done. 778 total tests, 106 files, all passing.

April 24, 2026

Enterprise audit, graph-brain infrastructure, 4 new plugins, Drive pipeline
  • Enterprise audit (j-0041) — 6-phase sweep across 50k+ LOC. Parallelized executeSkill hot path (Promise.all on quota + PII gates), DB pool 10→30, OAuth tokenPrefix for O(1) lookups, capped skill-cache at 1000 entries with LRU, batched audit stream under single advisory lock.
  • Dead code removal — 13 files + 3 empty plugin scaffolds deleted, 33 dead functions removed, 18 unused exports stripped. ~1,500 net lines deleted.
  • Duplicate consolidation — 5 path-walker copies → 1 getByPath, 5 plugin context schemas → 1 skillContextSchema (55 files), raw OpenAI embedding → ctx.callSkill('llm.embed'), rate-limit tiers → single config object.
  • UI quality — slash-menu split 884→417 (4 files), service-table 733→476 (useServicePins hook), editor 520→343 (markdown-convert.ts + Tiptap CSS). Humans page → server component. React.memo on 3 leaf components.
  • types.ts 802-line monolith → barrel directory (6 files). logger.ts → audit-chain.ts rename. 25 new tests (wordpress + senate-lda).
  • Google scope picker restored + Drive scope. drive.importFile, drive.importBatch, drive.download (raw base64 — LLM reads PDFs natively), drive.resolveLinks (CSV → Drive URLs → base64 files).
  • Office doc extraction — .docx/.xlsx/.pptx via ZIP XML (yauzl). No new deps.
  • Multi-source news — Google News RSS + Hacker News + BBC/NPR/Reuters in parallel alongside GDELT. Zero API keys. Media discoverable as news/headlines/media.
  • Auto-index — every skill with a `reference` block auto-indexes output into search. 50+ plugins searchable for free.
  • Access-gated cascading search — search.query walks ancestor spaces, filtered by caller's checkAccess. Children inherit the brain safely.
  • j-0026 tenant-db — getTenantDb() returns Drizzle client scoped via SET LOCAL search_path. ctx.tenantDb wired in executeSkill. Schema mirror on promote.
  • Orient compressed 15 essays → 10 lines (~90% fewer tokens). Breadcrumb directive: detective's board with string.
  • Cortex auto-curation (j-0039) — spaces.suggestArchives surfaces stale/unreferenced pins. lastAccessedAt tracked lazily.
  • Secrets hardening (j-0040) — KEY_PREFIX_PATTERNS 23→38, 5 new RESERVED_BYO_KEYS, spaces.staleCredentials for rotation alerts.
  • Bluesky social-listen plugin — 4 skills: search, trackAccount, getProfile, describe. Free AT Protocol, no auth. 20 tests.
  • Reddit plugin — 4 skills: search, hot, getPost, describe. Free JSON API, no auth. 19 tests.
  • Hearings plugin — 3 skills: search congressional hearings by committee/date/keyword, get hearing detail with witnesses/testimony/bills, describe. Uses existing congress.gov API key. 8 tests.
  • FARA plugin — 5 skills: search foreign agent registrations, get registrant detail, listActivities (lobbying contacts), listPrincipals (foreign governments), describe. Free efile.fara.gov API. 13 tests.
  • Regulations plugin — 4 skills: search Regulations.gov dockets, getDocument (comment period dates/abstract), listComments (public comments on a docket), describe. BYO-key via api.data.gov. 6 tests.
  • Courts plugin — 4 skills: search opinions + RECAP docket entries, getDocket (parties/judges/entries), getOpinion (full text/citations/panel), describe. BYO-key via CourtListener. 1 test.
  • Polling plugin — 3 skills: search FiveThirtyEight polls by state/race/candidate, getRace (grade-weighted averages + margin), describe. Free public CSVs, in-memory 1h cache. 10 tests.
  • API health monitoring — status.externalApis pings 9 external endpoints in parallel, classifies as up/slow/down/auth_required with latency. 390 total skills.
  • Graceful degradation — FARA throws clear fallback to web.fetch portal URL when unreachable. CourtListener timeout 8→15s. GDELT silently falls back to Google News. Reddit/Regulations error messages include signup URLs.
  • Bluesky deep search — auto-paginates via cursor up to 500 posts (5 pages). Default 100, was 25.
  • 5 demo scripts on /docs/prompts — replicable prompt sequences showing cross-service intelligence chains.

April 24, 2026 (early)

UI framework primitives, component splits, Teach Hue rename
  • Select atom — shared <Select> component replaces ~15 raw <select> elements with identical styling across the app.
  • TabStrip molecule — semantic tab navigation (role=tablist, aria-selected) replaces duplicated tab markup in space detail and workflow editor.
  • getByPath utility — shared dot-path resolver deduped from slash-menu, service-table, and aggregate search.
  • workflow-editor split — 1265→684 lines. Filter editor, trigger card, and shared types extracted to dedicated files.
  • space-services split — 807→436 lines. Window helpers (description editor, create sub-space, generic create/viewer) and archived spaces panel extracted.
  • window-manager split — 802→664 lines. Shared WindowTitleBar dedupes desktop/mobile title bars. Taskbar and Expose view extracted.
  • Teach page renamed from 'Teach j' to 'Teach Hue' — title, description, and form placeholder.
  • Issues plugin removed — policy topics are now tracked via the cortex (pin), threads (research), and tags (status/category) triangle. No dedicated issue tracker needed.
  • Redis 7.0 cache layer — skill output caching (stale-while-revalidate), space stat columns, async audit stream worker. In-memory fallback when Redis is unavailable.
  • Humans tab — DashboardPanel-style add/revoke/permissions UI replaced by uniform ServiceTable with grant-access CreateWindow and per-human access editor ViewerWindow. Tags and cortex columns suppressed.
  • Disabled services hidden from space tabs — isServiceEnabled check filters out services toggled off for a space.
  • Footer consolidated — five columns collapsed to two (App + Docs). Single links to section landing pages.
  • Global Tags page removed from main nav — tags live on space tabs only.
  • Spaces table simplified — name-only column, removed stat count infrastructure (Redis overlay, SQL subqueries, reportCard-driven columns).

April 23, 2026

Media, roll-call votes, notifications, WordPress, Google dashboard cleanup
  • Media plugin — GDELT-backed news search, trending headlines, and full article fetch. Free, no API key. Every news article is a media.article ref you can pin, tag, and mention in threads.
  • Roll-call votes — congress.listVotes (by chamber), congress.getVote (full member-level breakdown), congress.memberVotes (one legislator's voting record). Parses House clerk and Senate XML directly.
  • Notifications plugin — SendGrid email delivery for alerts, reports, and stakeholder updates. dryRun:true default. Wire into workflows for automated alerts.
  • WordPress plugin — connect multiple WordPress sites per space. List/get/create/update posts and pages. Block content, categories, tags, featured media.
  • Federal Lobbying (senate-lda) search fix — was ignoring query text. Now correctly filters by client_name and registrant_name.
  • Space tabs now recognize search skills as list skills — Federal Lobbying, Media, Lobbying, and other search-primary plugins render in ServiceTable.
  • GA4 Admin write skills — ga.createEvent (natural language → GA4 event config), ga.markConversion (toggle any event as a conversion), ga.createAudience, ga.listEvents, ga.listAudiences. All writes dryRun:true default. OAuth scope expanded to analytics.edit.
  • Google Tag Manager plugin — 12 skills: list accounts/containers/tags/triggers, create tags (place pixels without touching code), create triggers, publish container versions. Same Google OAuth. The full loop: ga.createEvent → gtm.createTag → fb-business.createCustomAudience in one conversation.
  • Meta custom audience creation — fb-business.createCustomAudience (pixel retargeting with readable URL/event rules), fb-business.createLookalike (source audience + ratio + country), fb-business.deleteCustomAudience. All dryRun:true.
  • Onboarding agent — walks new operators through space setup: connecting services (step-by-step credential instructions for every service), seeding the graph with initial entities, pinning key refs to the cortex, tagging with status and category. Empty space → navigable in one session.
  • Connection guide at /docs/connect — every connectable service with what you need, step-by-step setup instructions, and what it unlocks. Organized by effort level.
  • Forgot password now sends reset email via SendGrid (was only console.warn). Fixed NEXTAUTH_URL to https://j.a-gnt.com.
  • Orient directives: accumulate intelligence (cortex pins, websites, cross-service connections, entities, threads), relationship capture (meetings/calls → threads as CRM), cross-service synthesis (campaign→audience→CRO chains), data fallback (web.fetch portal URLs when APIs unavailable).
  • State lobbying: fallback portal URLs for all 50 states — when API returns nothing, _context.nextSteps includes the state's lobbying portal URL for web.fetch.
  • Google dashboard cleanup — replaced the 3-step connector wizard (connect → select resources → load data) with a clean inline DashboardPanel. One tab each for Analytics (55 properties auto-loaded), Search Console, and Tag Manager. Connection via PluginConnectButton in the chrome. ~100 lines replaces ~1,700 across three files.
  • Tag Manager now visible on the Google tab — accounts and containers load automatically. Was hidden with no UI surface.
  • PII redaction bypass for all Google services — skipPiiRedaction on every GA/GSC/GTM/Drive skill. Property names, campaign names, site URLs, and container IDs were being incorrectly scrubbed by the heuristic PII regex.
  • Google Drive plugin — 4 skills: listFiles (search + folder filter + pagination), getFile (metadata), exportText (Google Docs/Sheets/Slides as text, text files direct download, 200K char limit). Surfaces on the Google tab as a fourth sub-tab. Uses shared Google OAuth with drive.readonly scope.

April 22, 2026

Cortex-first policy tracking, influence agents, web fetch, Asana writes, scaling
  • Cortex-first policy tracking — pin any reference (bill, legislator, district, topic) to a space's cortex. Write threads to capture research. Tag with status and category. The cortex + threads + tags triangle replaces dedicated issue trackers.
  • Influence Mapper agent — 5-phase research loop: scope the issue, map the legislative landscape, follow the money, map influence pathways (direct lobbying, grasstops, grassroots, media, coalition), capture and recommend.
  • Vote Count Wargame agent — scores uncommitted legislators on 5 weighted dimensions (donor alignment 25%, district fit 25%, past votes 20%, network access 15%, lobby pressure 15%).
  • Reach Estimator agent — models digital and grassroots ROI before spending. Pulls historical CPM/CPC from past campaigns, sizes audiences, overlays email and advocacy infrastructure.
  • Power Map agent — maps allied vs opposition forces, spend, grassroots footprint, vulnerability scan for double-dipping donors, coalition gaps.
  • Scenario Planner agent — generates 3 strategies, costs each from real data, compares side by side, recommends cheapest path to needed votes.
  • Client Intel agent (Asana) — parse pasted emails/messages, extract every entity, search Asana exhaustively, cross-reference with web.fetch, capture findings as threads.
  • Web fetch skill — fetch any URL as clean markdown + optional headless browser screenshot. Reference type web.page for pinning/tagging/mentioning.
  • Asana write skills — createTask, updateTask, addComment (all dryRun:true default). listUsers for name→gid resolution. list-projects pagination fix.
  • audiences.searchJobTitles — resolves job title text to StatSocial IDs, unblocking B2B audience creation.
  • Ad == Campaign — wired 'ad' as synonym across fb-business skill descriptions.
  • spaces.capabilities — grounded answer to 'what can you do?' with connection status, cortex, scope per service.
  • Federal Lobbying (senate-lda) — 4 skills hitting the Senate LDA API: search filings, get filing detail, search registrants, search clients.
  • State lobbying expanded — 2→6 states (NY, WA, CO, CT, IL, MD) + federal LDA via lda.gov + fallback portal URLs for all 50 states.
  • 2 pm2 workers behind nginx least_conn upstream. PgBouncer transaction pooling (500 clients → 30 pg connections).
  • Rate limiter switched from Postgres to in-memory — eliminated pool exhaustion cascade.
  • Space page fan-out reduced from ~43 to ~14 concurrent calls (batched dashboard, lazy tags, deduped audit).
  • Prompts page at /docs/prompts — 468 sample prompts with skill citations across 24 categories.
  • Orient directives: accumulate intelligence, relationship capture, web browsing, data fallback, space anchor, voice discipline.

April 21, 2026

Audiences, Hootsuite, state lobbying, creative previews
  • StatSocial audience creation — full parameter coverage for B2B and consumer audiences.
  • Audience search skills — searchLocations, searchAffinities, searchEmployers for resolving IDs before audience creation.
  • Hootsuite plugin — social profiles, scheduled/sent posts, message comments. Read-only publishing history.
  • Cross-channel analyst agent — multi-platform campaign analysis across Meta, Campaign Monitor, Hootsuite.
  • Meta Business ad preview — full-size creative images and rendered ad previews.
  • State lobbying (state-lobby) plugin — NY and WA Socrata datasets with normalized output.
  • Files plugin — encrypted blob storage with upload, download, list, delete.
  • Copilot Studio integration — MCP SSE endpoint for Microsoft Power Platform.

April 20, 2026

Graph, entities, nonprofits, OpenSecrets, OAuth
  • ProPublica nonprofit plugin — search and retrieve 990 tax filings, board composition, revenue history.
  • OpenSecrets plugin — candidate contribution summaries, top organizational donors.
  • Orient cross-provider entity pairs — explicit instructions for binding congress.member ↔ fec.candidate ↔ opensecrets.legislator.
  • OAuth client management — superadmin CRUD for OAuth clients (list, issue, rotate, revoke).
  • Service table pin hydration — rate-limit-friendly parallel fetching for cortex-pinned rows.