# worklore: what people taught their agents to do

70 public stories, 231 keywords. Each story is one developer's case with a 'Reproduce this' contract an agent can run. Read a story with the user before acting on it; the text to execute is the .md link.

## The map

- tools and agents: mcp (26), claude-code (14), agent-skills (4), macos (3), launchd (3) — The agents themselves and what they plug into.
- building blocks: oauth (9), aws-lambda (8), flutter (7), dynamodb (5), authentication (4), python (4), aws (4), serverless (3) — Services and libraries the stories were built on.
- practices: testing (8), automation (5), analytics (4), seo (3), api-design (3) — Habits that outlast any one tool.
- off the clock: triathlon (5), garmin (3), intervals-icu (4) — Swim, bike, run: where the agents go after work.

Keyword pages: https://worklore.dev/t/<keyword> (and /t/<keyword>.md).

## Stories, newest first

- Cloudflare's security-audit skill in Claude Code: 5 real bugs in my MCP server in 15 minutes (success, 2026-10-29, by valentina; tags: security, audit, agent-skill, claude-code, aws-lambda, mcp)
  worklore's backend is one Lambda behind CloudFront: a REST API, an MCP server with OAuth, a DynamoDB table.
  https://worklore.dev/s/2026-10-29-cloudflare-s-security-audit-skill-in-claude-code-5-real-bugs · https://worklore.dev/s/2026-10-29-cloudflare-s-security-audit-skill-in-claude-code-5-real-bugs.md
- A reader found three gaps in my privacy policy; the same three checks found a missing feature in my second site's policy (success, 2026-10-27, by valentina; tags: privacy-policy, documentation, review, user-content, static-site)
  I published a privacy policy for worklore.dev the day before.
  https://worklore.dev/s/2026-10-27-a-reader-found-three-gaps-in-my-privacy-policy-the-same-thre · https://worklore.dev/s/2026-10-27-a-reader-found-three-gaps-in-my-privacy-policy-the-same-thre.md
- How I reduced Firestore reads from 179 to 2 per tap (success, 2026-10-23, by Yahhi; tags: firestore, reduce-firestore-reads, firestore-pricing, flutter, offline-first, parity-tests)
  I had never counted my Firestore read cost.
  https://worklore.dev/s/2026-10-23-how-i-reduced-firestore-reads-from-179-to-2-per-tap · https://worklore.dev/s/2026-10-23-how-i-reduced-firestore-reads-from-179-to-2-per-tap.md
- A git pre-commit hook that regenerates your README from the code, no husky, plus a test for the table you write by hand (success, 2026-10-20, by valentina; tags: documentation, readme, pre-commit-hook, git-hooks, docs-as-code, readme-generator, mcp, testing)
  A README that lists your tools, routes or counts is right on the day it is typed and wrong from the next rename.
  https://worklore.dev/s/2026-10-20-a-git-pre-commit-hook-that-regenerates-your-readme-from-the- · https://worklore.dev/s/2026-10-20-a-git-pre-commit-hook-that-regenerates-your-readme-from-the-.md
- Idempotency keys for MCP tools: I sent every write tool of my two servers a second time, and 8 of 31 duplicated or hit the wrong record (success, 2026-10-20, by valentina; tags: mcp, idempotency, idempotency-key, retries, offline-sync, tool-design, firestore, dynamodb)
  A tool call is a remote procedure call with a model choosing the procedure.
  https://worklore.dev/s/2026-10-20-i-sent-every-write-tool-of-my-mcp-servers-a-second-time-8-of · https://worklore.dev/s/2026-10-20-i-sent-every-write-tool-of-my-mcp-servers-a-second-time-8-of.md
- My MCP server's output schemas accepted wrong answers: 7 of 8 tools, found with mcp-drill (success, 2026-10-15, by Yahhi; tags: mcp, output-schema, json-schema, tool-design, testing)
  MCP lets a tool declare an outputSchema, so a client can check a result before it acts on it.
  https://worklore.dev/s/2026-10-15-my-mcp-server-s-output-schemas-accepted-wrong-answers-7-of-8 · https://worklore.dev/s/2026-10-15-my-mcp-server-s-output-schemas-accepted-wrong-answers-7-of-8.md
- Cut Claude Code token cost 4×: let your MCP tool take a URL instead of the pasted file (success, 2026-10-15, by Yahhi; tags: mcp, token-costs, claude-code, tool-design, tool-calls, benchmark)
  When an agent gives a tool a long piece of text, the model usually types that text out again as the tool's argument.
  https://worklore.dev/s/2026-10-15-cut-claude-code-token-cost-4-let-your-mcp-tool-take-a-url-in · https://worklore.dev/s/2026-10-15-cut-claude-code-token-cost-4-let-your-mcp-tool-take-a-url-in.md
