| Surface | Status | Best for |
|---|---|---|
| Slack | Available | The primary way Keystroke users interact with agents today, directly in Slack |
| CLI | Available | Testing and debugging agents during development |
| HTTP API | Available | Use agents via API and integrate them into your own services |
| Workflow steps | Available | Use agents as steps in deterministic workflows |
| Triggers | Available | Run an agent automatically on a schedule, webhook, or poll |
| External channels | Coming soon | Use agents in tools like Microsoft Teams, Telegram, Linear, and more |
| In-app chat | Coming soon | An in-app chat interface for every agent, directly in the Keystroke web app |
| MCP server | Coming soon | Expose agents as tools to other MCP clients |
Use agents in Slack
Slack is how most teams use Keystroke agents today. You can connect Keystroke to Slack and bind Slack channels to your agent. Once bound, teammates can message the agent like any coworker, in a channel, a thread, or a DM, and the gateway turns each message into an agent session and posts the reply back to Slack. See external channels for connecting Slack, binding channels, choosing listen modes, and inspecting channel sessions.Use agents from the CLI
The CLI is the most practical way to run an agent while you build and test it. Deploy your project, then prompt the agent against the deployed project:support value is the agent slug from defineAgent(). The response includes a sessionId, messages, and any error. When you call an agent from code and need a typed object back, pass an outputSchema and read result.output — see structured output.
Continue the same session by passing its ID:
| Target | Use when |
|---|---|
| Cloud | The default after deploy: invoke or inspect your deployed project |
| Local | You’re running a local server (keystroke dev / keystroke start) for offline iteration |
keystroke agents list is platform/org-level and lists agents in the active organization or project. Prompt and session list/get commands run against the resolved project target. Session cancellation is platform-backed today.--include gateway,messages,events,trace when you need all available session detail. See the CLI reference for the full command list.
Cancel a running cloud session by ID:
Use agents in workflow steps
Agents can be called from workflows and actions with.prompt():
Run agents from triggers
A trigger attaches an event source (a schedule, a webhook, or a poll) to an agent, so the agent runs on its own when the source fires instead of waiting for someone to prompt it. Triggers live insrc/triggers/; a source exposes .attach(), where you pass the agent and the prompt to run.
src/triggers/morning-check.ts
prompt, so the agent can act on the event that fired it:
src/triggers/new-inbox.ts
Use agents via API
You can also prompt a deployed agent over HTTP. The route is asynchronous: it enqueues the prompt and returns202 with a sessionId and runId to inspect later, rather than waiting for the agent to finish.
sessionId in the body alongside the new message; send only the new message, not the prior turns. Inspect the result later in History or with keystroke agents sessions get.
This is mainly useful for wiring agents into your own services. For most internal tooling, Slack and the CLI cover what you need.
Review agent runs
Every surface that runs an agent creates an agent session you can review later. Open History in the web app and filter Type to Agent. The detail panel shows messages, tool calls, metadata, trace data, timing, and errors. From the CLI, use session commands when you want to inspect runs while debugging:Next steps
Triggers
Run agents on a schedule, webhook, or poll.
External channels
Connect Slack and route channel messages to agents.
Agent runs
Inspect messages, tool calls, errors, and traces.
Deploy a project
Ship agent changes to the platform.