{"slug": "show-hn-a-agentic-nervous-system-for-all-devops-tools", "title": "Show HN: A agentic nervous system for all DevOps tools", "summary": "Anway, an open-source platform that connects DevOps tools like GitHub, Datadog, and Kubernetes into a single intelligence surface, launched in beta. The platform allows teams to query and act across the entire software lifecycle through one orchestrator, with connectors that add intelligence for the whole organization. Anway is available on GitHub under the anway-dev organization.", "body_md": "**The central nervous system of a software organisation.** *Beta — actively developed; APIs and schemas may change.*\n\nConnects GitHub, Datadog, Linear, K8s, Loki, Prometheus, Jira, ArgoCD, PagerDuty, Terraform, and any cloud provider into a single intelligence surface. Every person in the org — SRE, PM, BA, Dev — queries, acts, and governs the entire software lifecycle through one orchestrator.\n\nNot a devtool. The connective tissue between Product, Eng and SRE.Every connector added = more intelligence for the entire org. Ask once, see everything across every tool, act with confidence behind a governed write path.\n\n**🌐 Website:** [www.anway.dev](https://www.anway.dev) · **🎬 Demo:** watch the 90-second walkthrough below.\n\n[https://github.com/anway-dev/anway/releases/download/v0.1.0-beta/anway-demo.mp4](https://github.com/anway-dev/anway/releases/download/v0.1.0-beta/anway-demo.mp4)\n\nIf the player above doesn't load,\n\n[— or click the thumbnail:]▶ watch the 90-second demo on anway.dev\n\nA signal fires → ask once → agents trace the root cause across every tool → gated action, then a tour of services, pipelines, connectors and the audit trail.\n\nAnway is split across repositories under the [ anway-dev](https://github.com/anway-dev) org:\n\n| Repo | What it is |\n|---|---|\n(this repo)\n|\nThe platform — web UI, gateway, agent harness, agent-service, CLI, connectors, and infra. |\n|\nCloud / e2e test environment — Terraform, k8s manifests, runners, service defs. |\n\nThe product demo video and its capture harness live in this repo under\n[ apps/web/demo/](/anway-dev/anway/blob/main/apps/web/demo).\n\n[Architecture](#architecture)[Prerequisites](#prerequisites)[Local Development](#local-development)[Demo Mode](#demo-mode)[Configuration Reference](#configuration-reference)[Running Tests](#running-tests)[Production Deployment](#production-deployment)[Troubleshooting](#troubleshooting)\n\n```\napps/\n  web/           Next.js UI (port 3000)\n  gateway/       Fastify BFF — auth, RBAC, audit, connector proxy (port 4000)\n  agent-service/ Python FastAPI — LLM inference, episodic graph (port 8000)\n  cli/           anway CLI\n\npackages/\n  agent/         Orchestrator harness, specialist agents, IModelProvider\n  k8s/           Cluster client\n  ui/            Shared components\n  types/         Shared TypeScript types\n\ninfra/\n  docker-compose.yml      Dev dependencies (Postgres, Redis, Neo4j)\n  docker-compose.dev.yml  Extended dev stack (Prometheus, Grafana, OTEL)\n  helm/anway/             Production Helm chart\n  terraform/              AWS / GCP / Azure Terraform modules\n```\n\n**Storage:**\n\n| Layer | Technology |\n|---|---|\n| Primary DB | PostgreSQL 16 + pgvector + Apache AGE |\n| Session memory | Redis (TTL = session lifetime) |\n| Episodic graph | Neo4j 5 (via Graphiti library) |\n| Job queue | BullMQ (Redis-backed) |\n| SSE fan-out | Redis Pub/Sub |\n\n| Dependency | Min version | Notes |\n|---|---|---|\n| Node.js | 20 LTS | |\n| pnpm | 9 | `npm i -g pnpm` |\n| Docker + Compose | 24 | For local infra |\n| Python | 3.11 | Only if running agent-service locally |\n\n```\ngit clone <repo>\ncd anway\npnpm install\ndocker compose -f infra/docker-compose.yml up -d\n```\n\nThis starts: Postgres (5432), Redis (6379), Neo4j (7474/7687).\n\nVerify:\n\n```\ndocker compose -f infra/docker-compose.yml ps\n```\n\nAll services should show `healthy`\n\n.\n\n```\ncp apps/gateway/.env.example apps/gateway/.env\n```\n\nThe defaults work out of the box for local dev. The only value you may want to set immediately:\n\n```\n# Pick any one LLM provider\nANTHROPIC_API_KEY=sk-ant-...\n# or\nOPENAI_API_KEY=sk-...\n# or leave both blank — runs Ollama locally if installed\n```\n\nIf no LLM key is set, the chat endpoint returns `{ error: \"No LLM provider configured\", code: \"NO_PROVIDER\" }`\n\nwith status 200 and the UI shows an inline prompt to configure one. No crash.\n\n```\ncd apps/gateway\npnpm prisma migrate deploy\npnpm prisma db seed          # populates demo tenant with 22 services, alerts, incidents, pipelines\ncd ../..\n```\n\nThe seed is idempotent — safe to re-run.\n\nTwo terminals:\n\n```\n# Terminal 1 — gateway (http://localhost:4000)\ncd apps/gateway && pnpm dev\n\n# Terminal 2 — web UI (http://localhost:3000)\ncd apps/web && pnpm dev\n```\n\nOpen [http://localhost:3000](http://localhost:3000).\n\nDemo mode provisions a single pre-seeded tenant and lets anyone log in without credentials. Intended for live demos and internal reviews — never enable in production.\n\n```\n# apps/gateway/.env\nDEMO_MODE=true\ncurl -X POST http://localhost:4000/api/auth/demo\n# → { \"token\": \"<jwt>\", \"expiresIn\": \"24h\" }\n```\n\nThe web UI shows a **Try Demo** button on the login page when `DEMO_MODE=true`\n\n.\n\nThe demo tenant (ID `00000000-0000-0000-0000-000000000001`\n\n) is populated by the seed script with:\n\n- 22 services across 3 environments (staging / preprod / prod)\n- 5 namespaces\n- 10+ alerts (mix of severities)\n- 10+ incidents (mix of active / resolved)\n- 10+ deploys\n- 3 pipelines with stage runs and gate events\n\n**Required for production:**\n\n| Variable | Example | Purpose |\n|---|---|---|\n`DATABASE_URL` |\n`postgresql://anway:pass@host:5432/anway` |\nPostgres connection |\n`JWT_SECRET` |\n64 random chars | HS256 signing secret (dev only) |\n`JWT_PRIVATE_KEY` |\nRSA PEM | RS256 private key (production — use instead of JWT_SECRET) |\n`JWT_PUBLIC_KEY` |\nRSA PEM | RS256 public key |\n`REDIS_URL` |\n`redis://host:6379` |\nRedis connection |\n\n**LLM provider (one required for chat):**\n\n| Variable | Notes |\n|---|---|\n`ANTHROPIC_API_KEY` |\nClaude — recommended |\n`OPENAI_API_KEY` |\nGPT-4o |\n`GROQ_API_KEY` |\nGroq (fast, cheap) |\n`MISTRAL_API_KEY` |\nMistral |\n`OLLAMA_ENDPOINT` |\nLocal Ollama — default `http://localhost:11434/v1` |\n`OPENAI_BASE_URL` + key |\nAny OpenAI-compatible endpoint |\n\n**Optional services:**\n\n| Variable | Default | Purpose |\n|---|---|---|\n`DEMO_MODE` |\n`false` |\nEnable demo login endpoint |\n`SENTRY_DSN` |\n— | Error tracking |\n`OTEL_EXPORTER_OTLP_ENDPOINT` |\n— | Traces (OTEL collector) |\n`NEO4J_URI` |\n— | Episodic graph (agent-service) |\n`NEO4J_USER` / `NEO4J_PASSWORD` |\n— | Neo4j credentials |\n`OIDC_ISSUER_URL` |\n— | SSO via OIDC (Azure AD, Dex, Okta) |\n`OIDC_CLIENT_ID` / `OIDC_CLIENT_SECRET` |\n— | OIDC app credentials |\n`SLACK_SIGNING_SECRET` |\n— | ChatOps slash commands |\n`GITHUB_WEBHOOK_SECRET` |\n— | Webhook HMAC verification |\n`DD_WEBHOOK_SECRET` |\n— | Datadog webhook HMAC |\n`ANWAY_WEBHOOK_TOKEN` |\n— | Static bearer token for Alertmanager / CI |\n`ALLOW_DEV_TOKEN` |\n`false` |\nAccept `dev-token` header (e2e tests only) |\n\n**Connector API keys:**\n\n```\n# Format: name:tenantId,name2:tenantId2\nCONNECTOR_API_KEYS=e2e-key:00000000-0000-0000-0000-000000000001\nGATEWAY_URL=http://127.0.0.1:4000   # gateway base URL (server-side only)\n```\n\nAll other config (LLM keys, connector tokens) lives in the gateway — never in the web app.\n\n```\ncd apps/gateway && npx tsc --noEmit\ncd apps/web && npx tsc --noEmit\n```\n\nBoth must return 0 errors before any merge.\n\n```\npnpm test              # run all workspace tests\ncd apps/gateway && pnpm test   # gateway only\n```\n\nRequires the full stack running (gateway + web + infra):\n\n```\n# Start infra + app first (see Local Development above)\n# Then:\ncd apps/web && pnpm exec playwright test\n\n# Run a specific spec:\npnpm exec playwright test e2e/99-certification.spec.ts\n```\n\nThe certification spec (`99-certification.spec.ts`\n\n) is the gate — it verifies all 37 acceptance criteria across every wave.\n\n```\n# Build images\ndocker build -t anway-gateway:latest apps/gateway\ndocker build -t anway-web:latest apps/web\n\n# Configure\ncp apps/gateway/.env.example apps/gateway/.env.prod\n# Edit apps/gateway/.env.prod — set DATABASE_URL, REDIS_URL, JWT_PRIVATE_KEY, etc.\n\n# Start\ndocker compose -f infra/docker-compose.yml \\\n               -f infra/prod/docker-compose.override.yml \\\n               up -d\n```\n\nThe Helm chart at `infra/helm/anway/`\n\nincludes: gateway deployment, web deployment, HPA (2–10 pods, CPU 70%), PDB (minAvailable: 1), NetworkPolicy, Ingress (nginx), ServiceAccount with IRSA annotations.\n\n```\n# 1. Create namespace\nkubectl create namespace anway\n\n# 2. Create secrets\nkubectl create secret generic anway-secrets \\\n  --namespace anway \\\n  --from-literal=database-url=\"postgresql://...\" \\\n  --from-literal=redis-url=\"redis://...\" \\\n  --from-literal=jwt-private-key=\"$(cat jwt.key)\" \\\n  --from-literal=jwt-public-key=\"$(cat jwt.key.pub)\"\n\n# 3. Install chart\nhelm install anway infra/helm/anway \\\n  --namespace anway \\\n  --set gateway.image.tag=<version> \\\n  --set web.image.tag=<version> \\\n  --set ingress.host=anway.yourdomain.com\n\n# 4. Run migrations (Job)\nkubectl apply -f infra/k8s/migrate-job.yaml -n anway\ncd infra/terraform/environments/aws\n\n# Configure\ncp terraform.tfvars.example terraform.tfvars\n# Edit: aws_region, cluster_name, db_password, etc.\n\nterraform init\nterraform plan\nterraform apply\n```\n\nThis provisions: EKS cluster, RDS PostgreSQL (Multi-AZ in prod), ElastiCache Redis, ECR repositories, IAM roles (IRSA), S3 bucket for TF state. GCP (`environments/gcp`\n\n) and Azure (`environments/azure`\n\n) modules follow the same pattern.\n\n```\n[ ] DATABASE_URL + REDIS_URL reachable from pods\n[ ] JWT_PRIVATE_KEY + JWT_PUBLIC_KEY set (RS256, not HS256 secret)\n[ ] DEMO_MODE absent or set to false\n[ ] ALLOW_DEV_TOKEN absent (never set in prod)\n[ ] Postgres migrations applied (prisma migrate deploy)\n[ ] Seed run if using demo tenant\n[ ] Health check responding: GET /health/live → 200, GET /health/ready → 200\n[ ] SENTRY_DSN configured for error tracking\n[ ] OTEL collector reachable if telemetry required\n[ ] Connector API keys rotated from dev defaults\n[ ] ANWAY_WEBHOOK_TOKEN set and matches alertmanager/CI config\n[ ] RDS automated backups enabled (Terraform does this automatically)\n```\n\n| Endpoint | Purpose |\n|---|---|\n`GET /health/live` |\nLiveness — always returns 200 if process is up |\n`GET /health/ready` |\nReadiness — checks Postgres + Redis connectivity |\n\nConfigure Kubernetes probes to use `/health/ready`\n\n.\n\n| Role | Capabilities |\n|---|---|\n`admin` |\nAll operations |\n`sre` |\nApprove gates, create incidents, trigger deploys |\n`dev` |\nCreate pipelines, run stages on non-prod envs |\n`pm` / `ba` |\nRead only |\n\nRoles are set at user provisioning time via the Access view or API.\n\nAnway supports any OIDC-compliant provider (Azure AD, Okta, Google Workspace, Keycloak, Dex).\n\n```\nOIDC_ISSUER_URL=https://login.microsoftonline.com/<tenant>/v2.0\nOIDC_CLIENT_ID=<app-id>\nOIDC_CLIENT_SECRET=<secret>\nOIDC_REDIRECT_URI=https://anway.yourdomain.com/auth/oidc/callback\nOIDC_TENANT_ID=<anway-tenant-uuid>\n```\n\nFor local testing, the demo compose stack includes Dex (`infra/demo/dex/`\n\n) as a mock OIDC provider.\n\n**Chat shows \"No AI model configured\"**\nSet at least one LLM provider key in `apps/gateway/.env`\n\n. Restart the gateway.\n\n**Seed fails with \"relation does not exist\"**\nMigrations haven't run. Run `cd apps/gateway && pnpm prisma migrate deploy`\n\nfirst.\n\n** GET /health/ready returns 503**\nEither Postgres or Redis is unreachable. Check\n\n`DATABASE_URL`\n\nand `REDIS_URL`\n\n. Confirm infra containers are healthy: `docker compose ps`\n\n.**TypeScript errors after pulling**\nRun `pnpm install`\n\nat the repo root to pick up any new dependencies, then `npx tsc --noEmit`\n\nagain.\n\n**Playwright tests fail with \"demo user not found\"**\nRe-run the seed: `cd apps/gateway && pnpm prisma db seed`\n\n.\n\n**SSE streams drop under load**\nRedis is required for SSE fan-out across multiple gateway pods. Ensure `REDIS_URL`\n\nis set. Single-pod deployments work without Redis but cannot fan-out.\n\nContributions are welcome — see [ CONTRIBUTING.md](/anway-dev/anway/blob/main/CONTRIBUTING.md) for\nsetup, workflow and guidelines, and\n\n[.](/anway-dev/anway/blob/main/CODE_OF_CONDUCT.md)\n\n`CODE_OF_CONDUCT.md`\n\nFound a vulnerability? Please report it privately — see\n[ SECURITY.md](/anway-dev/anway/blob/main/SECURITY.md). Do\n\n**not** open a public issue for anything exploitable. Note the non-production defaults table there before deploying.\n\n[MIT](/anway-dev/anway/blob/main/LICENSE) © Anway.", "url": "https://wpnews.pro/news/show-hn-a-agentic-nervous-system-for-all-devops-tools", "canonical_source": "https://github.com/anway-dev/anway", "published_at": "2026-07-14 16:39:43+00:00", "updated_at": "2026-07-14 16:49:05.417135+00:00", "lang": "en", "topics": ["ai-agents", "developer-tools", "ai-infrastructure"], "entities": ["Anway", "GitHub", "Datadog", "Kubernetes", "Linear", "Jira", "ArgoCD", "PagerDuty"], "alternates": {"html": "https://wpnews.pro/news/show-hn-a-agentic-nervous-system-for-all-devops-tools", "markdown": "https://wpnews.pro/news/show-hn-a-agentic-nervous-system-for-all-devops-tools.md", "text": "https://wpnews.pro/news/show-hn-a-agentic-nervous-system-for-all-devops-tools.txt", "jsonld": "https://wpnews.pro/news/show-hn-a-agentic-nervous-system-for-all-devops-tools.jsonld"}}