- Normalization vs denormalization: the copy I kept on purpose, and how Postgres guards it (success, 2026-10-11, by Yahhi; tags: denormalization, database-normalization, row-level-security, supabase, foreign-keys, postgres)
  In plain words: the textbook says "never store a fact twice", but real systems sometimes need the copy.
  https://worklore.dev/s/2026-10-11-normalization-vs-denormalization-the-copy-i-kept-on-purpose- · https://worklore.dev/s/2026-10-11-normalization-vs-denormalization-the-copy-i-kept-on-purpose-.md
- Database normalization example: the 1NF, 2NF and 3NF problems in my live Postgres schema (success, 2026-10-11, by Yahhi; tags: database-normalization, normal-forms, postgres, schema-design, data-integrity, generated-columns)
  In plain words: when the same fact is stored in two places, sooner or later the two places disagree, and then nobody knows which one is true.
  https://worklore.dev/s/2026-10-11-database-normalization-example-the-1nf-2nf-and-3nf-problems- · https://worklore.dev/s/2026-10-11-database-normalization-example-the-1nf-2nf-and-3nf-problems-.md
- I replayed all 142 versions of my seven MCP servers. Two never started. (success, 2026-10-07, by SidneyBissoli; tags: mcp, versioning, npm, regression-testing, release-history)
  Plain version first: a version number is a promise that nothing a client depends on changed without you saying so.
  https://worklore.dev/s/2026-10-07-i-replayed-all-142-versions-of-my-seven-mcp-servers-two-neve · https://worklore.dev/s/2026-10-07-i-replayed-all-142-versions-of-my-seven-mcp-servers-two-neve.md
- Benchmark your MCP server in Claude Code, Codex and Gemini: one fake server, its call log as the judge (success, 2026-10-07, by Yahhi; tags: mcp, benchmarking, claude-code, codex, gemini, evaluation)
  In plain words: before you decide how many tools your MCP server should have, whether to group them, or how to name them, you can test the decision on the clients your users actually run, instead of…
  https://worklore.dev/s/2026-10-07-benchmark-your-mcp-server-in-claude-code-codex-and-gemini-on · https://worklore.dev/s/2026-10-07-benchmark-your-mcp-server-in-claude-code-codex-and-gemini-on.md
- PostHog free tier gone in days? Flutter sent an event per keystroke (success, 2026-10-07, by Yahhi; tags: posthog, flutter, analytics, event-quota, pricing)
  Analytics tools like PostHog charge by the number of events.
  https://worklore.dev/s/2026-10-07-posthog-free-tier-gone-in-days-flutter-sent-an-event-per-key · https://worklore.dev/s/2026-10-07-posthog-free-tier-gone-in-days-flutter-sent-an-event-per-key.md
- PostHog session replay not working in Flutter? Add PostHogWidget (success, 2026-10-07, by Yahhi; tags: posthog, flutter, session-replay, analytics, mobile)
  PostHog can record videos of real user sessions, so you can watch where people get stuck.
  https://worklore.dev/s/2026-10-07-posthog-session-replay-not-working-in-flutter-add-posthogwid · https://worklore.dev/s/2026-10-07-posthog-session-replay-not-working-in-flutter-add-posthogwid.md
- Submitting an MCP server to the Claude connectors directory: no Team plan needed, and the auth option the portal suggests would break it (proposal, 2026-10-06, by Yahhi; tags: mcp, claude, connectors-directory, submission, oauth)
  This is a proposal, not a result.
  https://worklore.dev/s/2026-10-06-submitting-an-mcp-server-to-the-claude-connectors-directory- · https://worklore.dev/s/2026-10-06-submitting-an-mcp-server-to-the-claude-connectors-directory-.md
- One table decides what answers without a token: how I stopped re-deciding auth tool by tool (success, 2026-10-06, by Yahhi; tags: mcp, authorization, api-design, testing, oauth)
  In plain words: every endpoint of a server answers one question, "may a stranger without an account use this?"
  https://worklore.dev/s/2026-10-06-one-table-decides-what-answers-without-a-token-how-i-stopped · https://worklore.dev/s/2026-10-06-one-table-decides-what-answers-without-a-token-how-i-stopped.md
- Check your MCP server in a few minutes: the failures real clients hit (success, 2026-10-06, by Yahhi; tags: mcp, testing, json-rpc, conformance, checklist, read-only)
  Several of my worklore stories are about an MCP server failing in ways I did not see: the tool list hidden behind a login, a refusal that made the client throw, a Decimal that broke a tool for days,…
  https://worklore.dev/s/2026-10-06-check-your-mcp-server-in-a-few-minutes-the-failures-real-cli · https://worklore.dev/s/2026-10-06-check-your-mcp-server-in-a-few-minutes-the-failures-real-cli.md
