Workflow building for the coding agent era.
npm i -g terse-clinpx skills add TerseAI/Terseimport { createJob, generateText } from "terse-sdk"// generated types for your workspace ↓import { Triggers, Skills, LinearProject, toolbox } from "./terse.generated" createJob({ name: "linear-triage-summary", triggers: [Triggers.linear.onIssueCreated({ project: LinearProject.Triage })], onTrigger: async (event) => { const issue = event.data.data // agentic reasoning, ACL'd skills ↓ const summary = await generateText({ prompt: `Summarize PRs linked to ${issue.identifier}`, skills: [Skills.linear(), Skills.github()], }) // deterministic tool call ↓ await toolbox.slack.sendMessage({ slackUserId: issue.assignee.slackUserId, message: summary, }) },})import { createJob, generateText } from "terse-sdk"import { Triggers, Skills, LinearProject, SlackChannel, toolbox } from "./terse.generated"createJob({name: "linear-triage-summary",triggers: [Triggers.linear.onIssueCreated({ project: LinearProject.Triage })],onTrigger: async (event) => {const issue = event.data.dataconst summary = await generateText({prompt: `Summarize PRs linked to ${issue.identifier}`,skills: [Skills.linear(), Skills.github()],})await toolbox.slack.sendMessage({slackUserId: issue.assignee.slackUserId,message: summary,})const slackUserId = issue.assignee.slackUserIdif (slackUserId) {await toolbox.slack.sendMessage({slackUserId,message: summary,})} else {await toolbox.slack.sendMessage({channelId: SlackChannel.Triage.channelId,message: `${issue.assignee.name}: ${summary}`,})}},})
Why Terse
Equipped to build production workflows.
Typed end-to-end
Mistakes caught at compile time, not in prod.
Your editor knows which channels, repos, and projects Terse has access to. Reference one you haven't granted, and the type checker catches it before the workflow ever runs.
Improves with use
Production teaches the workflow.
Every week, Terse reviews recent runs and proposes patches: missing fallbacks, prompt drift, redundant calls. Apply with terse apply, verify with terse test.
Deterministic by default
Skip the agent when you don't need one.
Not every step needs reasoning. Call skill methods directly with the toolbox: same typed SDK, same ACL'd scopes, no agent overhead. Use it when you just need to push, pull, or post.
Debug like code
Reproduce any run locally.
terse history lists past runs. terse replay reproduces any one locally with the exact event. terse test runs jobs locally against sample events. terse listen pipes live prod events into your dev process.
Ready?
Your first workflow in 60 seconds.
Install the CLI, write a job in TypeScript, deploy serverless.
npm i -g terse-clinpx skills add TerseAI/Terse




