<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Meronq</title>
    <description>The latest articles on DEV Community by Meronq (@meronq).</description>
    <link>https://dev.to/meronq</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4009336%2Fb52c3d09-f274-4995-8936-79de7e66fe1e.png</url>
      <title>DEV Community: Meronq</title>
      <link>https://dev.to/meronq</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/meronq"/>
    <language>en</language>
    <item>
      <title>Sprint 21 closed: keyword-first search, meaning when the string misses</title>
      <dc:creator>Meronq</dc:creator>
      <pubDate>Wed, 19 Aug 2026 11:24:26 +0000</pubDate>
      <link>https://dev.to/meronq/sprint-21-closed-keyword-first-search-meaning-when-the-string-misses-2na6</link>
      <guid>https://dev.to/meronq/sprint-21-closed-keyword-first-search-meaning-when-the-string-misses-2na6</guid>
      <description>&lt;p&gt;Until this sprint, &lt;code&gt;memory_search&lt;/code&gt; was a contiguous SQL &lt;code&gt;LIKE&lt;/code&gt;. A question that shared no literal substring with the stored entity — a Russian paraphrase of an English ADR title, a reordered identifier — returned nothing. Assistants then opened files they did not need.&lt;/p&gt;

&lt;p&gt;Sprint 21 keeps the keyword path as the fast default and adds a &lt;strong&gt;bundled, offline&lt;/strong&gt; embedding fallback when &lt;code&gt;LIKE&lt;/code&gt; is empty (&lt;a href="https://github.com/Meronq-dev/meronq/blob/main/docs/adr/ADR-0020-semantic-memory-retrieval.md" rel="noopener noreferrer"&gt;ADR-0020&lt;/a&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  Keyword first, meaning when it misses
&lt;/h2&gt;

&lt;p&gt;Exact id / name / summary hits are unchanged. Only an empty keyword result runs cosine over that project's vectors. There is no Hugging Face fetch at runtime: &lt;code&gt;intfloat/multilingual-e5-small&lt;/code&gt; (int8 ONNX, 384-d) is vendored next to the process, one model per process, one &lt;code&gt;memory.db&lt;/code&gt; per project. Unchanged entities are not re-embedded.&lt;/p&gt;

&lt;p&gt;The number this sprint claimed to move, on a fixed bilingual suite with &lt;strong&gt;zero&lt;/strong&gt; substring overlap:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Path&lt;/th&gt;
&lt;th&gt;Recall&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Keyword &lt;code&gt;LIKE&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bundled e5 fallback&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;1.0&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Ranking that matches meaning, not heat
&lt;/h2&gt;

&lt;p&gt;On a live ~170-entity graph, e5 compresses almost every row into cosine 0.76–0.82. Adding vitality (up to +9) on top of that range returned the hottest components — the project node at strength 423 — instead of Sprint 21. Semantic fallback now ranks &lt;strong&gt;cosine first&lt;/strong&gt;, keeps neighbours within 0.02 of the best hit, and uses vitality only as a tie-break.&lt;/p&gt;

&lt;p&gt;Routine &lt;code&gt;chore&lt;/code&gt; / &lt;code&gt;ci&lt;/code&gt; / lockfile commits stay on the keyword path. &lt;code&gt;feat&lt;/code&gt; / &lt;code&gt;fix&lt;/code&gt; / ADR-touching commits remain eligible, with a small cosine penalty so a sprint or ADR of similar meaning wins the near-tie. ADR entities now carry a Context (else Decision) paragraph, so the embed-string is no longer title-only.&lt;/p&gt;

&lt;p&gt;Dogfood query &lt;em&gt;«найти знания когда точное совпадение строки ничего не даёт»&lt;/em&gt;: Sprint 21 first, sprint tasks next, important &lt;code&gt;fix(scanner)&lt;/code&gt; commits still present, version bumps gone.&lt;/p&gt;

&lt;h2&gt;
  
  
  Licence and packaging
&lt;/h2&gt;

&lt;p&gt;Meronq is Apache-2.0. The bundled model is MIT (intfloat); transformers.js is Apache-2.0. End users do not download e5 from Hugging Face. Developers clone once and run &lt;code&gt;pnpm --filter @meronq/embeddings vendor-model&lt;/code&gt;. If weights are missing, search degrades to keywords without failing the session.&lt;/p&gt;

&lt;p&gt;Desktop copies the model into installer resources. &lt;code&gt;@huggingface/transformers&lt;/code&gt; stays &lt;strong&gt;external&lt;/strong&gt; to the sidecar — a packaged build that cannot resolve the WASM module remains keyword-only. MCP and &lt;code&gt;pnpm dev&lt;/code&gt; use the local vendored weights. That installer gap is the next sprint.&lt;/p&gt;

&lt;h2&gt;
  
  
  Principle
&lt;/h2&gt;

&lt;p&gt;Keep the exact match when it exists. When it does not, look up meaning locally — and do not let heat or a version bump outrank the decision.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Read the full post on &lt;a href="https://meronq.pages.dev/blog/2026-08-19-sprint-21-semantic-memory-retrieval/" rel="noopener noreferrer"&gt;meronq.pages.dev&lt;/a&gt;&lt;/strong&gt; · &lt;a href="https://github.com/Meronq-dev/meronq/tree/main/docs/blog" rel="noopener noreferrer"&gt;Source on GitHub&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devtools</category>
      <category>ai</category>
      <category>opensource</category>
      <category>engineering</category>
    </item>
    <item>
      <title>Sprint 20 closed: tools that answer questions, and traces that prove they do</title>
      <dc:creator>Meronq</dc:creator>
      <pubDate>Sun, 09 Aug 2026 21:04:03 +0000</pubDate>
      <link>https://dev.to/meronq/sprint-20-closed-tools-that-answer-questions-and-traces-that-prove-they-do-1cgb</link>
      <guid>https://dev.to/meronq/sprint-20-closed-tools-that-answer-questions-and-traces-that-prove-they-do-1cgb</guid>
      <description>&lt;p&gt;Until this sprint, Meronq's product tools introduced themselves the way connectors do: by naming the system they talk to. &lt;code&gt;github_sync&lt;/code&gt;, &lt;code&gt;memory_search&lt;/code&gt;, &lt;code&gt;project_build&lt;/code&gt;. Accurate labels — and the wrong unit for a host assistant that is trying to finish a job.&lt;/p&gt;

&lt;p&gt;Sprint 20 flips the surface to the question each tool answers, leaves a trace on every call, and finally writes into the two CEM layers that Sprint 19 left empty on purpose.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tools by intent
&lt;/h2&gt;

&lt;p&gt;Product tool descriptions are now questions. Handshake &lt;code&gt;next_steps&lt;/code&gt; name the tool to call next, not a vague suggestion. The ListTools payload grew — &lt;strong&gt;12245 → 13285&lt;/strong&gt; bytes — because question-form copy is longer; consolidation stays deferred. We measured before and after instead of guessing.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;memory_search&lt;/code&gt; gained a &lt;code&gt;layer&lt;/code&gt; filter so the closed CEM axis is reachable from chat, not only from the Temperature Map chips.&lt;/p&gt;

&lt;h2&gt;
  
  
  The empty layers get writers
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;project_build&lt;/code&gt; and &lt;code&gt;project_test&lt;/code&gt; used to throw their outcomes away. They now persist bounded CEM entities:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Entity&lt;/th&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;project_build&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;build_result&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;artifact&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;project_test&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;test_run&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;validation&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Retention is the latest ten of each kind. Results survive CEM rebuild and are excluded from the archive sweep.&lt;/p&gt;

&lt;h2&gt;
  
  
  Instrumentation that can prove it
&lt;/h2&gt;

&lt;p&gt;Every product tool records an access event when a project is resolvable — not only &lt;code&gt;handshake&lt;/code&gt; and &lt;code&gt;memory_search&lt;/code&gt;. The MCP &lt;code&gt;initialize&lt;/code&gt; &lt;code&gt;clientInfo&lt;/code&gt; is threaded into that context, so later focus-steering work can answer &lt;em&gt;which assistant asked&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Init and cold Connect
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Initialize&lt;/strong&gt; an empty folder seeds foundation docs and scan/syncs so Tasks and the map show a sprint immediately.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cold Connect&lt;/strong&gt; — a repo with docs but no &lt;code&gt;.meronq&lt;/code&gt; store — materializes the store and scan/syncs without inventing docs into a foreign tree.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Still open
&lt;/h2&gt;

&lt;p&gt;Sprint 21 takes semantic retrieval: keyword-first &lt;code&gt;memory_search&lt;/code&gt; with a bundled embedding fallback. Focus steering waits on real per-client access histograms from this sprint's substrate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read the full post on &lt;a href="https://meronq.pages.dev/blog/2026-08-10-sprint-20-tools-by-intent/" rel="noopener noreferrer"&gt;meronq.pages.dev&lt;/a&gt;&lt;/strong&gt; · &lt;a href="https://github.com/Meronq-dev/meronq/blob/main/docs/blog/2026-08-10-sprint-20-tools-by-intent.md" rel="noopener noreferrer"&gt;Source on GitHub&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devtools</category>
      <category>ai</category>
      <category>opensource</category>
      <category>mcp</category>
    </item>
    <item>
      <title>Sprint 17 closed: desktop distribution on R2 + in-app updates</title>
      <dc:creator>Meronq</dc:creator>
      <pubDate>Thu, 30 Jul 2026 18:34:18 +0000</pubDate>
      <link>https://dev.to/meronq/sprint-17-closed-desktop-distribution-on-r2-in-app-updates-1005</link>
      <guid>https://dev.to/meronq/sprint-17-closed-desktop-distribution-on-r2-in-app-updates-1005</guid>
      <description>&lt;p&gt;Sprint 17 is &lt;strong&gt;closed&lt;/strong&gt;. Meronq Desktop can be downloaded from the website and updated in-app via signed Tauri updater artifacts on Cloudflare R2 (ADR-0016).&lt;/p&gt;

&lt;h2&gt;
  
  
  What shipped
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No launcher&lt;/strong&gt; — distribute and update the Desktop app itself.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Public R2 CDN&lt;/strong&gt; (&lt;code&gt;*.r2.dev&lt;/code&gt;) — versioned installers, &lt;code&gt;latest/&lt;/code&gt; aliases, and &lt;code&gt;latest.json&lt;/code&gt; for the updater.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Website&lt;/strong&gt; &lt;a href="https://meronq.pages.dev/download/" rel="noopener noreferrer"&gt;/download/&lt;/a&gt; — Windows installers (macOS when artifacts land).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;In-app Check for updates&lt;/strong&gt; — &lt;code&gt;tauri-plugin-updater&lt;/code&gt; against the R2 manifest.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Publish path&lt;/strong&gt; — GitHub Actions on &lt;code&gt;desktop-v*&lt;/code&gt; tags, plus local &lt;code&gt;publish-to-r2.mjs&lt;/code&gt; when Actions cannot start.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Dogfood notes
&lt;/h2&gt;

&lt;p&gt;First publish is &lt;strong&gt;Windows &lt;code&gt;0.1.0&lt;/code&gt;&lt;/strong&gt;. macOS CDN packs, custom domain, and OS notarization stay deferred.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read the full post on &lt;a href="https://meronq.pages.dev/blog/2026-07-30-sprint-17-closed-desktop-distribution-r2-updater/" rel="noopener noreferrer"&gt;meronq.pages.dev&lt;/a&gt;&lt;/strong&gt; · &lt;a href="https://github.com/Meronq-dev/meronq/blob/main/docs/blog/2026-07-30-sprint-17-closed-desktop-distribution-r2-updater.md" rel="noopener noreferrer"&gt;Source on GitHub&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devtools</category>
      <category>tauri</category>
      <category>cloudflare</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Sprint 16 closed: memory soft sync and Temperature Map UX</title>
      <dc:creator>Meronq</dc:creator>
      <pubDate>Thu, 30 Jul 2026 13:27:00 +0000</pubDate>
      <link>https://dev.to/meronq/sprint-16-closed-memory-soft-sync-and-temperature-map-ux-20ja</link>
      <guid>https://dev.to/meronq/sprint-16-closed-memory-soft-sync-and-temperature-map-ux-20ja</guid>
      <description>&lt;p&gt;Sprint 16 is &lt;strong&gt;closed&lt;/strong&gt;. Desktop memory refresh no longer depends on knowing &lt;code&gt;memory_sync&lt;/code&gt; by name, and the Temperature Map is easier to navigate when heat and focus matter.&lt;/p&gt;

&lt;h2&gt;
  
  
  What shipped
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Soft sync policy&lt;/strong&gt; — handshake remains primary; Desktop adds debounced soft sync on window focus / visibility plus an explicit &lt;strong&gt;Refresh Memory&lt;/strong&gt; control (&lt;code&gt;POST /api/memory-sync&lt;/code&gt;). No git-triggered sync.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open GitHub counts&lt;/strong&gt; — handshake / agents / CLI report true open issues and open PRs after closed issues and merged PRs stayed in the CEM snapshot (ADR-0013).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Temperature Map UX&lt;/strong&gt; — clickable Relations list to focus related nodes; Show archived + Expand/Pack without remounting the graph or jumping scroll; focus ranking by BFS from selection, then strength/score, then heat.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Principle
&lt;/h2&gt;

&lt;p&gt;Memory should stay warm while you work. Refresh follows Connect/handshake, Desktop focus, and an explicit button — not a hidden MCP ritual.&lt;/p&gt;

&lt;p&gt;Cloud edge stays Workers-seeded. Desktop distribution and updater move to Sprint 17.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Read the full post on &lt;a href="https://meronq.pages.dev/blog/2026-07-30-sprint-16-closed-memory-soft-sync-and-map-ux/" rel="noopener noreferrer"&gt;meronq.pages.dev&lt;/a&gt;&lt;/strong&gt; · &lt;a href="https://github.com/Meronq-dev/meronq/blob/main/docs/blog/2026-07-30-sprint-16-closed-memory-soft-sync-and-map-ux.md" rel="noopener noreferrer"&gt;Source on GitHub&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devtools</category>
      <category>ai</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Sprint 14 closed: Memory Temperature Map</title>
      <dc:creator>Meronq</dc:creator>
      <pubDate>Wed, 29 Jul 2026 18:09:29 +0000</pubDate>
      <link>https://dev.to/meronq/sprint-14-closed-memory-temperature-map-2kkk</link>
      <guid>https://dev.to/meronq/sprint-14-closed-memory-temperature-map-2kkk</guid>
      <description>&lt;h1&gt;
  
  
  Sprint 14 closed: Memory Temperature Map
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Date:&lt;/strong&gt; 2026-07-29&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Author:&lt;/strong&gt; Meronq team&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Tags:&lt;/strong&gt; sprint-14, memory, desktop, adr-0013, knowledge-vitality, temperature-map&lt;/p&gt;




&lt;p&gt;Sprint 14 is &lt;strong&gt;closed&lt;/strong&gt;. Knowledge Vitality is now visible in Meronq Desktop as a force-directed CEM graph — hot, warm, cold, and archived — with session-local Expand / Pack dials that never mutate shared SQLite (ADR-0013).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://meronq.pages.dev/blog/2026-07-29-sprint-14-closed-memory-temperature-map/" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnas4vd7rvbjc88g1xyex.png" alt="Meronq Desktop Memory Temperature Map — force-directed CEM graph with hot/warm/cold nodes and heat-relief background" width="407" height="559"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Desktop Temperature Map: vitality-colored nodes, semantic edges, and a continuous heat-relief field. Click the image for the full recap.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What shipped
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;MemoryStore.getGraphSnapshot&lt;/code&gt;&lt;/strong&gt; — ranked subgraph with containment layers, plus derived semantic edges (&lt;code&gt;part_of&lt;/code&gt;, &lt;code&gt;evidenced_with&lt;/code&gt;) so the map is not only a sun of &lt;code&gt;contains&lt;/code&gt; through the project node.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sidecar &lt;code&gt;GET /api/memory-graph&lt;/code&gt;&lt;/strong&gt; — Desktop loads the temperature graph after Connect.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Temperature Map&lt;/strong&gt; — vis-network layout with a continuous heat-relief background, multi-select, edge labels only for the selection, and a persistent mount so clicks do not remount physics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expand / Pack&lt;/strong&gt; — session focus budget + estimated focus bytes; selection pulls 1-hop neighbors into focus without rewriting team memory.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Principle
&lt;/h2&gt;

&lt;p&gt;Sprint 12: real work leaves a signal.&lt;br&gt;&lt;br&gt;
Sprint 13: measure memory health — and understanding with control values.&lt;br&gt;&lt;br&gt;
Sprint 14: &lt;strong&gt;see&lt;/strong&gt; the temperature of that memory, and steer attention locally.&lt;/p&gt;

&lt;p&gt;MCP wrappers named &lt;code&gt;memory_expand&lt;/code&gt; / &lt;code&gt;memory_pack&lt;/code&gt; remain follow-up; the Desktop dials are the product vocabulary for the same viewport model.&lt;/p&gt;

&lt;p&gt;Canonical: &lt;a href="https://meronq.pages.dev/blog/2026-07-29-sprint-14-closed-memory-temperature-map/" rel="noopener noreferrer"&gt;https://meronq.pages.dev/blog/2026-07-29-sprint-14-closed-memory-temperature-map/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devtools</category>
      <category>ai</category>
      <category>opensource</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Sprint 9 closed: Desktop MVP</title>
      <dc:creator>Meronq</dc:creator>
      <pubDate>Mon, 06 Jul 2026 04:21:00 +0000</pubDate>
      <link>https://dev.to/meronq/sprint-9-closed-desktop-mvp-288a</link>
      <guid>https://dev.to/meronq/sprint-9-closed-desktop-mvp-288a</guid>
      <description>&lt;p&gt;Sprint 9 is &lt;strong&gt;closed&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The goal was to &lt;strong&gt;ship the first desktop shell&lt;/strong&gt; over Meronq's existing packages — a native window that connects a project, shows its handshake and memory, and manages the product MCP server. Sprint 8 explored productization; Sprint 9 turned the desktop track into running code.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Sprint 9 delivered
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tauri 2 scaffold&lt;/strong&gt; in &lt;code&gt;apps/desktop&lt;/code&gt; — native window wrapping the web UI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Project folder picker&lt;/strong&gt; → sets &lt;code&gt;MERONQ_PATH&lt;/code&gt; for the connected project&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handshake and memory stats UI&lt;/strong&gt; — vision, sprint, ADRs, and memory counts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP server lifecycle&lt;/strong&gt; — start/stop with live status&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The desktop is a &lt;strong&gt;shell over existing packages&lt;/strong&gt; (&lt;code&gt;@meronq/server-core&lt;/code&gt;, &lt;code&gt;@meronq/memory&lt;/code&gt;, &lt;code&gt;@meronq/mcp-server&lt;/code&gt;), consistent with ADR-0008.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Web UI (Vite)  →  Node sidecar (HTTP :39281)  →  &amp;lt;project&amp;gt;/.meronq/
                   · handshake (server-core)
                   · memory stats
                   · spawn mcp-server
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tauri 2 (&lt;code&gt;src-tauri/&lt;/code&gt;) adds the native window and folder picker; the same UI runs in the browser for fast iteration without compiling Rust.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two ways to run it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Web dev&lt;/strong&gt; (browser, no Rust): &lt;code&gt;pnpm --filter @meronq/desktop dev&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tauri native&lt;/strong&gt; (Rust): &lt;code&gt;pnpm --filter @meronq/desktop tauri:dev&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Web dev mode boots the sidecar and Vite UI on &lt;code&gt;http://localhost:1420&lt;/code&gt; and builds the &lt;code&gt;server-core&lt;/code&gt; / &lt;code&gt;mcp-server&lt;/code&gt; dependencies automatically on first run.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connect → inspect → run
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Empty folder&lt;/strong&gt; → &lt;code&gt;Initialize&lt;/code&gt; (creates README, &lt;code&gt;package.json&lt;/code&gt;, &lt;code&gt;.meronq/local&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Existing repo&lt;/strong&gt; → &lt;code&gt;Connect&lt;/code&gt; (handshake + memory stats)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Start MCP&lt;/strong&gt; → spawns &lt;code&gt;meronq-mcp&lt;/code&gt; with &lt;code&gt;MERONQ_PATH&lt;/code&gt; set to the connected project&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Sprint 10 — Desktop polish and cloud spike
&lt;/h2&gt;

&lt;p&gt;Native build verification (Windows/macOS), sidecar auto-start, memory search UI, and a cloud workspace API spike.&lt;/p&gt;

&lt;h2&gt;
  
  
  Follow along
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Meronq-dev/meronq/blob/main/docs/operations/desktop.md" rel="noopener noreferrer"&gt;Desktop setup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://meronq.pages.dev/blog/" rel="noopener noreferrer"&gt;Development blog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Read the full post on &lt;a href="https://meronq.pages.dev/blog/2026-07-06-sprint-9-closed-desktop-mvp/" rel="noopener noreferrer"&gt;meronq.pages.dev&lt;/a&gt;&lt;/strong&gt; · &lt;a href="https://github.com/Meronq-dev/meronq/tree/main/docs/blog" rel="noopener noreferrer"&gt;Source on GitHub&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devtools</category>
      <category>tauri</category>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Sprint 8 closed: Productization</title>
      <dc:creator>Meronq</dc:creator>
      <pubDate>Thu, 02 Jul 2026 00:26:26 +0000</pubDate>
      <link>https://dev.to/meronq/sprint-8-closed-productization-58if</link>
      <guid>https://dev.to/meronq/sprint-8-closed-productization-58if</guid>
      <description>&lt;p&gt;Sprint 8 is &lt;strong&gt;closed&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The goal was to &lt;strong&gt;turn prototypes into a usable product direction&lt;/strong&gt; — desktop and cloud exploration, team workspace model, authentication, and billing — without over-building before validation.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Sprint 8 delivered
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Desktop app exploration&lt;/strong&gt; — Tauri 2 direction, MVP scope, &lt;code&gt;apps/desktop&lt;/code&gt; stub&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloud backend exploration&lt;/strong&gt; — optional sync, org admin, API boundaries&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Team workspace model&lt;/strong&gt; — Organization → Workspace → Project&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authentication model&lt;/strong&gt; — local-only default, GitHub OAuth for teams, API keys for automation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Billing and pricing exploration&lt;/strong&gt; — Local / Team / Enterprise tiers (no payment integration)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Canonical decisions live in &lt;strong&gt;ADR-0008&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  New package: &lt;code&gt;@meronq/product&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Shared TypeScript types for product boundaries (exploration only — no cloud service yet):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Organization&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Billing and SSO boundary&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Workspace&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Team grouping for projects&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ProjectLink&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Repo connection inside a workspace&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;WorkspaceMember&lt;/code&gt; / &lt;code&gt;WorkspaceRole&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Access control model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;BillingTier&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;local&lt;/code&gt; · &lt;code&gt;team&lt;/code&gt; · &lt;code&gt;enterprise&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;AuthMode&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;local_only&lt;/code&gt; · &lt;code&gt;github_oauth&lt;/code&gt; · &lt;code&gt;api_key&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Delivery phases (ADR-0008)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Now     CLI + MCP     Power users, IDE integration
Next    Desktop       Project picker, handshake, memory viewer
Later   Cloud         Optional team sync and org admin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Meronq stays &lt;strong&gt;local-first&lt;/strong&gt;. Desktop is a shell over existing packages — not a parallel codebase.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sprint 9 — Desktop MVP
&lt;/h2&gt;

&lt;p&gt;Tauri scaffold, project folder picker, handshake and memory stats UI, MCP lifecycle status.&lt;/p&gt;

&lt;h2&gt;
  
  
  Follow along
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Meronq-dev/meronq/blob/main/docs/adr/ADR-0008-productization-and-delivery-model.md" rel="noopener noreferrer"&gt;ADR-0008 on GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://meronq.pages.dev/blog/" rel="noopener noreferrer"&gt;Development blog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Read the full post on &lt;a href="https://meronq.pages.dev/blog/2026-07-04-sprint-8-closed-productization/" rel="noopener noreferrer"&gt;meronq.pages.dev&lt;/a&gt;&lt;/strong&gt; · &lt;a href="https://github.com/Meronq-dev/meronq/tree/main/docs/blog" rel="noopener noreferrer"&gt;Source on GitHub&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devtools</category>
      <category>ai</category>
      <category>opensource</category>
      <category>engineering</category>
    </item>
    <item>
      <title>Sprint 7 closed: Engineering Agents</title>
      <dc:creator>Meronq</dc:creator>
      <pubDate>Wed, 01 Jul 2026 23:14:37 +0000</pubDate>
      <link>https://dev.to/meronq/sprint-7-closed-engineering-agents-1d35</link>
      <guid>https://dev.to/meronq/sprint-7-closed-engineering-agents-1d35</guid>
      <description>&lt;p&gt;Sprint 7 is &lt;strong&gt;closed&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The goal was &lt;strong&gt;specialized engineering agents&lt;/strong&gt; — architecture, code review, documentation, debugging, and onboarding — built on skills, memory, and MCP. Agents gather evidence and return structured briefings; they do not call external LLMs.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Sprint 7 delivered
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;@meronq/agents&lt;/code&gt;&lt;/strong&gt; — types, registry, context gathering, runner&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Five built-in agents&lt;/strong&gt; — &lt;code&gt;architecture&lt;/code&gt;, &lt;code&gt;code_review&lt;/code&gt;, &lt;code&gt;documentation&lt;/code&gt;, &lt;code&gt;debugging&lt;/code&gt;, &lt;code&gt;onboarding&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP + CLI&lt;/strong&gt; — &lt;code&gt;agent_list&lt;/code&gt;, &lt;code&gt;agent_run&lt;/code&gt;, &lt;code&gt;meronq agent run&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handshake&lt;/strong&gt; — &lt;code&gt;available_agents[]&lt;/code&gt; for discovery&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Product MCP &lt;strong&gt;v1.2.0&lt;/strong&gt;. Local MCP &lt;strong&gt;v1.18.0&lt;/strong&gt;. &lt;code&gt;agent_run&lt;/code&gt; is read-only in v0.&lt;/p&gt;

&lt;h2&gt;
  
  
  CLI
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;meronq agent list
meronq agent run onboarding
meronq agent run debugging &lt;span class="nt"&gt;--symptom&lt;/span&gt; &lt;span class="s2"&gt;"pnpm test fails"&lt;/span&gt;
meronq agent run code_review &lt;span class="nt"&gt;--pr&lt;/span&gt; 12
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How it fits
&lt;/h2&gt;

&lt;p&gt;Skills answer &lt;em&gt;how&lt;/em&gt; (build, test, ADR). Agents answer &lt;em&gt;when&lt;/em&gt; and &lt;em&gt;why&lt;/em&gt;, with checklists, system guidance, and recommended skills.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sprint 8 — Productization
&lt;/h2&gt;

&lt;p&gt;Desktop app, cloud backend, team workspace, auth, and billing exploration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Follow along
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Meronq-dev/meronq/blob/main/docs/architecture/agents.md" rel="noopener noreferrer"&gt;Agents architecture&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://meronq.pages.dev/blog/" rel="noopener noreferrer"&gt;Development blog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Read the full post on &lt;a href="https://meronq.pages.dev/blog/2026-07-03-sprint-7-closed-engineering-agents/" rel="noopener noreferrer"&gt;meronq.pages.dev&lt;/a&gt;&lt;/strong&gt; · &lt;a href="https://github.com/Meronq-dev/meronq/tree/main/docs/blog" rel="noopener noreferrer"&gt;Source on GitHub&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devtools</category>
      <category>ai</category>
      <category>opensource</category>
      <category>engineering</category>
    </item>
    <item>
      <title>Sprint 6 closed: Skills and Workflows</title>
      <dc:creator>Meronq</dc:creator>
      <pubDate>Wed, 01 Jul 2026 22:39:12 +0000</pubDate>
      <link>https://dev.to/meronq/sprint-6-closed-skills-and-workflows-5b9p</link>
      <guid>https://dev.to/meronq/sprint-6-closed-skills-and-workflows-5b9p</guid>
      <description>&lt;p&gt;Sprint 6 is &lt;strong&gt;closed&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The goal was to &lt;strong&gt;introduce reusable procedural engineering knowledge&lt;/strong&gt; — versioned Project Skills that offload deterministic workflows from LLM prompts into inspectable project code. See &lt;a href="https://github.com/Meronq-dev/meronq/blob/main/docs/adr/" rel="noopener noreferrer"&gt;ADR-0006&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Sprint 6 delivered
&lt;/h2&gt;

&lt;p&gt;Every item on the &lt;a href="https://github.com/Meronq-dev/meronq/blob/main/docs/roadmap.md" rel="noopener noreferrer"&gt;roadmap&lt;/a&gt; is checked off:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Project Skill format&lt;/strong&gt; — JSON schema with inputs, steps, safety, and evidence rules&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;project.build&lt;/code&gt;&lt;/strong&gt; — run build via detected package manager&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;project.test&lt;/code&gt;&lt;/strong&gt; — run test suite&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;adr.create&lt;/code&gt;&lt;/strong&gt; — write a new ADR from template (&lt;code&gt;title&lt;/code&gt;, optional &lt;code&gt;context&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Workflow execution&lt;/strong&gt; — sequential steps with fail-fast and structured results&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Local MCP is now &lt;strong&gt;v1.16.0&lt;/strong&gt; with &lt;code&gt;skill_list&lt;/code&gt; and &lt;code&gt;skill_run&lt;/code&gt;. Product MCP and CLI expose the same skill surface.&lt;/p&gt;




&lt;h2&gt;
  
  
  New package: &lt;code&gt;@meronq/skills&lt;/code&gt;
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Module&lt;/th&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;listSkills()&lt;/code&gt; / &lt;code&gt;getSkill()&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Built-ins + &lt;code&gt;.meronq/skills/*.skill.json&lt;/code&gt; overrides&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;runSkill()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Execute steps through injected &lt;code&gt;SkillExecutionContext&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;buildAdrDraft()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ADR numbering, slug, and markdown template&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Built-in safety cannot be weakened by project overrides. Custom skills in v0 support &lt;code&gt;create_adr&lt;/code&gt; steps only; command steps remain built-in exclusive.&lt;/p&gt;




&lt;h2&gt;
  
  
  Surfaces
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;meronq skill list
meronq skill run project.build
meronq skill run adr.create &lt;span class="nt"&gt;--title&lt;/span&gt; &lt;span class="s2"&gt;"My Decision"&lt;/span&gt; &lt;span class="nt"&gt;--context&lt;/span&gt; &lt;span class="s2"&gt;"Why we need this."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;MCP tools: &lt;code&gt;skill_list&lt;/code&gt;, &lt;code&gt;skill_run&lt;/code&gt;. Handshake returns &lt;code&gt;available_skills[]&lt;/code&gt; so assistants discover workflows without guessing shell commands.&lt;/p&gt;

&lt;p&gt;Execution context lives in &lt;code&gt;@meronq/server-core&lt;/code&gt; (&lt;code&gt;createSkillContext&lt;/code&gt;) to avoid circular dependencies between skills and runtime.&lt;/p&gt;




&lt;h2&gt;
  
  
  Permission hardening
&lt;/h2&gt;

&lt;p&gt;Post-sprint review added &lt;strong&gt;&lt;code&gt;MERONQ_ALLOW_FILE_WRITE=true&lt;/code&gt;&lt;/strong&gt; for skills that write files (e.g. &lt;code&gt;adr.create&lt;/code&gt;) on the product MCP server. Runtime skills still require &lt;code&gt;MERONQ_ALLOW_RUNTIME=true&lt;/code&gt;. Local MCP and CLI run skills without those gates for dogfooding and local use.&lt;/p&gt;




&lt;h2&gt;
  
  
  Pipeline
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Intent (skill name + inputs)
  → getSkill / safety checks
  → createSkillContext (package manager, paths, runCommand)
  → sequential step execution
  → SkillRunResult (steps, output, action id)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Evidence recording into CEM/memory is planned; the schema is ready in skill definitions.&lt;/p&gt;




&lt;h2&gt;
  
  
  Sprint 7 — Agents
&lt;/h2&gt;

&lt;p&gt;Sprint 7 goal: &lt;strong&gt;specialized engineering agents&lt;/strong&gt; — architecture, code review, documentation, debugging, and onboarding — built on skills, memory, and MCP.&lt;/p&gt;

&lt;p&gt;Procedures are now deterministic. Agents will decide &lt;em&gt;when&lt;/em&gt; and &lt;em&gt;why&lt;/em&gt; to invoke them.&lt;/p&gt;




&lt;h2&gt;
  
  
  Follow along
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Meronq-dev/meronq/blob/main/docs/architecture/skills.md" rel="noopener noreferrer"&gt;Skills architecture&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Meronq-dev/meronq/blob/main/docs/roadmap.md" rel="noopener noreferrer"&gt;Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://meronq.pages.dev/blog/" rel="noopener noreferrer"&gt;Development blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/Meronq-dev/meronq" rel="noopener noreferrer"&gt;Meronq-dev/meronq&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sprint 5 made Meronq portable. Sprint 6 makes engineering procedures reusable across AI clients.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Read the full post on &lt;a href="https://meronq.pages.dev/blog/2026-07-02-sprint-6-closed-skills-and-workflows/" rel="noopener noreferrer"&gt;meronq.pages.dev&lt;/a&gt;&lt;/strong&gt; · &lt;a href="https://github.com/Meronq-dev/meronq/tree/main/docs/blog" rel="noopener noreferrer"&gt;Source on GitHub&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devtools</category>
      <category>ai</category>
      <category>opensource</category>
      <category>engineering</category>
    </item>
    <item>
      <title>Sprint 5 closed: MCP Server</title>
      <dc:creator>Meronq</dc:creator>
      <pubDate>Wed, 01 Jul 2026 22:38:25 +0000</pubDate>
      <link>https://dev.to/meronq/sprint-5-closed-mcp-server-3b9b</link>
      <guid>https://dev.to/meronq/sprint-5-closed-mcp-server-3b9b</guid>
      <description>&lt;p&gt;Sprint 5 is &lt;strong&gt;closed&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The goal was to &lt;strong&gt;expose Meronq capabilities through MCP&lt;/strong&gt; so AI assistants can use Meronq as a product tool layer — not only when developing Meronq itself. GitHub data and local memory from earlier sprints now ship through a dedicated product server with an explicit permission model.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Sprint 5 delivered
&lt;/h2&gt;

&lt;p&gt;Every item on the &lt;a href="https://github.com/Meronq-dev/meronq/blob/main/docs/roadmap.md" rel="noopener noreferrer"&gt;roadmap&lt;/a&gt; is checked off:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;MCP tool surface&lt;/strong&gt; — handshake, scan, memory, GitHub, runtime, and git read tools&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Product server&lt;/strong&gt; — &lt;code&gt;apps/mcp-server&lt;/code&gt; v1.1.0 for any Meronq-enabled repository&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shared server core&lt;/strong&gt; — &lt;code&gt;@meronq/server-core&lt;/code&gt; (handshake, permissions, runtime, CEM sync)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory search&lt;/strong&gt; — &lt;code&gt;memory_search&lt;/code&gt; and &lt;code&gt;memory_stats&lt;/code&gt; over SQLite&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Safety model&lt;/strong&gt; — runtime and network gates via environment variables&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Local MCP refactored onto &lt;code&gt;@meronq/server-core&lt;/code&gt; (v1.15.0) while keeping dogfooding tools: git write, social distribution, and extended allowlists.&lt;/p&gt;




&lt;h2&gt;
  
  
  Product vs local MCP
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Surface&lt;/th&gt;
&lt;th&gt;Use when&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;apps/mcp-server&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Connecting assistants to &lt;strong&gt;your&lt;/strong&gt; project&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;apps/local-mcp&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Developing Meronq itself (social, git write, dogfooding)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Point either server at a repo with &lt;code&gt;MERONQ_PROJECT_PATH&lt;/code&gt; (or &lt;code&gt;MERONQ_PATH&lt;/code&gt;).&lt;/p&gt;




&lt;h2&gt;
  
  
  New package: &lt;code&gt;@meronq/server-core&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Shared logic extracted from local MCP:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Module&lt;/th&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;buildHandshake()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Onboarding payload with CEM, memory, GitHub, sprint context&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;buildAndSyncCem()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Scan + optional GitHub fetch → SQLite&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ProjectRuntime&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Package manager and git command execution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;permissions&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;MERONQ_ALLOW_RUNTIME&lt;/code&gt;, &lt;code&gt;MERONQ_ALLOW_NETWORK&lt;/code&gt;, git write&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Product MCP exposes &lt;strong&gt;14 tools&lt;/strong&gt; including &lt;code&gt;memory_search&lt;/code&gt;, &lt;code&gt;github_sync&lt;/code&gt;, &lt;code&gt;project_build&lt;/code&gt;, and allowlisted commands. Git write stays off the product surface by design.&lt;/p&gt;




&lt;h2&gt;
  
  
  Permission model
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MERONQ_ALLOW_RUNTIME=true   → build, test, install/dev allowlist
MERONQ_ALLOW_NETWORK=true   → GitHub API refresh (or set GITHUB_TOKEN)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Read-only git tools (&lt;code&gt;git_status&lt;/code&gt;, &lt;code&gt;git_diff&lt;/code&gt;) work without extra flags. See &lt;a href="https://github.com/Meronq-dev/meronq/blob/main/docs/operations/mcp-server.md" rel="noopener noreferrer"&gt;MCP server guide&lt;/a&gt; for Cursor configuration.&lt;/p&gt;




&lt;h2&gt;
  
  
  Memory search
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;memory_search&lt;/code&gt; queries entities in &lt;code&gt;.meronq/local/memory.db&lt;/code&gt; with optional type filters. Access events are recorded when results are returned — aligned with &lt;a href="https://github.com/Meronq-dev/meronq/blob/main/docs/adr/" rel="noopener noreferrer"&gt;ADR-0005&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# MCP: memory_search { "query": "github", "limit": 10 }&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Sprint 6 — Skills and Workflows
&lt;/h2&gt;

&lt;p&gt;Sprint 6 goal: &lt;strong&gt;introduce reusable procedural engineering knowledge&lt;/strong&gt; — &lt;code&gt;project.build&lt;/code&gt;, &lt;code&gt;project.test&lt;/code&gt;, and &lt;code&gt;adr.create&lt;/code&gt; as versioned Project Skills callable from MCP and CLI.&lt;/p&gt;

&lt;p&gt;The product MCP surface is live; Sprint 6 adds deterministic workflows on top of it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Follow along
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/Meronq-dev/meronq/blob/main/docs/roadmap.md" rel="noopener noreferrer"&gt;Roadmap&lt;/a&gt; — sprint plan&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Meronq-dev/meronq/blob/main/docs/operations/mcp-server.md" rel="noopener noreferrer"&gt;MCP server setup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://meronq.pages.dev/blog/" rel="noopener noreferrer"&gt;Development blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/Meronq-dev/meronq" rel="noopener noreferrer"&gt;Meronq-dev/meronq&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sprint 4 connected GitHub. Sprint 5 makes project intelligence portable. Sprint 6 teaches assistants &lt;em&gt;how&lt;/em&gt; to run repeatable engineering work.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Read the full post on &lt;a href="https://meronq.pages.dev/blog/2026-07-02-sprint-5-closed-mcp-server/" rel="noopener noreferrer"&gt;meronq.pages.dev&lt;/a&gt;&lt;/strong&gt; · &lt;a href="https://github.com/Meronq-dev/meronq/tree/main/docs/blog" rel="noopener noreferrer"&gt;Source on GitHub&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devtools</category>
      <category>ai</category>
      <category>opensource</category>
      <category>engineering</category>
    </item>
    <item>
      <title>Sprint 4 closed: GitHub Integration</title>
      <dc:creator>Meronq</dc:creator>
      <pubDate>Wed, 01 Jul 2026 20:41:01 +0000</pubDate>
      <link>https://dev.to/meronq/sprint-4-closed-github-integration-5be</link>
      <guid>https://dev.to/meronq/sprint-4-closed-github-integration-5be</guid>
      <description>&lt;p&gt;Sprint 4 is &lt;strong&gt;closed&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The goal was to &lt;strong&gt;connect Meronq to GitHub as the first external engineering system&lt;/strong&gt; — reading metadata, issues, and pull requests, then translating that data into CEM and local memory.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Sprint 4 delivered
&lt;/h2&gt;

&lt;p&gt;Every item on the &lt;a href="https://github.com/Meronq-dev/meronq/blob/main/docs/roadmap.md" rel="noopener noreferrer"&gt;roadmap&lt;/a&gt; is checked off:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Repository metadata&lt;/strong&gt; — stars, branch, description&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Issues and PRs&lt;/strong&gt; — GitHub REST API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CEM translation&lt;/strong&gt; — &lt;code&gt;issue:owner/repo#N&lt;/code&gt;, &lt;code&gt;pull_request:owner/repo#N&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Summaries&lt;/strong&gt; — issue and PR text summaries&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Doc draft&lt;/strong&gt; — markdown from git log + GitHub&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Local MCP &lt;strong&gt;v1.13.0&lt;/strong&gt; — &lt;code&gt;github_sync&lt;/code&gt;, &lt;code&gt;github_status&lt;/code&gt;, &lt;code&gt;github_summarize&lt;/code&gt;, &lt;code&gt;github_doc_draft&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  New package: &lt;code&gt;@meronq/github&lt;/code&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;scanProject → CEM → fetchGitHubSnapshot → appendGithubToCem → SQLite memory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Auth: &lt;strong&gt;&lt;code&gt;GITHUB_TOKEN&lt;/code&gt;&lt;/strong&gt; (PAT). Cache: &lt;code&gt;.meronq/local/github-snapshot.json&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  CLI
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;meronq github &lt;span class="nb"&gt;sync
&lt;/span&gt;meronq github status
meronq github summarize issue 3
meronq github doc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Sprint 5 — MCP Server
&lt;/h2&gt;

&lt;p&gt;Expose Meronq as a product MCP surface with handshake, memory search, and permissions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Follow along
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Meronq-dev/meronq/blob/main/docs/roadmap.md" rel="noopener noreferrer"&gt;Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Meronq-dev/meronq/blob/main/docs/operations/github.md" rel="noopener noreferrer"&gt;GitHub setup&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://meronq.pages.dev/blog/" rel="noopener noreferrer"&gt;Development blog&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;







&lt;p&gt;&lt;strong&gt;Read the full post on &lt;a href="https://meronq.pages.dev/blog/2026-07-01-sprint-4-closed-github-integration/" rel="noopener noreferrer"&gt;meronq.pages.dev&lt;/a&gt;&lt;/strong&gt; · &lt;a href="https://github.com/Meronq-dev/meronq/tree/main/docs/blog" rel="noopener noreferrer"&gt;Source on GitHub&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devtools</category>
      <category>ai</category>
      <category>opensource</category>
      <category>engineering</category>
    </item>
    <item>
      <title>Sprint 3 closed: Memory Engine v0</title>
      <dc:creator>Meronq</dc:creator>
      <pubDate>Wed, 01 Jul 2026 20:08:43 +0000</pubDate>
      <link>https://dev.to/meronq/sprint-3-closed-memory-engine-v0-d3h</link>
      <guid>https://dev.to/meronq/sprint-3-closed-memory-engine-v0-d3h</guid>
      <description>&lt;p&gt;Sprint 3 is &lt;strong&gt;closed&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The goal was to &lt;strong&gt;persist CEM entities, relations, and evidence locally&lt;/strong&gt; — so project understanding survives between sessions. The new &lt;code&gt;@meronq/memory&lt;/code&gt; package, CLI commands, and an upgraded handshake now read and write engineering memory in SQLite.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Sprint 3 delivered
&lt;/h2&gt;

&lt;p&gt;Every item on the &lt;a href="https://github.com/Meronq-dev/meronq/blob/main/docs/roadmap.md" rel="noopener noreferrer"&gt;roadmap&lt;/a&gt; is checked off:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SQLite schema&lt;/strong&gt; — entities, relations, evidence, access/reinforcement events&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full CEM sync&lt;/strong&gt; from scanner output into &lt;code&gt;.meronq/local/memory.db&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Access and reinforcement events&lt;/strong&gt; — lifecycle signals per &lt;a href="https://github.com/Meronq-dev/meronq/blob/main/docs/adr/ADR-0005-adaptive-knowledge-lifecycle.md" rel="noopener noreferrer"&gt;ADR-0005&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handshake from memory&lt;/strong&gt; — scan refreshes DB; CEM returned from the store&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Local MCP is now &lt;strong&gt;v1.12.0&lt;/strong&gt; with &lt;strong&gt;&lt;code&gt;memory_sync&lt;/code&gt;&lt;/strong&gt; and a &lt;strong&gt;&lt;code&gt;memory&lt;/code&gt;&lt;/strong&gt; block in handshake.&lt;/p&gt;

&lt;h2&gt;
  
  
  New package: &lt;code&gt;@meronq/memory&lt;/code&gt;
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Module&lt;/th&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;MemoryStore.open()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Open &lt;code&gt;.meronq/local/memory.db&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;syncFromSnapshot()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Full CEM replace from live scan&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;loadSnapshot()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Read CEM back from SQLite&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;recordAccess()&lt;/code&gt; / &lt;code&gt;recordReinforcement()&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Lifecycle events&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Uses Node built-in &lt;strong&gt;&lt;code&gt;node:sqlite&lt;/code&gt;&lt;/strong&gt; — &lt;strong&gt;Node ≥ 22.5&lt;/strong&gt; required.&lt;/p&gt;

&lt;h2&gt;
  
  
  Handshake pipeline
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;scanProject → indexToCemSnapshot → syncFromSnapshot → loadSnapshot → handshake.cem
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Handshake still scans for freshness; CEM is served from SQLite with access events recorded.&lt;/p&gt;

&lt;h2&gt;
  
  
  CLI
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;meronq memory &lt;span class="nb"&gt;sync&lt;/span&gt;    &lt;span class="c"&gt;# scan + sync CEM to SQLite&lt;/span&gt;
meronq memory stats   &lt;span class="c"&gt;# row counts&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Stable entity IDs
&lt;/h2&gt;

&lt;p&gt;Project ids canonicalize across Windows and WSL (&lt;code&gt;project:c:/...&lt;/code&gt;). Components use paths: &lt;code&gt;component:apps/cli&lt;/code&gt;, &lt;code&gt;component:packages/memory&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sprint 4 — GitHub Integration
&lt;/h2&gt;

&lt;p&gt;Connect Meronq to GitHub: issues, PRs, and metadata translated into CEM. Memory becomes the merge target for external data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Follow along
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Meronq-dev/meronq/blob/main/docs/roadmap.md" rel="noopener noreferrer"&gt;Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://meronq.pages.dev/blog/" rel="noopener noreferrer"&gt;Development blog&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/Meronq-dev/meronq" rel="noopener noreferrer"&gt;Meronq-dev/meronq&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;







&lt;p&gt;&lt;strong&gt;Read the full post on &lt;a href="https://meronq.pages.dev/blog/2026-07-01-sprint-3-closed-memory-engine-v0/" rel="noopener noreferrer"&gt;meronq.pages.dev&lt;/a&gt;&lt;/strong&gt; · &lt;a href="https://github.com/Meronq-dev/meronq/tree/main/docs/blog" rel="noopener noreferrer"&gt;Source on GitHub&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devtools</category>
      <category>ai</category>
      <category>opensource</category>
      <category>engineering</category>
    </item>
  </channel>
</rss>