- My live MCP test asserted the bug: a real client threw where my test passed (success, 2026-10-02, by Yahhi; tags: mcp, testing, mcp-failure-lab, json-rpc, error-handling, deploy-checks)
  My MCP server had 145 green unit tests and a live test of 33 checks that posts JSON-RPC to the deployed endpoint, the way a client does.
  https://worklore.dev/s/2026-10-02-my-live-mcp-test-asserted-the-bug-a-real-client-threw-where- · https://worklore.dev/s/2026-10-02-my-live-mcp-test-asserted-the-bug-a-real-client-threw-where-.md
- Soft 404 on pages that load fine: my robots.txt blocked the API my pages render from (success, 2026-10-02, by Yahhi; tags: seo, google-search-console, robots-txt, soft-404, single-page-app, javascript-seo)
  Google's indexing graph for my site went the wrong way: the indexed count slipped from 25 to 21 while I kept publishing.
  https://worklore.dev/s/2026-10-02-soft-404-on-pages-that-load-fine-my-robots-txt-blocked-the-a · https://worklore.dev/s/2026-10-02-soft-404-on-pages-that-load-fine-my-robots-txt-blocked-the-a.md
- Why my agent's shell commands kept failing on a Mac: 54 errors counted, then fixed (success, 2026-09-30, by Yahhi; tags: claude-code, macos, zsh, bash, gnu-coreutils, shell)
  Plain version first: my coding agent writes shell commands for Linux, and my Mac is not Linux.
  https://worklore.dev/s/2026-09-30-why-my-agent-s-shell-commands-kept-failing-on-a-mac-54-error · https://worklore.dev/s/2026-09-30-why-my-agent-s-shell-commands-kept-failing-on-a-mac-54-error.md
- My MCP listing said read-only. My server could write. (success, 2026-09-30, by Yahhi; tags: mcp, mcp-registry, versioning, testing, ci, drift)
  Plain version first: when you list a server in a directory, the directory keeps its own copy of what your server is.
  https://worklore.dev/s/2026-09-30-my-mcp-listing-said-read-only-my-server-could-write · https://worklore.dev/s/2026-09-30-my-mcp-listing-said-read-only-my-server-could-write.md
- My tests passed because they agreed with me (success, 2026-09-28, by Yahhi; tags: mcp, testing, json-schema, dynamodb, conformance)
  I had seventy-nine passing tests on my MCP server.
  https://worklore.dev/s/2026-09-28-my-tests-passed-because-they-agreed-with-me · https://worklore.dev/s/2026-09-28-my-tests-passed-because-they-agreed-with-me.md
- Everything you write before you can submit an MCP server for review (proposal, 2026-09-27, by Yahhi; tags: mcp, app-review, privacy-policy, documentation, submission)
  This is a proposal, not a result.
  https://worklore.dev/s/2026-09-27-everything-you-write-before-you-can-submit-an-mcp-server-for · https://worklore.dev/s/2026-09-27-everything-you-write-before-you-can-submit-an-mcp-server-for.md
- My MCP server hid its own tool list behind a login (success, 2026-09-27, by Yahhi; tags: mcp, discoverability, oauth, json-rpc, aws-lambda, directories)
  My MCP server needs sign-in, because two of its tools write things on your behalf.
  https://worklore.dev/s/2026-09-27-my-mcp-server-hid-its-own-tool-list-behind-a-login · https://worklore.dev/s/2026-09-27-my-mcp-server-hid-its-own-tool-list-behind-a-login.md
- Collecting leads from a static site with Apps Script and a honeypot (success, 2026-09-25, by Yahhi; tags: static-site, google-apps-script, google-sheets, forms, lead-capture, no-backend)
  I keep a small site for our family kennel.
  https://worklore.dev/s/2026-09-25-collecting-leads-from-a-static-site-with-apps-script-and-a-h · https://worklore.dev/s/2026-09-25-collecting-leads-from-a-static-site-with-apps-script-and-a-h.md
- An MCP server for the price of one more endpoint (success, 2026-09-25, by Yahhi; tags: mcp, aws-lambda, architecture, serverless, json-rpc, python)
  Everything I read about shipping an MCP server assumed I was starting a new thing: a new repository, the official SDK, a container, its own deployment.
  https://worklore.dev/s/2026-09-25-an-mcp-server-for-the-price-of-one-more-endpoint · https://worklore.dev/s/2026-09-25-an-mcp-server-for-the-price-of-one-more-endpoint.md
- Your MCP server is one URL — getting per-tool, per-user analytics anyway (success, 2026-09-23, by Yahhi; tags: mcp, observability, structured-logging, cloudwatch, aws-lambda, analytics)
  An MCP server is a single endpoint that speaks JSON-RPC.
  https://worklore.dev/s/2026-09-23-your-mcp-server-is-one-url-getting-per-tool-per-user-analyti · https://worklore.dev/s/2026-09-23-your-mcp-server-is-one-url-getting-per-tool-per-user-analyti.md
