Docs Pricing
Contact us Install

Headless apps for
long-running agents

Apps that give agents self-verification loops, and 100% compatibility with the files people work on.

CLI
Read docsRead the docs


Backed by leading investors



Models and their tools have been co-evolving in a tick-tock pattern. The ticks are the raw intelligence jumps (in models like GPT-4 and Sonnet 3.5), while the tocks are the usability jumps (in new tools like web search and code sandboxes). New models enable new tools, new tools inspire new models.

The newest models can produce amazing work, if only they are given a self-verification loop, and the means to produce the files people work on. That’s what we’re building, starting with spreadsheets & presentations.



Trusted by teams whose agents always need to be correct. Those that cannot afford a quiet mistake.

“If you want to be at the forefront of what’s possible in Excel, you need experts, that’s what Witan brings to the table for us.”

Chester De Wolfe

Engineering @ ModelML


Click to scroll
witan xlsx exec /Users/nuno/dev/demo-excel-agent/outputs/compute_line_chart/compute.xlsx --create --save --stdin <<'WITAN'
# adding compute table
await xlsx.setCells(wb, [
  { address: "Sheet1!A1", value: "Category" },
  { address: "Sheet1!B1", value: "Jan" },
  { address: "Sheet1!C1", value: "Feb" },
  { address: "Sheet1!D1", value: "Mar" },
  { address: "Sheet1!E1", value: "Apr" },
  { address: "Sheet1!F1", value: "May" },
  { address: "Sheet1!A2", value: "Compute" },
  { address: "Sheet1!B2", value: 120 },
  { address: "Sheet1!C2", value: 145 },
  { address: "Sheet1!D2", value: 138 },
  { address: "Sheet1!E2", value: 162 },
  { address: "Sheet1!F2", value: 178 },
])

# adding chart over table
await xlsx.addChart(wb, "Sheet1", {
  name: "ComputeTrend",
  position: { from: { cell: "A5" }, to: { cell: "H22" } },
  groups: [
    {
      type: "line",
      series: [
        {
          name: { ref: "Sheet1!A2" },
          categories: "Sheet1!B1:F1",
          values: "Sheet1!B2:F2",
        },
      ],
    },
  ],
  title: { text: "Compute by Month" },
  legend: { position: "right" },
})

# render to png
await xlsx.previewStyles(wb, "Sheet1!A1:H22")

return {
  sheets: await xlsx.listSheets(wb),
  charts: await xlsx.listCharts(wb),
}
WITAN
STDOUT
Click to scroll
Run the command to generate the output
Building...
{
  "charts": [
    {
      "groupCount": 1,
      "id": 1,
      "name": "ComputeTrend",
      "position": {
        "from": {
          "cell": "A5",
          "xOffsetPts": 0,
          "yOffsetPts": 0
        },
        "sheet": "Sheet1",
        "to": {
          "cell": "H22",
          "xOffsetPts": 0,
          "yOffsetPts": 0
        }
      },
      "seriesCount": 1,
      "sheet": "Sheet1",
      "type": "line"
    }
  ],
  "sheets": [
    {
      "address": "Sheet1!A1:G21",
      "cols": 7,
      "from": { "col": 1, "row": 1 },
      "rows": 21,
      "sheet": "Sheet1",
      "to": { "col": 7, "row": 21 }
    }
  ]
}

Uncompromising on security,
consistently.

SOC 2 Type II

Independently audited controls for security, availability, and confidentiality.

HIPAA compliant

Encryption, access scoping, and audit trails apply to every task touching PHI.

View our full credentials

Install and test it on
your own machine.

Our personal tier is free to use and requires no sign-in

# 1. Install
# 2. Skills

npx skills add witanlabs/witan-cli
# 3. Use it

witan xlsx exec compute-monthly.xlsx --create --save --stdin @<<'WITAN'
      await xlsx.addSheet(wb, "Data")
WITAN