Private beta: Request private beta access

zenitya

Agent analysis, as a page you can send.

Send structured blocks from any agent or job. We render them into a page your team can open, share, and let expire.

terminal

Analyzed last week's ad spend.

1,248 rows scanned, 3 anomalies flagged.

Turn automated work into a page people can use.

Any agent, script, or scheduled job can send structured blocks and return a shareable report URL without generating HTML or maintaining another dashboard project.

  • Any automated job can return a report

    Run the script you already schedule. It prints a report URL alongside the rest of the job output.

    • Works from cron, Airflow, workers, internal tools, or agent runs
    • Build the report from data the job already collected
    • Log, post, or email the returned URL
  • Blocks define the page, not arbitrary HTML

    The job provides metrics, charts, tables, and actions. Artifacts owns how those blocks become a page.

    • A validated schema decides what can render
    • No model-written markup, scripts, or one-off styles
    • Workspace layout and theme stay consistent across every report
  • A link, not a wall of text

    The answer stops being a message someone has to scroll past.

    • Post it from a bot, an email, a ticket, or a cron job
    • Opens on a phone without a login to your warehouse
    • Access and link controls on every report
  • Temporary by default

    Most questions are asked once, so most reports should not outlive the answer.

    • Set an expiry per report, or persist the ones that matter
    • No dashboard graveyard nobody wants to be the one to delete
    • Metadata and tags make the kept ones findable
  • Create and revise dashboards through MCP

    Expose dashboard creation to the coding harness your team already uses, then keep refining the same report in conversation.

    • Create a dashboard with one MCP tool call
    • Update blocks, ordering, and grouping without replacing the URL
    • Use Claude Code, Codex, Cursor, OpenCode, or another MCP client

A report is one call from the job that already has the data.

Official clients for TypeScript, Python, and Go.

  1. 07:00

    The job finishes its query

    Cron, Airflow, a Slack bot, an agent tool call - whatever already runs.

  2. +0.1s

    Blocks are built from rows you have

    Metrics, charts, and tables come straight from the result set. No templating.

  3. +0.4s

    reports.create() validates and renders

    The spec is checked against your schema, then rendered with the workspace theme.

  4. +0.5s

    One link goes to the channel

    Stakeholders open a page, not a CSV. It expires in 72 hours unless you keep it.

response201 created
{
  "id": "rep_b517af8ae9447723",
  "url": "https://zenitya.com/r/b517-af8ae9447723",
  "status": "active",
  "expiresAt": "2026-08-16T07:00:00Z"
}

open the rendered report

@zenitya/artifacts
import { Artifacts, b } from "@zenitya/artifacts";

const zen = new Artifacts();
const week = await warehouse.campaignWeek();

const report = await zen.reports.create({
  title: "Weekly campaign review",
  expiresIn: "72h",
  metadata: { source: "airflow", tags: ["marketing"] },
  blocks: [
    b.metric({
      title: "Spend",
      value: week.spend,
      format: "currency",
      currency: "USD",
      delta: b.delta(week.spend, week.prevSpend, { lowerIsBetter: true }),
    }),
    b.chart.verticalBar({
      title: "Conversions by day",
      labels: week.days,
      series: { Conversions: week.conversions },
    }),
    b.table.from(week.topCampaigns, {
      title: "Top campaigns",
      columns: { name: "Campaign", roas: { label: "ROAS", align: "right" } },
    }),
    b.actions({ title: "Next actions", items: week.recommendations }),
  ],
});

await slack.post("#growth", `Weekly review is up: ${report.url}`);

Everything a generated report needs to hold up.

  • JSON schema

    One spec, validated before anything renders.

  • Charts

    Bar, line, area, and pie from labels and series.

  • Tables

    Column labels, alignment, and formatting per field.

  • Actions

    Next steps as a first-class block, not a bullet.

  • Images

    Screenshots and generated figures inline.

  • Themes

    Workspace presets applied to every report.

  • Access controls

    Who can open a link, and for how long.

  • Expiry

    Temporary by default, persisted on request.

  • Three SDKs

    TypeScript, Python, and Go, all typed.

  • Dataframes

    Pandas and Polars accepted directly.

  • Built for cron

    Idempotency keys for jobs that retry.

  • Live blocks

    Sections that refresh from a source.

  • Report URLs

    Stable, shareable, and safe to forward.

  • No agent HTML

    Nothing the model writes reaches the DOM.

No agent to send the report?

Zenitya Agent is the teammate side of the same idea: it runs your skills on a schedule and hands the result straight to Artifacts.

  • Skills your team writes once and invokes with a slash command.
  • Schedules that produce a Monday report without anyone asking.
  • Sandboxed tools that read from the systems the analysis needs.

Give one recurring analysis a proper home.

Bring us the script, agent, or job that already has the data. We will help turn its output into a page people actually want to open.

Questions we would ask before using it.

Is this a BI dashboard tool?

No. Zenitya Artifacts is for generated business reports: temporary by default, shareable by URL, and persisted only when a report becomes important.

Who creates the report?

Agents, Slack bots, scripts, scheduled jobs, or internal tools send structured content. Business users receive a readable report link.

Why not let the agent generate HTML?

Generated HTML is inconsistent and hard to inspect. Here the agent provides content while your organization controls layout, blocks, theme, and access.

Is there an API or SDK?

Yes. A REST API with official clients for TypeScript, Python, and Go. Each ships typed block builders, retries with idempotency keys, and local schema validation, so a report is one reports.create() call.

How do I turn a Slack bot answer into a report?

Instead of a long Slack response, the bot creates a report and replies with the link. The team gets charts, metrics, tables, and actions on one page.

Can I use it for scheduled reports?

Yes. It is built for recurring jobs: morning checks, weekly campaign reviews, account briefs. Idempotency keys keep retries from creating duplicates.

Can reports use live data?

Yes. A report can mix snapshot blocks with live blocks that refresh from a source when a section needs current data.

Is it useful if we already have BI tools?

Yes. BI is good for persistent dashboards. Artifacts covers ad hoc analysis, agent output, and workflow summaries that do not deserve a permanent BI build.

Can every team or client get a different design?

Yes. Choose a predefined theme or apply one for a workspace or client so every generated page stays consistent.

What about access and privacy?

Report visibility, link controls, and expiry are part of the product. A link can be scoped to your workspace rather than being public.