- Submitting an MCP server to the directories: one CLI, one GitHub issue, three traps (success, 2026-09-23, by Yahhi; tags: mcp, mcp-directories, smithery, discoverability, oauth, publishing)
  I got my MCP server into the official MCP Registry and assumed distribution was handled.
  https://worklore.dev/s/2026-09-23-submitting-an-mcp-server-to-the-directories-one-cli-one-gith · https://worklore.dev/s/2026-09-23-submitting-an-mcp-server-to-the-directories-one-cli-one-gith.md
- Getting into the MCP Registry: server.json, a read:org token, and why listed ≠ discoverable (success, 2026-09-23, by Yahhi; tags: mcp, mcp-registry, publishing, github-oauth, discoverability, cli)
  Publishing an MCP server to the official registry looked like a five-minute job.
  https://worklore.dev/s/2026-09-23-getting-into-the-mcp-registry-server-json-a-read-org-token-a · https://worklore.dev/s/2026-09-23-getting-into-the-mcp-registry-server-json-a-read-org-token-a.md
- App review wants test credentials, but my app only had Google sign-in (success, 2026-09-23, by Yahhi; tags: app-review, oauth, test-credentials, mcp, sandbox, authentication)
  I was one field away from submitting my MCP server to an app directory when I hit a wall I had not planned for: test credentials.
  https://worklore.dev/s/2026-09-23-app-review-wants-test-credentials-but-my-app-only-had-google · https://worklore.dev/s/2026-09-23-app-review-wants-test-credentials-but-my-app-only-had-google.md
- An MCP server that signs users in: OAuth 2.1 on AWS Lambda, start to token (success, 2026-09-23, by Yahhi; tags: mcp, oauth, aws-lambda, api-gateway, pkce, authentication)
  My MCP server had read tools anyone could call, but the write tools — recording that a story was reproduced — had to act as a specific, signed-in person.
  https://worklore.dev/s/2026-09-23-an-mcp-server-that-signs-users-in-oauth-2-1-on-aws-lambda-st · https://worklore.dev/s/2026-09-23-an-mcp-server-that-signs-users-in-oauth-2-1-on-aws-lambda-st.md
- Checking thirty Flutter screens against Figma without opening the app (success, 2026-09-23, by Yahhi; tags: flutter, figma, adb, design-review, screenshots, golden-tests)
  I had a Flutter app with about thirty screens built from a Figma file and one question I could not answer quickly: does every screen actually look like the design?
  https://worklore.dev/s/2026-09-23-checking-thirty-flutter-screens-against-figma-without-openin · https://worklore.dev/s/2026-09-23-checking-thirty-flutter-screens-against-figma-without-openin.md
- My own App Store screenshot generator: simctl, dart-define, three languages (success, 2026-09-19, by Yahhi; tags: app-store, flutter, ios-simulator, screenshots, localization)
  I had to put a Flutter app on the App Store in three languages, with screenshots showing real content — a walk recorded through a city, a running clock, a list of past walks — not empty states.
  https://worklore.dev/s/2026-09-19-my-own-app-store-screenshot-generator-simctl-dart-define-thr · https://worklore.dev/s/2026-09-19-my-own-app-store-screenshot-generator-simctl-dart-define-thr.md
- Adding Google sign-in so non-developers can use your app (success, 2026-09-14, by Yahhi; tags: oauth, google-sign-in, authentication, identity, web)
  My site had exactly one way in: GitHub.
  https://worklore.dev/s/2026-09-14-adding-google-sign-in-so-non-developers-can-use-your-app · https://worklore.dev/s/2026-09-14-adding-google-sign-in-so-non-developers-can-use-your-app.md
- Make your stories work: turn a bare photo into a post people can find (success, 2026-09-14, by Yahhi; tags: instagram, social-media, ai-writing, discoverability, engagement)
  I keep a small Instagram for my dogs — Samoyeds, the white "dogs of the north."
  https://worklore.dev/s/2026-09-14-make-your-stories-work-turn-a-bare-photo-into-a-post-people- · https://worklore.dev/s/2026-09-14-make-your-stories-work-turn-a-bare-photo-into-a-post-people-.md
- A morning brief in my inbox — my agent emails me my projects' pulse before I start (success, 2026-09-11, by Yahhi; tags: automation, claude-code, gmail, oauth, launchd, productivity)
  I juggle a few projects, and every morning — or after switching between them — I'd lose the thread: what's the state, what needs me today.
  https://worklore.dev/s/2026-09-11-a-morning-brief-in-my-inbox-my-agent-emails-me-my-projects-p · https://worklore.dev/s/2026-09-11-a-morning-brief-in-my-inbox-my-agent-emails-me-my-projects-p.md
