The fastest way to build internal agents and AI systems
Build in Keystroke, from Claude or ChatGPT over MCP, or with Cursor, Claude Code, Codex, and other coding agents. Everything is real TypeScript you own.
Get started · Documentation · Use cases
Keystroke gives teams one platform for building agents that do real work and turning them into reliable systems. It handles models, memory, workspaces, tools, workflows, triggers, integrations, deployment, and run history, so you can go from an idea to a production agent without assembling the infrastructure yourself.
Build from a conversation or work directly in code. Either way, every agent, workflow, action, and trigger is defined as plain TypeScript: inspectable, testable, git-versioned, and portable.
- AI agents with memory, persistent workspaces, web search, integrations, subagents, and tools.
- AI systems that combine agents with deterministic workflows, event triggers, durable execution, and human approval.
- Team-facing agents people can use through Keystroke, Slack, or an API.
| Build with | Best for |
|---|---|
| Keystroke's built-in agent | Building in the browser with no local setup |
| Claude, ChatGPT, or another MCP client | Building from the assistant you already use |
| Cursor, Claude Code, Codex, or another coding agent | Full repository context, git, tests, and complete control |
All three work with the same Keystroke projects and deploy to the same platform. Start in one surface and continue in another.
Paste this into Claude Code, Cursor, Codex, or another agentic IDE:
Read https://keystroke.ai/start.md then help me create my first automation.
Your agent installs the CLI, connects your account, scaffolds a project, and deploys the first version. Then describe what you want to build:
Each weekday morning, scan my Google Calendar, Gmail inbox, and Linear issues,
then send me a short briefing in Slack.
Build a data analyst agent that answers ad hoc business questions by querying
our warehouse. Connect it to Slack so the team can ask questions in #data.
Prerequisite: Node.js ^22.18.0 || >=24.0.0 (Node.js 23 is not supported).
npm install -g @keystrokehq/cli
keystroke auth login
keystroke init my-app --yes
cd my-app
keystroke projects list
keystroke projects link --project <project-slug>
keystroke deploykeystroke deploy lints, typechecks, builds, and uploads your project. No
separate build steps are required.
Agents, workflows, actions, and triggers live under src/ in your project. A
typical project grows into this structure:
my-app/
├── src/
│ ├── actions/
│ ├── agents/
│ ├── triggers/
│ └── workflows/
├── AGENTS.md
├── keystroke.config.ts
├── package.json
└── tsconfig.json
Define an agent:
import { defineAgent } from "@keystrokehq/keystroke/agent";
export default defineAgent({
slug: "researcher",
name: "Researcher",
description: "Researches a topic and returns a sourced brief.",
systemPrompt: "Research the request, verify important claims, and cite sources.",
model: "openai/gpt-5.6-luna",
});Create a reusable action:
import { defineAction } from "@keystrokehq/keystroke/action";
import { z } from "zod";
export const greet = defineAction({
slug: "greet",
name: "Greet",
description: "Return a friendly greeting for a name.",
input: z.object({ name: z.string() }),
output: z.object({ greeting: z.string() }),
async run({ name }) {
return { greeting: `Hello, ${name}!` };
},
});Compose actions and agents in a durable workflow:
import { defineWorkflow } from "@keystrokehq/keystroke/workflow";
import { z } from "zod";
import { greet } from "../actions/greet";
export default defineWorkflow({
slug: "greeting",
name: "Greeting",
description: "Return a friendly greeting for a name.",
input: z.object({ name: z.string() }),
output: z.object({ greeting: z.string() }),
async run(input) {
return greet.run(input);
},
});Each action or agent call inside a workflow is a durable step. Successful steps are recorded and replayed instead of repeated when a run retries.
Keystroke combines an open TypeScript framework with a managed platform your whole team can use.
| Build powerful agents | Turn them into reliable systems |
|---|---|
| 300+ models or your own provider keys | Typed workflows and durable execution |
| Built-in memory, web search, and workspaces | Schedules, webhooks, polls, and app events |
| Actions, workflows, subagents, and MCP tools | Human approval, tests, traces, and run history |
| 1,000+ integrations, any API, or any MCP server | Managed credentials and access controls |
| Web, Slack, and API access | Shared projects, skills, and agents |
The framework and platform share the same authoring model and HTTP contracts. Build and test locally, then deploy to Keystroke Cloud. Operators can also run the source-available standalone runtime themselves.
| Primitive | Use it when |
|---|---|
| Action | You need one typed, reusable unit of work. |
| Agent | The path is open-ended and the model should decide what to do. |
| Workflow | The steps are known and should run durably and predictably. |
| Trigger | Work should start from a schedule, webhook, poll, or app event. |
Workflows can call agents when a deterministic process reaches a step that needs judgment. Agents can use actions and workflows as tools.
Use Keystroke's catalog of 1,000+ integration definitions, connect any HTTP API including private APIs, or attach an MCP server. Credentials stay separate from code and can be scoped to an organization, project, or user.
Keystroke Cloud provides the managed team workspace, hosted project runtimes, deployments, run history, and credential flows described above.
The source-available repository also includes a standalone runtime for teams
that want to operate the runtime themselves. It uses the same TypeScript
definitions, but it is an operator-managed runtime rather than a self-hosted
copy of every Keystroke Cloud service. See the implementation notes in
packages/build and
packages/http.
The CLI is designed for humans and coding agents: predictable commands, plain output, and no interactive UI where a scriptable option works.
keystroke deploy
keystroke agents prompt researcher --message "Research durable execution"
keystroke workflows run research-brief --input '{"topic":"AI automation"}'
keystroke triggers list
keystroke credentials create exa --set apiKey=@env:EXA_API_KEYKeystroke's framework source is available for you to inspect, modify, and self-host. It is licensed under the Elastic License 2.0, which does not permit offering substantial Keystroke functionality to third parties as a hosted or managed service.
Keystroke Cloud contains separately licensed enterprise code.
Issues, ideas, documentation fixes, and code contributions are welcome. Code contributors must sign the Sprint Labs Contributor License Agreement before a change can be accepted. See CONTRIBUTING.md.
- Quickstart
- Build in Keystroke
- Build with a coding agent
- Build over MCP
- Build agents
- Build workflows
- Triggers
- Credentials and integrations
- Deploy a project
Copyright 2026 Sprint Labs, Inc.