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.