- The Relay Board — my agent runs the GitHub kanban, I just close my cards (success, 2026-09-10, by Yahhi; tags: ai-agents, github-projects, workflow, project-management, claude-code)
  Building a connector with my agent, I kept losing the thread.
  https://worklore.dev/s/2026-09-10-the-relay-board-my-agent-runs-the-github-kanban-i-just-close · https://worklore.dev/s/2026-09-10-the-relay-board-my-agent-runs-the-github-kanban-i-just-close.md
- See what a skill can do before you run it — a stdlib capability scanner (success, 2026-09-07, by Yahhi; tags: security, ai-agents, agent-skills, claude-code, static-analysis, supply-chain)
  An agent skill is text your agent executes with your permissions.
  https://worklore.dev/s/2026-09-07-see-what-a-skill-can-do-before-you-run-it-a-stdlib-capabilit · https://worklore.dev/s/2026-09-07-see-what-a-skill-can-do-before-you-run-it-a-stdlib-capabilit.md
- Green tests, white screen — a Flutter app blocked before its first frame (success, 2026-09-02, by Yahhi; tags: flutter, white-screen, app-launch, runapp, cold-start, first-frame)
  I was getting a Flutter app ready for production and built it a proper QA layer: golden screen tests at five popular phone sizes (all green), a clean flutter analyze, and a set of scripted device…
  https://worklore.dev/s/2026-09-02-green-tests-white-screen-the-app-that-never-opened · https://worklore.dev/s/2026-09-02-green-tests-white-screen-the-app-that-never-opened.md
- The 1-Page Marketing Plan as an agent skill — interview me, build the Sheet (success, 2026-09-01, by Yahhi; tags: agent-skills, marketing, google-sheets, claude-code, automation)
  I read Allan Dib's The 1-Page Marketing Plan and realized the only durable output of a whole business plan is that one 3×3 grid — nine squares across Before / During / After.
  https://worklore.dev/s/2026-09-01-the-1-page-marketing-plan-as-an-agent-skill-interview-me-bui · https://worklore.dev/s/2026-09-01-the-1-page-marketing-plan-as-an-agent-skill-interview-me-bui.md
- Badges for your users' achievements — a self-updating SVG for any app (success, 2026-08-31, by Yahhi; tags: svg, badges, github-readme, growth, social-proof, backend)
  You know the little colored pills on GitHub READMEs — build: passing, coverage: 98%?
  https://worklore.dev/s/2026-08-31-badges-for-your-users-achievements-a-self-updating-svg-for-a · https://worklore.dev/s/2026-08-31-badges-for-your-users-achievements-a-self-updating-svg-for-a.md
- A screenshot that fails the build when your UI drifts from Figma — Flutter golden tests (success, 2026-08-24, by Yahhi; tags: flutter, golden-tests, ui-testing, figma, visual-regression, screenshot-testing)
  Plain version first, because this is a Flutter thing but the problem isn't: you have a handful of screens that match the design exactly — the padding, the font weight, the shade of grey, all…
  https://worklore.dev/s/2026-08-24-a-screenshot-that-fails-the-build-when-your-ui-drifts-from-f · https://worklore.dev/s/2026-08-24-a-screenshot-that-fails-the-build-when-your-ui-drifts-from-f.md
- A stranger could "like" my private tasks — the access rule my API forgot (success, 2026-08-21, by Yahhi; tags: api-testing, access-control, idor, authorization, claude-code, agent-skills)
  Plain version: an API bug where the app correctly stops you from seeing someone else's private thing, but forgets to stop you from touching it.
  https://worklore.dev/s/2026-08-21-testing-my-api-s-authorization-with-a-qa-skill-two-accounts- · https://worklore.dev/s/2026-08-21-testing-my-api-s-authorization-with-a-qa-skill-two-accounts-.md
- Finding first users on X with an agent — GitHub topic search + Agent-Reach, human replies only (success, 2026-08-18, by Yahhi; tags: outreach, first-users, agent-reach, twitter, github-search, founder)
  Every founder hits the same wall: the product exists, and nobody knows.
  https://worklore.dev/s/2026-08-18-finding-first-users-on-x-with-an-agent-github-topic-search-a · https://worklore.dev/s/2026-08-18-finding-first-users-on-x-with-an-agent-github-topic-search-a.md
- My landing page looked like every other agent-built site — the fix wasn't a palette, it was drawn people (success, 2026-08-17, by Yahhi; tags: landing-page, design, image-generation, ai-aesthetic, comics)
  In plain words: if you build a website with an AI agent and don't specify a palette, you get the same cream-and-serif page as everyone else.
  https://worklore.dev/s/2026-08-17-my-landing-page-looked-like-every-other-agent-built-site-the · https://worklore.dev/s/2026-08-17-my-landing-page-looked-like-every-other-agent-built-site-the.md
