<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://ulrich.dev/</loc>
    <lastmod>2026-05-29</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/</loc>
    <lastmod>2026-05-29</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/ai-productivity/</loc>
    <lastmod>2026-05-15</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/ai-security/</loc>
    <lastmod>2026-05-22</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/ai-shipping/</loc>
    <lastmod>2026-05-29</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/tools/</loc>
    <lastmod>2026-05-31</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/work/</loc>
    <lastmod>2026-05-31</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/about/</loc>
    <lastmod>2026-05-31</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/contact/</loc>
    <lastmod>2026-05-31</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/newsletter/sample/</loc>
    <lastmod>2026-05-31</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/a-prompt-library-is-a-codebase-treat-it-like-one/</loc>
    <lastmod>2026-02-20</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/audit-log-underrated-ai-safety-feature/</loc>
    <lastmod>2026-04-15</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/automating-the-boring-40-of-code-review/</loc>
    <lastmod>2026-03-13</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/batch-your-ai-tasks-like-you-batch-your-meetings/</loc>
    <lastmod>2025-09-26</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/building-an-eval-harness-before-you-build-the-feature/</loc>
    <lastmod>2025-11-21</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/caching-prompts-the-cheapest-30-youre-not-taking/</loc>
    <lastmod>2026-01-23</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/charging-for-local-software/</loc>
    <lastmod>2026-04-08</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/data-exfiltration-through-a-helpful-assistant/</loc>
    <lastmod>2025-08-22</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/fallbacks-timeouts-and-the-art-of-degrading-gracefully/</loc>
    <lastmod>2025-10-31</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/how-i-keep-an-ai-pair-from-rewriting-half-the-repo/</loc>
    <lastmod>2026-01-09</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/how-to-roll-out-an-ai-feature-without-a-friday-rollback/</loc>
    <lastmod>2026-02-13</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/indirect-prompt-injection-and-the-documents-you-didnt-write/</loc>
    <lastmod>2026-02-06</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/latency-is-a-feature-not-a-footnote/</loc>
    <lastmod>2026-05-08</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/least-privilege-for-language-models/</loc>
    <lastmod>2026-04-10</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/logging-enough-to-survive-an-incident/</loc>
    <lastmod>2025-12-26</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/memory-files-giving-your-agent-a-working-short-term-brain/</loc>
    <lastmod>2025-11-07</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/output-handling-is-where-the-xss-comes-back/</loc>
    <lastmod>2025-11-14</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/prompt-injection-isnt-a-bug-class-its-a-trust-boundary/</loc>
    <lastmod>2026-05-22</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/rag-pipeline-confused-deputy/</loc>
    <lastmod>2026-04-22</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/reading-other-peoples-threat-models/</loc>
    <lastmod>2026-04-29</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/sandboxing-tool-calls-without-killing-the-product/</loc>
    <lastmod>2025-10-03</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/secrets-tools-and-the-agent-that-read-your-env-file/</loc>
    <lastmod>2025-10-24</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/shipped-ai-feature-friday-liability-monday/</loc>
    <lastmod>2026-05-07</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/shipping-ai-behind-a-flag-you-can-actually-trust/</loc>
    <lastmod>2025-09-19</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/small-automations-that-compound-over-a-quarter/</loc>
    <lastmod>2025-08-15</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/stop-pasting-context-a-better-ide-workflow/</loc>
    <lastmod>2026-04-03</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/streaming-responses-are-a-ux-decision-not-a-transport-one/</loc>
    <lastmod>2026-03-06</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/teaching-an-agent-your-teams-conventions/</loc>
    <lastmod>2025-09-05</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/the-agent-loop-that-replaced-my-saturday/</loc>
    <lastmod>2026-05-15</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/the-blast-radius-of-an-agent-with-one-too-many-tools/</loc>
    <lastmod>2026-05-01</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/the-confused-deputy-comes-for-your-rag-pipeline/</loc>
    <lastmod>2026-01-16</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/the-context-window-is-a-budget-spend-it-deliberately/</loc>
    <lastmod>2025-12-12</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/the-diff-first-workflow-for-ai-assisted-refactors/</loc>
    <lastmod>2025-11-28</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/the-eval-you-skipped-is-the-bug-you-shipped/</loc>
    <lastmod>2026-05-29</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/the-model-upgrade-that-quietly-broke-production/</loc>
    <lastmod>2025-10-10</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/the-prompt-is-the-new-perimeter/</loc>
    <lastmod>2026-05-21</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/the-three-checks-i-run-before-trusting-agent-output/</loc>
    <lastmod>2026-01-30</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/threat-modeling-an-llm-feature-in-one-afternoon/</loc>
    <lastmod>2026-02-27</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/token-accounting-for-people-who-hate-spreadsheets/</loc>
    <lastmod>2025-08-08</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/turning-a-runbook-into-an-agent-in-an-afternoon/</loc>
    <lastmod>2025-12-19</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/what-it-actually-costs-to-run-an-llm-feature-for-a-year/</loc>
    <lastmod>2026-04-17</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/what-owasp-misses-about-llm-agents/</loc>
    <lastmod>2026-05-14</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/what-red-teaming-an-llm-actually-looks-like/</loc>
    <lastmod>2025-12-05</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/when-the-agent-is-faster-but-the-review-is-slower/</loc>
    <lastmod>2025-10-17</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/when-to-fine-tune-when-to-prompt-when-to-walk-away/</loc>
    <lastmod>2025-08-29</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/why-allow-lists-beat-guardrail-prompts/</loc>
    <lastmod>2025-09-12</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/why-your-p95-latency-doubled-after-launch/</loc>
    <lastmod>2026-01-02</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/writing-skills-your-coding-agent-will-actually-use/</loc>
    <lastmod>2026-04-24</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/your-retry-logic-is-lying-to-you/</loc>
    <lastmod>2026-03-27</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/writing/your-system-prompt-is-not-a-security-control/</loc>
    <lastmod>2026-03-20</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/tools/prompt-injection-tester/</loc>
    <lastmod>2026-05-31</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/tools/llm-threat-model-generator/</loc>
    <lastmod>2026-05-31</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/tools/ai-feature-risk-scorer/</loc>
    <lastmod>2026-05-31</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/tools/prompt-hardener/</loc>
    <lastmod>2026-05-31</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/tools/secret-pii-scanner/</loc>
    <lastmod>2026-05-31</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/tools/ai-crawler-checker/</loc>
    <lastmod>2026-05-31</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/tools/securing-an-llm-feature/</loc>
    <lastmod>2026-05-31</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/tools/your-first-ai-incident/</loc>
    <lastmod>2026-05-31</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/tools/threat-modeling-for-agents/</loc>
    <lastmod>2026-05-31</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/tools/security-review-skill/</loc>
    <lastmod>2026-05-31</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/tools/prompt-injection-test-pack/</loc>
    <lastmod>2026-05-31</lastmod>
  </url>
  <url>
    <loc>https://ulrich.dev/tools/threat-model-companion/</loc>
    <lastmod>2026-05-31</lastmod>
  </url>
</urlset>
