7.8 KiB
Langship
Langship is a framework-agnostic deployment, governance, and operations layer for agent applications. It supports LangChain/LangGraph and other agent frameworks (LlamaIndex, CrewAI, AutoGen, Pydantic AI, raw SDK agents, etc.) — not tied to any single framework.
Three pillars
- Deployment — packaging, versioning, rollouts, env/secret management for agent apps
- Governance — policies, budgets, approvals, audit logs, tenant isolation, safety filters
- Operations — monitoring, replay/debug, incident response, cost & performance management
Deployment targets
Langship is multi-runtime. Supported deployment targets include:
- Kubernetes (self-hosted / any cloud)
- AWS Bedrock AgentCore Runtime
- GCP Vertex AI Agent Engine
The deployment layer abstracts over these runtimes so the same agent app definition can ship to any of them. Governance and operations policies must apply uniformly across runtimes.
Positioning
Closer to a "platform for agents" (Kubernetes/Datadog-style) than a single-framework tool like LangSmith or LangGraph Platform.
Top-level scope — Project
Langship's top-level scoping primitive is a Project. A Project owns: users + roles, environments, workflows, secrets, deployment configs, audit log. Self-hosted Langship typically serves several teams, so Projects isolate one team/agent from another from day one (rather than retrofitting tenancy later). API paths are scoped: /projects/:id/.... Note: "Project" in this doc always refers to the Langship Project; cloud-provider projects (e.g., GCP project) are always qualified with the provider name.
CI/CD — configurable workflow builder
CI/CD is not a fixed pipeline. It is a configurable, drag-and-drop workflow builder where pipelines are graphs of nodes (triggers, build, test, eval, policy, approval, deploy, promote, rollback). The visual canvas is the UI; YAML in git is the source of truth (GitOps).
- Two modes — replace CI entirely (Langship runs build/test/eval/deploy) or CD + release-gates only (external CI hands off an artifact, Langship picks up at eval/governance/deploy).
- Role-based views — agent devs, platform/DevOps, governance owners see different node palettes on the same underlying graph.
- Environments are first-class — dev, staging, prod each have their own pipeline. Per-env config (secrets, runtime, scaling) is separate from the graph. Different runtimes per env are expected (e.g., dev on K8s, prod on Vertex Agent Engine).
- Promotion is gated and branching-strategy-driven — evals must pass → approval gate (human, automated policy, or quorum) →
Promotenode executes per project's branching strategy (trunk-based, env-branches, release branches, or custom). Promotion and rollback are auditable events. - Governance is a node, not a wrapper — policies/approvals/budget gates are first-class, visible, reorderable steps in the graph.
Deployment model — self-hosted
Langship is self-hosted by the customer. The customer runs the whole stack (API server, Restate, Postgres, workers, secrets manager) in their own infrastructure. Distribution is via Helm chart / installer / Docker Compose for local dev.
Why self-hosted:
- Customer's cloud credentials, agent code, eval data, and audit logs never leave their network — strong fit for the governance-focused positioning
- Clear regulatory story for finance/healthcare/gov buyers who can't adopt hosted control planes
- Simpler security model: no cross-tenant credential storage, no proxy of LLM traffic
- Customer's compliance team monitors logs in systems they already operate
Trade-offs accepted:
- Higher friction to adopt vs. hosted SaaS — installer/upgrade UX matters more
- Support is harder — no production access by default; need good telemetry-with-consent + clear runbooks
- Distribution: ship a Helm chart as primary path; Docker Compose for local dev / small teams
Hosted offering may come later as a managed deployment of the same stack, but the product is designed self-hosted-first. CLI/UI/API contracts assume the server is something the customer operates.
Server architecture — three layers
The "server" is actually three layers, all running in the customer's infrastructure:
- API / control plane — REST or gRPC. CLI and UI call this. Handles auth, RBAC, workflow CRUD, run triggers, approvals, audit queries. Stateless app servers.
- Orchestration layer — Restate (primary) cluster + worker pool. Workers execute node logic (build, eval, deploy, etc.). Long-lived and durable.
- Data layer — MongoDB (runs, approvals, audit, users, projects, workflows index); S3-compatible object store (artifacts, large eval outputs, trace blobs); secrets manager (Vault or cloud-native KMS) for cloud credentials. Postgres runs alongside, but only as Restate's required persistence backend — never accessed by Langship app code.
Plus a GitOps sync component (initially inside the API, possibly its own service later) that watches git refs and triggers workflows on push/tag/merge events.
Minimal v0 server
For the CLI-first vertical slice:
- One API server process, Postgres-backed
- One Restate (Restate Cloud is fine for prototyping; final product self-hosts Restate too)
- One worker process executing a few node types
- CLI talks to the API
- No UI yet
That's the smallest thing that closes the loop: langship deploy → API receives → Restate workflow runs → status updates → CLI shows result.
User flow — two roles, two experiences
Langship has two distinct user journeys. The product must serve both well.
Platform engineer — one-time project setup
Heavy, infrequent. Done once per project, occasionally revisited. Mixes CLI + UI.
- Environments — define dev / staging / prod (and any custom envs like
eu-prod,preview) - Branching strategy — trunk-based / env-branches / release-branches / custom
- CI/CD pipeline with stages — the workflow graph (build → eval → approval → deploy → promote, etc.) per env
- Deployment configs — per-env cloud credentials and runtime targets (e.g., K8s cluster X for dev, Bedrock AgentCore account Y for staging, Vertex Agent Engine project Z for prod)
Output: a configured project that agent developers consume.
Agent developer — repeatable deploy loop
Light, frequent. Daily driver. CLI-first.
- Drop in agent repo — link the repo to a Langship project (GitOps: Langship watches refs per env, not a one-time blob upload)
- Select — pick project / pipeline / env target
- Deploy — trigger the run; pipeline executes; agent ships
Implications for product surface
- CLI is the daily-use surface for agent devs (steps 5–7) and the bootstrap surface for platform engineers (steps 1–4 initially).
- UI is the visualization + governance surface — workflow canvas, run history, approval inbox, audit log, release-flow view across envs. Comes after CLI proves the model.
- Build CLI first. A working CLI gives end-to-end usefulness sooner; UI built on top of unproven flows risks designing for the wrong thing.
- Agent repo is git-based, not uploaded. Langship references the repo by URL + ref; pipelines trigger on push/tag/merge events per env's branching strategy. Preserves traceability, reproducibility, and the GitOps story.
Design principle
Core APIs and data models must stay framework-agnostic. The key abstraction is a common interface across frameworks (runs, traces via OpenTelemetry/OpenLLMetry) so governance and operations policies apply uniformly regardless of the underlying agent framework. Avoid LangChain-only assumptions in core abstractions.
Engine Restate must stay wrapped behind Langship's own DSL — users never see the engine directly. Swapping later is possible but disruptive; pick deliberately.