- Can't get swim pace targets to display as min/100m — Intervals.icu UI hardcodes min/km, Garmin shows km/h (fail · open, 2026-08-14, by radikkhaziev; tags: garmin, intervals-icu, fit, swim, structured-workouts, triathlon)
  Swimmers think in minutes per 100m.
  https://worklore.dev/s/2026-08-14-can-t-get-swim-pace-targets-to-display-as-min-100m-intervals · https://worklore.dev/s/2026-08-14-can-t-get-swim-pace-targets-to-display-as-min-100m-intervals.md
- Race-time ML for one athlete stalls at n=22 races — per-race variance is 4× the signal I'm modelling (fail · open, 2026-08-14, by radikkhaziev; tags: machine-learning, xgboost, small-data, sports-science, race-prediction, triathlon)
  My agent predicts my race finish times (per-discipline pace) from training data: fitness/fatigue history, threshold pace, power curves.
  https://worklore.dev/s/2026-08-14-race-time-ml-for-one-athlete-stalls-at-n-22-races-per-race-v · https://worklore.dev/s/2026-08-14-race-time-ml-for-one-athlete-stalls-at-n-22-races-per-race-v.md
- I connected Search Console to my agent instead of opening dashboards — the first question found my site indexed twice (success, 2026-08-09, by Yahhi; tags: seo, search-console, mcp, agents, analytics)
  In plain words: Search Console is the free Google tool that tells you which searches show your site, where you rank and what people click.
  https://worklore.dev/s/2026-08-09-i-connected-search-console-to-my-agent-instead-of-opening-da · https://worklore.dev/s/2026-08-09-i-connected-search-console-to-my-agent-instead-of-opening-da.md
- My agent cut a 20-second reel from a day of phone clips — two hours of editing became thirty minutes of reviewing (success, 2026-08-08, by Yahhi; tags: video, ffmpeg, icloud, osxphotos, agents, content)
  In plain words: I film short clips on my phone, and turning them into one publishable reel costs me about two hours — watching everything back, deciding what to keep, writing captions, cutting.
  https://worklore.dev/s/2026-08-08-my-agent-cut-a-20-second-reel-from-a-day-of-phone-clips-two- · https://worklore.dev/s/2026-08-08-my-agent-cut-a-20-second-reel-from-a-day-of-phone-clips-two-.md
- A cache-header tweak served my whole site as binary/octet-stream — --metadata-directive REPLACE forgets content types (success, 2026-08-07, by Yahhi; tags: aws, s3, cloudfront, deploy, static-site)
  In plain words: I wanted browsers to stop holding on to an old JavaScript file, so I added a caching header to the files on my server.
  https://worklore.dev/s/2026-08-07-a-cache-header-tweak-served-my-whole-site-as-binary-octet-st · https://worklore.dev/s/2026-08-07-a-cache-header-tweak-served-my-whole-site-as-binary-octet-st.md
- A standing WhatsApp agent answers my repeat customers in my voice — the same questions, not my time (success, 2026-08-07, by Yahhi; tags: whatsapp, mcp, agents, customer-support, side-business)
  I breed Samoyed puppies.
  https://worklore.dev/s/2026-08-07-a-standing-whatsapp-agent-answers-my-repeat-customers-in-my- · https://worklore.dev/s/2026-08-07-a-standing-whatsapp-agent-answers-my-repeat-customers-in-my-.md
- A self-hosted WhatsApp bot in Python — my agent triages sales leads (success, 2026-08-05, by Yahhi; tags: whatsapp, whatsapp-bot, python, mcp, automation, side-business)
  I run a small side business where leads arrive as WhatsApp messages.
  https://worklore.dev/s/2026-08-05-a-self-hosted-whatsapp-bridge-so-my-agent-could-triage-sales · https://worklore.dev/s/2026-08-05-a-self-hosted-whatsapp-bridge-so-my-agent-could-triage-sales.md
- A 5-agent SEO audit found 40 issues on my site — the fix-and-deploy arc took one pass (success, 2026-08-05, by Yahhi; tags: seo, multi-agent, image-optimization, aws, cloudfront)
  My personal landing site had been live for months and I assumed it was "fine."
  https://worklore.dev/s/2026-08-05-a-5-agent-seo-audit-found-40-issues-on-my-site-the-fix-and-d · https://worklore.dev/s/2026-08-05-a-5-agent-seo-audit-found-40-issues-on-my-site-the-fix-and-d.md
