Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.useterse.ai/llms.txt

Use this file to discover all available pages before exploring further.

Terse is currently in private beta. Email us at support@useterse.ai to request access, and let us know what use cases you’re looking to build.

Quickstart

Get a workflow live in under 5 minutes.

Context as Code

How generated helpers make workflows more stable.

How it works

AI agents are fast to build but make mistakes. Deterministic workflows are reliable but slow to set up. Terse lets you mix both in the same workflow: call tools directly when you need precision, hand off to an agent when you need judgment. Deploy serverlessly with terse deploy, build faster with a generated SDK from your workspace.
import { GithubPRTrigger, TerseAgent, createJob } from "terse-sdk"
import { Repos, Skills, SlackChannel, Triggers } from "../terse.generated"
// ^^ Generated based on your workspace

createJob({
    name: "Summarize PR and send slack message",
    triggers: [Triggers.github.onPROpened({ repo: Repos.TerseAI.Terse })],
    onTrigger: async (event: GithubPRTrigger) => {
        // Create durable Agents
        const prompt = "Summarize the incoming PR and send to slack. Format the summary in Block Kit; include screenshots or diagrams from the PR as image blocks."
        const agent = TerseAgent.create({
            prompt,
            skills: [
                // Fine tune what agents have access to. Impossible to modify anything outside of this scope
                Skills.github({ repos: [Repos.TerseAI.Terse] }),
                Skills.slack({ channel: SlackChannel.AllTerseInc })
            ]
        })

        // deterministically call a tool
        const message = await agent.tools.slack.sendMessage({
            channelId: SlackChannel.AllTerseInc.channelId,
            message: "New PR from " + event.sender.login + "!"
        })

        // Outputs are strongly typed
        const parentId = message.message_ts

        // Trigger the Agent with Github + Slack tools auto added
        await agent.runAndWait(`
        Summarize this PR ${event.formatForAgentRunner()}.
        Keep it short. Reply in a thread to the Slack message (thread parent ts: ${parentId}).
        `)
    }
})
When you’re ready, run terse deploy from the CLI to package and deploy your workflow. Terse handles hosting, execution, and scaling for you. Learn more about how deployment works.

Why Terse

Code first, version controlled

Workflows are TypeScript in your repo. Review them in PRs, track changes in git history, and collaborate with your team the same way you ship any other code. No more black-box automations buried in a UI builder that nobody can audit or roll back.

Fewer tokens, better results

Terse curates the tools available to the LLM based on the skills you define. Instead of dumping hundreds of MCP tools into context and hoping the model picks the right one, your agent only sees what it needs. Fewer tokens in, more reliable outputs out.

Secure by default

Integration credentials live in Terse’s secret manager with automatic OAuth token refresh. Your code never touches API keys or tokens. Each skill is scoped to specific resources (repos, channels, lists), and tool-level approval gates let you control exactly what the agent can do. Compare that to raw MCP servers where any connected tool has full access to everything.

Deterministic when you want it

Not everything needs an LLM. Call Agent.tools.slack.sendMessage() directly for predictable operations, then hand off to Agent.runAndWait() when you need model judgment. Mix both in the same workflow.

Full observability

Every run is tracked with a complete action log: what tools were called, what changed, and where. Failed runs surface the error. Approval-gated tools pause execution and resume when approved. No more wondering what your automation did at 3am.

Supported integrations

GitHub

Slack

Attio

Linear

https://mintcdn.com/terse/QJxXNBQzMoUWeu_W/images/integrations/notion.png?fit=max&auto=format&n=QJxXNBQzMoUWeu_W&q=85&s=86d9155a38af51f60e3e03fc448f834d

Notion

https://mintcdn.com/terse/DYFm7KrHqTKQwqwJ/images/integrations/snowflake.png?fit=max&auto=format&n=DYFm7KrHqTKQwqwJ&q=85&s=d9136d4e8f9ebd3d9e0a50f3b007a987

Snowflake

https://mintcdn.com/terse/QJxXNBQzMoUWeu_W/images/integrations/gmail.png?fit=max&auto=format&n=QJxXNBQzMoUWeu_W&q=85&s=940b3fe8dd8097a7914e151f8670c3f7

Gmail

https://mintcdn.com/terse/DYFm7KrHqTKQwqwJ/images/integrations/posthog.png?fit=max&auto=format&n=DYFm7KrHqTKQwqwJ&q=85&s=5ca13bb8af96c1781221ea9284a53bd3

PostHog

https://mintcdn.com/terse/QJxXNBQzMoUWeu_W/images/integrations/datadog.png?fit=max&auto=format&n=QJxXNBQzMoUWeu_W&q=85&s=de2e582d50c16cfa0bd69863a9300cc5

Datadog

https://mintcdn.com/terse/QJxXNBQzMoUWeu_W/images/integrations/launchdarkly.jpeg?fit=max&auto=format&n=QJxXNBQzMoUWeu_W&q=85&s=684de3864f044769d756c943f72f921f

LaunchDarkly

What you can build

CRM enrichment

Enrich new deals with Apollo, score fit, and write the result back to Attio.

Deal Alerts

Post Slack alerts when a deal hits a key stage.

Weekly Pipeline Reporting

Summarize open pipeline weekly and post the digest to Slack.

Additional Templates

Start from a working GTM workflow instead of a blank file.

Where to start

Quickstart

Get a weekly pipeline digest live in under 10 minutes.

Context as Code

Understand how generated helpers make workflows more stable.

Hosting & Deployment

Learn how terse deploy packages and runs your code serverlessly.

Compare approaches

See where Terse fits relative to Zapier, custom scripts, and AI agents.

Key concepts

ConceptWhat it means
Context as Codeterse generate compiles your connected integrations into generated helpers, removing the need for runtime discovery of IDs, channels, or lists
WorkflowA TypeScript automation with triggers, skills, and a handler, deployed via terse deploy
Serverless hostingterse deploy packages your code and hosts it for you. Workflows run in isolated containers that spin up on trigger and tear down on completion. No servers to manage. Learn more.
TriggerThe event (e.g. Triggers.github.onPROpened()) or schedule (e.g. Triggers.schedule.cron()) that starts a workflow
SkillAn integration capability available to the workflow (e.g. Skills.slack(), Skills.github())
Generated helpersResource constants, trigger builders, skill constructors, and deterministic wrappers