Wrong transition
“Done” can mean a state, transition ID, or a closed flag. Resolve intent against the provider before writing.
One typed TypeScript SDK for GitHub, GitLab, Linear, Jira, and Azure DevOps. Preview the exact change, coordinate retries, then commit with an explicit receipt.
One safe-write protocol
The provider can change. Your prepare → inspect → commit boundary stays the same.
import { createWorkClient } from "work-sdk";
import { github } from "work-sdk/github";
const work = createWorkClient({
adapter: github({
owner: "acme",
repo: "api",
token: process.env.GITHUB_TOKEN!
}),
});
const change = await work.prepareUpdate(
"481",
{ state: "done" },
);
await work.commit(change, {
idempotencyKey: "merge:api#481",
});Proposed change
Mapped ‘done’ to GitHub’s closed state
Inspect exact changes and provider warnings before anything is written.
Built for real side effects
Provider APIs disagree on states, identities, revisions, rich text, and error shapes. Work SDK puts those differences behind a typed, inspectable boundary.
“Done” can mean a state, transition ID, or a closed flag. Resolve intent against the provider before writing.
A timeout does not say whether a write succeeded. Atomic claims block concurrent duplicates; ambiguous outcomes stop retries for reconciliation.
An item can change between read and write. Revision checks stop agents from erasing newer work.
Designing an idempotent, conflict-safe transaction boundary across five provider APIs.
A safer primitive
Turn an irreversible API call into a change you can reason about, approve, log, and replay.
Fetch current state, normalize provider semantics, and calculate the exact diff.
work.prepareUpdate(…)Review field changes, lossy mappings, unsupported capabilities, and expected revision.
change.warningsVerify the plan and revision, atomically claim the business key, then record or reconcile the outcome.
work.commit(change)Small API, serious guarantees
A prepared change carries a fingerprint. Mutate it after inspection and the SDK rejects the commit.
Only one worker claims an intent. Uncertain provider outcomes become explicit errors instead of blind retries.
Check support instead of asking an agent to guess.
Handle auth, rate limits, conflicts, and unsupported fields consistently.
ESM and CommonJS builds, zero runtime dependencies, Node.js 20+.
Honest by design
Capabilities are data, not scattered documentation. Detect support before an agent proposes an action.
Explore adapter docs| Capability | GitHub | ||||
|---|---|---|---|---|---|
| Create and update | Supported | Supported | Supported | Supported | Supported |
| Comments | Supported | Supported | Supported | Supported | Supported |
| Custom states | — | — | Supported | Supported | Supported |
| Multiple assignees | Supported | — | — | — | — |
| Atomic update guard | — | — | — | — | Supported |
Straight answers
No. It is an open-source TypeScript library that runs in your application. You bring credentials for the trackers you already use.
Yes. Normalized entities can retain the raw provider payload for fields that are not part of the portable core.
No. Work SDK gives approval systems a concrete diff and warnings to evaluate. Your application decides when a human must approve a commit.
Work SDK supports GitHub Issues, GitLab, Linear, Jira Cloud, and Azure DevOps through separate adapters behind one normalized TypeScript API.
Yes. Adapters implement a compact public contract. The repository runs a shared internal conformance suite for first-party adapters.
Give agents a safer tool
Start with one provider. Keep one API when your stack changes.