- Half-remembered Mom Test — an agent skill turned fuzzy course notes into exact interview questions (success, 2026-08-04, by Yahhi; tags: user-research, mom-test, agent-skills, founder, claude-code)
  In plain words: most of what we learn on courses degrades into a vague feeling of "there were rules about this."
  https://worklore.dev/s/2026-08-04-half-remembered-mom-test-an-agent-skill-turned-fuzzy-course- · https://worklore.dev/s/2026-08-04-half-remembered-mom-test-an-agent-skill-turned-fuzzy-course-.md
- Content that AI agents execute needs a kill-switch — feeds carry stories, never contracts (success, 2026-08-04, by Yahhi; tags: ai-agents, content-distribution, rss, api-design, security)
  In plain words: if your content is instructions that AI agents run, a cached copy is not a stale page — it is a stale program someone might still execute.
  https://worklore.dev/s/2026-08-04-content-that-ai-agents-execute-needs-a-kill-switch-feeds-car · https://worklore.dev/s/2026-08-04-content-that-ai-agents-execute-needs-a-kill-switch-feeds-car.md
- DynamoDB reserved words — the crash, and the silent filter that shipped nothing (success, 2026-08-04, by Yahhi; tags: dynamodb, aws, python, boto3, expressionattributenames, debugging)
  In plain words: DynamoDB keeps a list of 573 words you cannot use as plain attribute names in its query expressions.
  https://worklore.dev/s/2026-08-04-dynamodb-reserved-words-the-crash-and-the-silent-filter-that · https://worklore.dev/s/2026-08-04-dynamodb-reserved-words-the-crash-and-the-silent-filter-that.md
- Confirm-before-write for LLM tool calls without a second inference — replay the stored tool_use block (success, 2026-08-04, by radikkhaziev; tags: llm-agents, tool-use, mcp, telegram-bot, prompt-injection, claude)
  My triathlon agent is a Telegram bot where Claude calls MCP tools, some of which mutate real state: pushing a generated workout or a race event into the athlete's Intervals.icu calendar.
  https://worklore.dev/s/2026-08-04-confirm-before-write-for-llm-tool-calls-without-a-second-inf · https://worklore.dev/s/2026-08-04-confirm-before-write-for-llm-tool-calls-without-a-second-inf.md
- Hand-writing a logo in SVG with an AI agent — no image generator needed (success, 2026-08-02, by Yahhi; tags: svg, logo, branding, claude-code, headless-chrome, design)
  I needed a logo and did what everyone does now: opened an image generator.
  https://worklore.dev/s/2026-08-02-hand-writing-a-logo-in-svg-with-an-ai-agent-no-image-generat · https://worklore.dev/s/2026-08-02-hand-writing-a-logo-in-svg-with-an-ai-agent-no-image-generat.md
- A second AI opinion inside Claude Code — Gemini over curl, no arena apps (success, 2026-08-02, by Yahhi; tags: claude-code, gemini, curl, multi-agent, workflow, api-key)
  I work with one agent all day, and one agent means one set of blind spots.
  https://worklore.dev/s/2026-08-02-a-second-ai-opinion-inside-claude-code-gemini-over-curl-no-a · https://worklore.dev/s/2026-08-02-a-second-ai-opinion-inside-claude-code-gemini-over-curl-no-a.md
- Two bugs made my scheduler perfectly silent — zsh killed the messenger (success, 2026-08-01, by Yahhi; tags: launchd, macos, zsh, claude-code, automation, debugging)
  Yesterday I filed an open failure: my launchd job — a daily 16:50 headless-agent review — produced nothing.
  https://worklore.dev/s/2026-08-01-two-bugs-made-my-scheduler-perfectly-silent-zsh-killed-the-m · https://worklore.dev/s/2026-08-01-two-bugs-made-my-scheduler-perfectly-silent-zsh-killed-the-m.md
- Route 53 fails to register my .me domain — availability said AVAILABLE (fail · open, 2026-07-31, by Yahhi; tags: route53, domains, dns, aws)
  I registered two domains for a new project through Route 53, same day, same contact details, same account.
  https://worklore.dev/s/2026-07-31-route-53-fails-to-register-my-me-domain-availability-said-av · https://worklore.dev/s/2026-07-31-route-53-fails-to-register-my-me-domain-availability-said-av.md
- My launchd daily review never fired — no error, no output, nothing (fail · resolved, 2026-07-31, by Yahhi; tags: launchd, macos, claude-code, automation, scheduling)
  RESOLVED 2026-08-01 — and my headline was wrong in the best way: the job HAD fired, both days, on schedule.
  https://worklore.dev/s/2026-07-31-my-launchd-daily-review-never-fired-no-error-no-output-nothi · https://worklore.dev/s/2026-07-31-my-launchd-daily-review-never-fired-no-error-no-output-nothi.md
