<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
  <url>
    <loc>https://logic64.com/blog/why-ai-coding-agents-hallucinate-architecture</loc>
    <image:image>
      <image:loc>https://logic64.com/media/diag-14-where-drift-comes-from.svg</image:loc>
      <image:title>None of these four steps looks like a failure. That&apos;s exactly the problem.</image:title>
      <image:caption>Diagram: a prompt is a request, not a constraint — the model fills a missing decision, the code compiles and runs, and the boundary has already been decided quietly, with no one held to it</image:caption>
    </image:image>
    <image:image>
      <image:loc>https://logic64.com/media/diag-04-governed-vs-unconstrained.svg</image:loc>
      <image:title>Same prompt, two processes. The difference is whether anything checks the output before it ships.</image:title>
      <image:caption>Diagram comparing the same prompt through two processes: without guardrails it ships unchecked, under the governed pattern it is locked and validated before it ships</image:caption>
    </image:image>
    <image:image>
      <image:loc>https://logic64.com/media/diag-02-plan-build-pull.svg</image:loc>
      <image:title>How Logic64 applies the pattern above: Plan, Build, Pull.</image:title>
      <image:caption>Diagram of the Plan, Build, Pull lifecycle with each stage&apos;s real output</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://logic64.com/blog/spec-driven-development-with-claude-code-and-cursor</loc>
    <image:image>
      <image:loc>https://logic64.com/media/diag-05-vibe-coding-session-drift.svg</image:loc>
      <image:title>Neither session knew what the other one decided — the collision just takes two weeks to surface.</image:title>
      <image:caption>Diagram of two separate vibe-coding sessions, days apart, silently assuming different things about the same system, colliding two weeks later as a rewrite</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://logic64.com/blog/what-belongs-in-a-claude-md</loc>
    <image:image>
      <image:loc>https://logic64.com/media/diag-06-claude-md-belongs-vs-not.svg</image:loc>
      <image:title>Both lists above, side by side.</image:title>
      <image:caption>Diagram: what belongs in a CLAUDE.md file versus what does not — exact commands, locked stack, approval boundaries, and doc pointers belong; directory trees, restated decisions, style opinions, and marketing copy do not</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://logic64.com/blog/plan-generate-pull-architecture-first-ai-workflow</loc>
    <image:image>
      <image:loc>https://logic64.com/media/diag-01-system-dataflow.svg</image:loc>
      <image:title>How a request actually moves through the system, end to end.</image:title>
      <image:caption>Diagram of the Logic64 request flow: Frontend to Backend to Queue to Engine, with the SSE stream flowing back and the separate CLI acknowledgement request</image:caption>
    </image:image>
    <image:image>
      <image:loc>https://logic64.com/media/diag-02-plan-build-pull.svg</image:loc>
      <image:title>The same three phases, laid out end to end.</image:title>
      <image:caption>Diagram of the Plan, Build, Pull lifecycle with each stage&apos;s real output</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://logic64.com/blog/logic64-vs-raw-prompting</loc>
    <image:image>
      <image:loc>https://logic64.com/media/diag-07-risk-vs-scale.svg</image:loc>
      <image:title>The risk doesn&apos;t show up on day one. It shows up as the system grows.</image:title>
      <image:caption>Chart showing the risk of an unreviewed assumption causing a bug rising sharply under raw prompting as system complexity grows, while staying low and flat under Logic64&apos;s locked architecture</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://logic64.com/blog/ai-coding-guardrails-for-production-teams</loc>
    <image:image>
      <image:loc>https://logic64.com/media/diag-08-guardrail-pipeline.svg</image:loc>
      <image:title>Four gates, each one able to say no.</image:title>
      <image:caption>Diagram of a generated artifact passing through four checks — schema, routing, dependency approval, and layer boundaries — any of which can reject it before it ships</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://logic64.com/blog/claude-md-vs-skills</loc>
    <image:image>
      <image:loc>https://logic64.com/media/diag-03-where-things-live.svg</image:loc>
      <image:title>Two different loading models, one shared source of truth underneath both.</image:title>
      <image:caption>Diagram showing CLAUDE.md loaded on every session, a Skill loaded only on demand, and both reading from the same docs/okf/ knowledge tree</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://logic64.com/blog/mcp-server-setup-guide</loc>
    <image:image>
      <image:loc>https://logic64.com/media/diag-09-mcp-connection-map.svg</image:loc>
      <image:title>The worked example above, as a connection map — the secret is resolved outside the file, never inside it.</image:title>
      <image:caption>Diagram of Claude Code connecting through three MCP servers to a local filesystem, a Postgres database, and GitHub, with the database credential referenced as an environment variable rather than written into mcp.json</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://logic64.com/blog/how-to-structure-a-saas-project</loc>
    <image:image>
      <image:loc>https://logic64.com/media/diag-01-system-dataflow.svg</image:loc>
      <image:title>One predictable request path, plus the async legs it doesn&apos;t block on — this is that pattern in a real system.</image:title>
      <image:caption>Diagram of the Logic64 request flow: Frontend to Backend to Queue to Engine, with the SSE stream flowing back and the separate CLI acknowledgement request</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://logic64.com/blog/cursor-rules-explained</loc>
    <image:image>
      <image:loc>https://logic64.com/media/diag-10-cursor-rules-actual-comparison.svg</image:loc>
      <image:title>The pairing everyone searches for isn&apos;t the one that actually matches.</image:title>
      <image:caption>Diagram: Cursor rules and CLAUDE.md are both always-on context, the actual comparison; a Skill is a separate category, on-demand capability, not comparable to either</image:caption>
    </image:image>
    <image:image>
      <image:loc>https://logic64.com/media/diag-11-cursor-migration-map.svg</image:loc>
      <image:title>Same role, different file — plus one extra layer.</image:title>
      <image:caption>Diagram: Cursor rules map directly to CLAUDE.md, and Skills sit on top as an additive, on-demand layer, not a replacement for either</image:caption>
    </image:image>
  </url>
  <url>
    <loc>https://logic64.com/blog/best-ai-coding-assistant-tools-compared</loc>
    <image:image>
      <image:loc>https://logic64.com/media/diag-12-three-different-shapes.svg</image:loc>
      <image:title>Same problem space, three different shapes.</image:title>
      <image:caption>Diagram of three different shapes: GitHub Copilot is a plugin inside many editors, Cursor is one self-contained AI-native editor, Claude Code is a CLI tool tied to no editor at all</image:caption>
    </image:image>
    <image:image>
      <image:loc>https://logic64.com/media/diag-13-where-logic64-fits-layer.svg</image:loc>
      <image:title>Not a fourth option in the table above — a layer underneath all three.</image:title>
      <image:caption>Diagram showing Logic64 as a different layer, not a competing coding assistant: it locks the architecture, produces a governed workspace, and any assistant then works inside it</image:caption>
    </image:image>
  </url>
</urlset>