<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width"><link rel="icon" href="/favicon.svg" type="image/svg+xml"><link rel="icon" href="/favicon-32.png" sizes="32x32" type="image/png"><link rel="apple-touch-icon" href="/apple-touch-icon.png"><link rel="canonical" href="https://xn--w6j.day/projects/canonical-hours/"><link rel="alternate" type="application/json" href="/.well-known/site-map.json" title="machine-readable site map"><link rel="alternate" type="application/json" href="/.well-known/0day.json" title="service descriptor"><link rel="alternate" type="application/json" href="/openapi.json" title="OpenAPI description of this site's surfaces"><meta name="description" content="A standing agent and MCP surface that folds GitHub, Linear, lectio, and snapshot observations into an operational board."><meta property="og:title" content="canonical-hours — 〇.day"><meta property="og:description" content="A standing agent and MCP surface that folds GitHub, Linear, lectio, and snapshot observations into an operational board."><meta property="og:type" content="website"><meta property="og:url" content="https://xn--w6j.day/projects/canonical-hours/"><meta property="og:site_name" content="〇.day"><meta property="og:image" content="https://xn--w6j.day/social-card.png"><meta property="og:image:type" content="image/png"><meta property="og:image:width" content="1200"><meta property="og:image:height" content="630"><meta property="og:image:alt" content="〇.day — agentic research: what each project is for, and how they connect"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:image" content="https://xn--w6j.day/social-card.png"><title>canonical-hours — 〇.day</title><link rel="stylesheet" href="/_astro/BaseLayout.IBd5p4Gl.css"></head><body><a class="skip-link" href="#main">skip to content</a><div class="shell"><header class="site-header"><a class="brand" href="/" aria-label="〇.day index"><span class="mark" aria-hidden="true">〇</span><span>day</span></a><span class="org">agentic research</span><nav aria-label="Primary navigation"><a aria-current="page" href="/#index">index</a><a href="/about/">about</a><a href="/api/">api</a><a href="https://q-q.dev/writing/">writing</a><a href="https://github.com/agentic-research">source</a></nav></header><main id="main"><article class="project-page" style="--project-accent: #b8a9d1"><a class="return" href="/#index">← index</a><header><p class="eyebrow">coordination</p><h1>canonical-hours</h1><span class="status"><span class="status-dot" aria-hidden="true"></span>experimental · public</span></header><dl><div><dt>the question</dt><dd>How can scattered agent activity become one board that survives a restart?</dd></div><div><dt>the primitive</dt><dd>a status board that polls on a schedule</dd></div><div><dt>record</dt><dd>A standing agent and MCP surface that folds GitHub, Linear, lectio, and snapshot observations into an operational board.</dd></div></dl><section><h2>position</h2><ul class="relationship-list"><li><span>observes work around</span> <a href="/projects/rosary/">rosary</a></li><li><span>can run through</span> <a href="/projects/cloister/">cloister</a></li></ul></section><section><h2>declared dependencies <a class="section-aside" href="/about/">how →</a></h2><ul class="derived-list"><li><p class="derived-head"><span class="ledger-dir" aria-hidden="true">→</span><a class="ledger-target" href="/projects/mache/">mache</a></p><ul class="derived-evidence"><li><span class="derived-kind">artifact</span><span class="derived-detail">agentic-research/mache releases</span><span class="derived-source">canonical-hours/Taskfile.yml</span></li></ul></li><li><p class="derived-head"><span class="ledger-dir" aria-hidden="true">→</span><a class="ledger-target" href="/projects/notme/">notme</a></p><ul class="derived-evidence"><li><span class="derived-kind">library</span><span class="derived-detail">@agentic-research/dpop 0.3.0</span><span class="derived-source">canonical-hours/package.json</span></li></ul></li></ul><ul class="derived-list"><li><p class="derived-head"><span class="ledger-dir" aria-hidden="true">←</span><a class="ledger-target" href="/projects/cloister/">cloister</a><span class="kind-tags"><span class="kind-tag">composition</span></span></p></li></ul><div class="derived-weak"><p>Declared, but not asserted. A source names something these repositories are not observed to publish under that name, so the target was identified by matching a name against a convention — true today, and able to go quietly wrong on a rename. Listed rather than dropped, and deliberately excluded from the statements above and from <a href="/graph.json">graph.json</a>'s <code>edges</code>.</p><ul class="derived-unresolved"><li><span class="derived-kind">tenancy</span><span class="derived-detail">canonical-hours → cloister — declares _meta.&quot;art.cloister/v1&quot;</span><span class="derived-source">canonical-hours/server.json — a namespaced _meta key whose owner is identified by a constant in this generator</span></li><li><span class="derived-kind">artifact</span><span class="derived-detail">canonical-hours → mache — mache</span><span class="derived-source">canonical-hours/.mache-version — a `.&lt;tool&gt;-version` filename, where the tool name comes from the FILENAME rather than from anything the target declares</span></li></ul></div></section><section><h2>destinations</h2><ul class="destination-list"><li><a href="https://github.com/agentic-research/canonical-hours">source →</a></li><li><a href="https://github.com/agentic-research/canonical-hours#readme">docs →</a></li></ul></section></article></main><footer class="site-footer"><p><span class="mark" aria-hidden="true">〇</span>.day · agentic research · 2026</p><p><a href="https://github.com/agentic-research">source of record</a> · <a href="https://q-q.dev">notebook</a></p></footer></div></body></html>