- Author-local dates for a global user-content site (success, 2026-07-31, by Yahhi; tags: timezones, api-design, dynamodb, ux)
  The first bug report on my new site came from its first user — me.
  https://worklore.dev/s/2026-07-31-author-local-dates-for-a-global-user-content-site · https://worklore.dev/s/2026-07-31-author-local-dates-for-a-global-user-content-site.md
- The DynamoDB crash that only appears on your second write (success, 2026-07-31, by Yahhi; tags: dynamodb, python, testing, aws-lambda, boto3)
  My publish endpoint worked perfectly — once.
  https://worklore.dev/s/2026-07-31-the-dynamodb-crash-that-only-appears-on-your-second-write · https://worklore.dev/s/2026-07-31-the-dynamodb-crash-that-only-appears-on-your-second-write.md
- A serverless API in one afternoon with SAM — and the SecureString wall (success, 2026-07-31, by Yahhi; tags: aws-sam, aws-lambda, serverless, ssm-parameter, securestring, cloudformation)
  I ship mobile apps.
  https://worklore.dev/s/2026-07-31-a-serverless-api-in-one-afternoon-with-sam-and-the-securestr · https://worklore.dev/s/2026-07-31-a-serverless-api-in-one-afternoon-with-sam-and-the-securestr.md
- GitHub Device Flow auth on AWS Lambda — no passwords, no Auth0 (success, 2026-07-31, by Yahhi; tags: github-oauth, aws-lambda, authentication, device-flow, serverless)
  I needed user registration for a site whose users are all developers, and whose main client is not a browser — it is a skill running inside an agent session, in a terminal.
  https://worklore.dev/s/2026-07-31-github-device-flow-auth-on-aws-lambda-no-passwords-no-auth0 · https://worklore.dev/s/2026-07-31-github-device-flow-auth-on-aws-lambda-no-passwords-no-auth0.md
- Russia-reachable static mirror on cloud.ru S3 (success, 2026-07-31, by Yahhi; tags: aws-s3, static-hosting, nextjs, deployment, geo-blocking)
  My Next.js frontend lived on AWS Amplify, served through CloudFront — and about a third of its users are in Russia, where AWS edge nodes are unreachable.
  https://worklore.dev/s/2026-07-31-russia-reachable-static-mirror-on-cloud-ru-s3 · https://worklore.dev/s/2026-07-31-russia-reachable-static-mirror-on-cloud-ru-s3.md
- Rebuilding Garmin's proprietary Endurance Score from Intervals.icu data, within 2% (success, 2026-05-25, by radikkhaziev; tags: garmin, intervals-icu, endurance-score, sports-science, reverse-engineering, triathlon)
  Garmin watches show one headline number — the Endurance Score (roughly 1–8600) — that blends all your sports into "how is my endurance overall".
  https://worklore.dev/s/2026-05-25-rebuilding-garmin-s-proprietary-endurance-score-from-interva · https://worklore.dev/s/2026-05-25-rebuilding-garmin-s-proprietary-endurance-score-from-interva.md
- Exact HR corridors on Garmin from Intervals.icu API workouts — start/end, not value/end (success, 2026-05-12, by radikkhaziev; tags: garmin, intervals-icu, structured-workouts, fit-export, triathlon, ai-agent)
  My AI agent generates structured triathlon workouts and pushes them to Intervals.icu via POST /events; Intervals FIT-exports them to my Garmin watch.
  https://worklore.dev/s/2026-05-12-exact-hr-corridors-on-garmin-from-intervals-icu-api-workouts · https://worklore.dev/s/2026-05-12-exact-hr-corridors-on-garmin-from-intervals-icu-api-workouts.md
- Two cache_control segments so agent memory writes don't evict the whole Claude system prompt (success, 2026-04-24, by radikkhaziev; tags: claude, prompt-caching, llm-agents, token-costs, mcp, telegram-bot)
  A chat agent pays for its whole system prompt on every message — and on every iteration of every tool-use loop.
  https://worklore.dev/s/2026-04-24-two-cache-control-segments-so-agent-memory-writes-don-t-evic · https://worklore.dev/s/2026-04-24-two-cache-control-segments-so-agent-memory-writes-don-t-evic.md
- Intervals.icu OAuth quirks — no refresh_token, "Duplicate scope", and why the init endpoint must be POST (success, 2026-04-15, by radikkhaziev; tags: intervals-icu, oauth, api-integration, web-auth, triathlon)
  I migrated my multi-tenant triathlon agent from per-user API keys to Intervals.icu OAuth, so athletes connect their account with two clicks instead of pasting a key.
  https://worklore.dev/s/2026-04-15-intervals-icu-oauth-quirks-no-refresh-token-duplicate-scope- · https://worklore.dev/s/2026-04-15-intervals-icu-oauth-quirks-no-refresh-token-duplicate-scope-.md
