Dashboards you author

Live dashboards over your plans, in files you own.

Any HTML page in your context becomes a live view of your stories and your agents’ routine results. Agents collect outside data with their own tools, so the page never holds a token. Start from the ready-made ones, or write your own.

Any .html file in your context is a live page.

Drop an HTML file into your team context and open it in CodeSense. It renders beside your plans, reads them through a small page SDK, and is versioned in your git like everything else. It stays current as story files change, and teams below yours in the chain inherit it.

The page declares what it may do, right in its head.

File dashboards/ sprint-14.html HTML
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="cs:type" content="dashboard">
  <title>Sprint 14 — lead view</title>
A sample Sprint 14 lead-view HTML page rendered in CodeSense, with Blocked, In review and Awaiting me cards, each with action buttons.
Real CodeSense UI · sample project A dashboard page written for the sample sprint, rendered beside your plans.

Ready-made dashboards

Ready-made example dashboards come with the CodeSense docs: a sprint analysis page and a kickoff console. Copy one into your team and it runs live over your stories.

The page SDK

The page SDK has 27 action verbs and 55 bridge methods counting the reads. A page calls any of them directly; there is nothing to declare or grant.

  • Change plans: setStatus, setField, setPrefs, routeToContext, draft, markRead, setHumanStatus
  • Start work: routineRefresh, openWorkspace, openFile, runPrompt, runSkill, openTab, gotoAgent
  • Talk to sessions: sendToSession, sendToWorkspaceTab, postMessage, sendAsHuman, replyAsHuman
  • Watch and tidy up: routineResult, routineStatus, readWorkspace, getWorkspaceStatus, routineCancel, closeWorkspace, closeTerminalTab, stopSession
dashboards/sprint-14.html (script)
const cs = () => window.codesense;
// setStatus takes the story file's path: resolve it from the page's own folder.
const storyPath = async (rel) => (await cs().invoke("getDocDir")).replace(/\/dashboards$/, "") + "/" + rel;
document.addEventListener("click", async (e) => {
  const b = e.target.closest("button"); if (!b || !cs()) return;
  try {
    if (b.dataset.open) await cs().invoke("openWorkspace", { storyId: b.dataset.open });
    else if (b.dataset.path) await cs().invoke("setStatus", { path: await storyPath(b.dataset.path), status: b.dataset.to });
    else if (b.dataset.skill) await cs().invoke("runSkill", { skill: "review-pr", args: [b.dataset.skill] });
    msg("Sent: " + b.textContent);
  } catch (err) { msg(String(err && err.message || err)); }
});

No permission prompts, and a record of every action

Every verb runs when the page calls it, with no grant or confirm dialog. Runaway guards cap bulk writes and chat bursts, and each action is recorded in a local log.

A live table in any doc

Put a csquery block in any markdown file and it renders as a live, read-only table of the stories it matches. Filter on status or any frontmatter field, source_repo included. One table can show every repo's work, and the block can't change anything.

any .md in your context
```csquery
tag: sprint=sprint-14
status: review, in-progress
columns: name, status, source_repo, assigned_to
sort: status
```

Coming next

Not shipped yet. Each item says what it's waiting on.

Read the concepts

How each part works, in the docs.

  • Dashboards HTML pages in your context and the SDK.
  • Page SDK Every read and action verb, with its gate.
  • csquery The query block's keys and views.