Develops and operates the Nexus research cockpit: FastAPI + TinyFish live agent, Redis streams/pub-sub, WunderGraph Cosmo GraphQL subscriptions, React D3 graph. Use when editing Nexus, sessions, tinyfish_runner, discovery, final report, normalization, embeddings, or graph UI.
npx @senso-ai/shipables install OnkarBedekar/nexusbackend/ FastAPI. Agent loop: backend/app/tinyfish_runner.py (run_agent_for_session, run_live_agent, two-phase _run_two_phase_live).backend/app/redis_client.py — sessions, papers, streams, crawl logs, timeline, run incidents (append_run_incident / read_run_incidents).router/subgraphs/research.graphql.frontend/ Vite + React; force graph src/components/graph/ForceGraph.tsx.POST /sessions in backend/app/routers/sessions.py — seedUrl optional; default seed for topic substring "ai chip supply chain" is configured there and in frontend/src/components/HomeLanding.tsx.discover_web_urls (backend/app/discovery.py). Search hits exclude built-in hosts (e.g. deloitte.wsj.com, bain.com) and DISCOVERY_EXCLUDE_HOSTS (comma-separated). The session seed is prepended to the discovered URL list (deduped) so extraction starts from the chosen page first.seedUrl.GET /sessions/{id}/final-report builds from read_session_papers (canonical papers in Redis), not raw graph text.COMPLETE, empty/blocked outcomes append to Redis incidents; emptyReason and markdown ## Extraction issues reflect them. Modal shows full markdown when empty.normalize_paper_record in backend/app/normalization.py must treat keyFindings (and references/citedBy) as a string vs list via _coerce_flexible_string_list — never iterate a string per-character into list fields.paper_to_entity_claims in backend/app/parsers.py repairs legacy single-character keyFindings lists for UI “Findings”.backend/app/context_engine.py; index_context_document runs from upsert_canonical_paper after a paper exists. Requires EMBEDDING_API_KEY, REDIS_VECTOR_ENABLED, Redis Stack, and EMBEDDING_DIMENSION matching the embedding model. No stored papers ⇒ no vectors.frontend/src/components/graph/ForceGraph.tsx: forceLink uses fixed distance(80) and strength(0.4); links are visually directed (markerEnd arrow) but physics is symmetric between endpoints.npx @senso-ai/shipables publish, set author.github in shipables.json to your GitHub username (must match Sign in with GitHub). On each release, bump version in shipables.json and metadata.version in this file’s YAML frontmatter together so they stay aligned.codeables.dev — it is always https://codeables.dev/skills/<author.github>/nexus from shipables.json (must match your GitHub username exactly, including case). Do not use a different slug than the CLI prints or you will get 404.npx @senso-ai/shipables install <author.github>/nexus --cursor (add -y to skip prompts). With a global CLI shim, shipables install <author.github>/nexus --cursor is equivalent.cd backend && python3 -m pytest so imports resolve against backend/app..env: never commit secrets; document new env vars in code (Settings) when adding config.