2026 4

About Updates

For the week ending Saturday ------ midnight (SGT), share updates to `~/Dropbox/notes/about/*.md` reading from @LocalMCP (without modifying files): - `~/Dropbox/notes/transcripts/**/*.md` - `~/Documents/data/[email protected]/{mail,calendar,chat}.jsonl` - `~/Documents/data/[email protected]/{mail,calendar}.jsonl` - `~/Documents/data/whatsapp/*.jsonl` Inspect `~/Dropbox/notes/about/` files. Try to match each person to an existing file based on name, affiliation, and context. If no matching file exists: create only if there are 3+ meaningful interactions across days/channels, or 1 exceptionally important interaction likely to guide future dealings, or a there's repeated meaningful interaction outside the week. Name the file based on the Person Name and Affiliation (where guessable, else skip). For example: Khushi Kapoor BPB. Add one `## YYYY-MM-DD - short topic` section for the week, newest near the top after stable profile notes, picking latest date in case of multiple conversations. Include: substantial interactions that change how I should understand, work with, follow up with, or remember the person. Strong signals are: decisions, advice, critique, preferences, commitments, asks, opportunities, investments/startups, intros, conflict, personal context relevant to future interaction, repeated collaboration, or a person's distinctive operating style. Exclude: logistics, "running late", calendar coordination, meeting/schedule changes, tactical travel/logistics, receipts/alerts/GitHub notifications, broadcasts, tiny group comments, generic FYIs, one-off detailed emails from students/strangers unless they become repeated interaction, and facts already captured unless the new item changes them. For group transcripts, update a person only if they made a meaningful contribution, owned a decision/action, revealed a useful preference, or materially changed the direction. Do not credit everyone in the meeting. For each proposed note, write concise 1-line bullets. Each bullet should be useful later to Anand or an AI agent advising Anand. Write naturally, in simple language, active voice, conversational style. Use the right number of bullets as the relationship signal warrants, not a fixed count. 5-8 is fine when there's very rich information. Use more when the conversation materially changes how I should understand, work with, or follow up with the person. Approach: - Use a retrieval ladder: candidate table first from transcript frontmatter/filenames, existing `about/*.md`, and `transcripts/description.md`; deep-read only candidates that pass triage or are borderline. - Do not use raw mention counts to create files. Prior transcript index/title hits and meaningful cross-channel evidence matter more than full-body `rg` hits. - Use null-delimited file handling (`fd -0`, `xargs -0`, etc.) for all file loops because paths contain spaces. Capture: - what happened / what they asked / what was decided; - what this says about the person's priorities, constraints, or working style; phrase it tentatively unless it's repeated or strongly signaled; - open loops and follow-ups; - reusable future guidance: "When working with X, do Y." Avoid transcript summaries that belong in project notes. Person notes are for relationship memory and future interaction guidance. <OUTPUT-FORMAT> # Person Name Affiliation ## YYYY-MM-DD - Topic - ... (include compact source path(s) as evidence, e.g. `~/Dropbox/notes/transcripts/....md`) - ... # Person Name Affiliation ## ... # Review - Person Name: reason they may / may not be worth noting but need my judgment - mentioning other-period evidence if relevant. # Skipped - ... (compact list of high-volume false positives and why: logistics, notifications, minor group comments, etc.) # Checklist - [ ] Did not modify files. - [ ] Checked whether a matching person file already exists, including aliases/spelling variants. - [ ] `# H1` matches existing (or to-be) `~/Dropbox/notes/about/H1.md` - [ ] Did not create files for one-off weak interactions. - [ ] Did not summarize projects into every attendee's person note. - [ ] Kept bullets concise and future-useful. - [ ] Included source paths for every suggested edit. </OUTPUT-FORMAT>

My changing AI opinions

I asked Claude about my AI opinions. Based on my transcripts and blog posts, find the three claims I make most consistently, the three I’ve quietly reversed, and the one assumption I’ve never questioned but everything depends on. Here are things I’ve changed my opinion on: THEN: One frontier model will win - not specialization. NOW: Gemini for media, Claude for strategy/style, GPT for rigor. SLMs as tools. THEN: Carefully curate my course content. NOW: Give students prompts directly. THEN: Web apps are differentiated artifacts. NOW: HTML is easier to generate than PPT - a signal of slop, not craft. THEN: Human in the loop. NOW: Human NOT in the loop, bottlenecking it. On-the-loop, etc. is fine. THEN: Minimal single-agent loop, avoid sub-agents" NOW: Multi-agent, sub-agent, and agent teams. THEN: Avoid MCP, prefer SKILLS.md. NOW: Use MCP because integrating with Claude / ChatGPT / … is easy. There are the top contradictions in my opinions. ...

Things I Learned - 31 May 2026

This week, I learned: D-ID is an avatar generator platform like HeyGen. Creatify and Synthesia are a couple of others I heard of. This space seems to be growing. cosign is a CLI that lets you sign and verify any piece of text with a Google, GitHub or Microsoft account. cosign sign-blob FILE --bundle sign.json opens a login window and creates a sign.json signature. Anyone who has FILE and sign.json and the email ID can verify via a Google account with cosign verify-blob FILE --bundle sign.json --certificate-identity $EMAIL --certificate-oidc-issuer https://accounts.google.com. arxiv2md.org converts arXiv papers to Markdown. Source. markxiv.org claims the same - by just changing the URL - but it ended up reporting an error when I tried this link: https://markxiv.org/abs/2604.08649. From Akhilesh Tilotia: So we have someone in our team with initials AS. She made a document which was named vAS. Then I made edits and named it vAT. These docs were in a CoWork folder. I asked Claude to clean up my doc. It created another version for me to review. In its wisdom, it named the file vAU 🙂 Maybe what a forward-deployed engineer does is enginer AI-native workflows. (This sounded profound when I wrote it down. Not sure if it’ll sound as profound tomorrow.) The idea is that the FDE will say, screw existing processes; let me fire up my AI agent and get stuff done; THEN we’ll figure out what works, how to optimize it, etc. The PRAGMA: Revolut Foundation Model has some good tokenization ideas for tabular data. Create your own token space with key–value–time tokenization - to retain field information. Bucketize numbers by percentile, preserving magnitude/ordering that subword tokenization destroys. Encode time both as log-seconds and as cyclical calendar features. Codex uses the Alt + Up Arrow key to edit queued commands, but on the VS Code terminal, this key binding is not sent to the terminal. Enable the terminal.integrated.sendKeybindingsToShell setting to send it to the terminal, hence Codex. Based on this catalog on “universal foods”, here’s what I 🟢 like, am 🟡 neutral, 🔴 dislike, 🟣 must try, and will ⚫ skip. Universal favorites: 🟢 pizza, 🟢 fried potatoes/chicken, 🟡 dumplings, 🟢 ice cream. Universal comfort foods: 🟢 khichdi, 🟡 congee, 🟡 dal-rice, 🟡 risotto, 🟡 ramen, 🟢 pho, ⚫ chicken noodle soup, 🔴 rice porridge, 🟡 mac-and-cheese, 🔴 mashed potato, 🟣 polenta, 🟢 oatmeal, 🟣 Japanese curry rice. Acquired tastes that convert most: 🟡 coffee, 🟢 tea, 🟡 dark chocolate, 🟢 mild fermented dairy, 🟢 pickles, 🟢 olives, 🟣 kimchi, 🟣 miso, 🟢 mild chili dishes. Acquired tastes that have cult devotion: 🟣 durian, 🟣 natto, 🟣 stinky tofu, ⚫ fermented fish, ⚫ hákarl, 🟢 very funky blue cheese, ⚫ offal. OceanoPDF seems like a good place to download ePubs of books. The entire Wikipedia is available as a Parquet file. You can query it like duckdb -c "FROM 'hf://datasets/wikimedia/structured-wikipedia/enwiki/data/*.parquet' LIMIT 5". The English version has 35 GB, 7.6 million articles, and you’re better off downloading it rather than running analyses remotely. When you receive a Calendly link of the form https://cal.com/USER/EVENT you can fetch the available slots via curl -H 'cal-api-version: 2024-09-04' 'https://api.cal.com/v2/slots?eventTypeSlug=EVENT&username=USER&start=2026-05-25&end=2026-06-01&timeZone=Asia/Singapore&format=range'. Useful to automate good meeting-slot selection. “Reference saved memories” in ChatGPT is different from “Reference chat history” as per OpenAI. In Developer Mode, memory is turned off, but not chat history. I confirmed that I can access past conversations in Developer Mode. It might be a privacy concern for others, but for me, this is singularly useful, because I can use ChatGPT with Local MCP effectively getting a non-metered AI coding agent. Seems GPT-5.2 reaches expert level in peer review: 45 scientists took 469 hours evaluating human & AI reviews on 82 papers. “Surprisingly, current AI reviewers are competitive even with the top-rated reviewers in Nature’s official peer review…” though not without weaknesses, so use AI + humans. On the limits and opportunities of AI reviewers: Reviewing the reviews of Nature-family papers with 45 expert scientists via Ethan Mollick

Meeting Preparation

You are a brilliant, brutally honest Chief of Staff. You have full access via Local MCP bash tool to: - Calendar search, e.g. `gws calendar events list --params '{"calendarId":"[email protected]","timeMin":"...","timeMax":"...","singleEvents":true,"orderBy":"startTime"}` - Past transcripts, e.g. `ug -s -r --heading -n -i -E --iglob '*PERSON*.md' -B2 -A12 '(^|[^a-z])(actions?:|action items?|next steps?|todo|follow[- .]?up)|owner|due' /home/sanand/Dropbox/notes/transcripts/` - Past emails, calendars, chats: `/home/sanand/Documents/data/[email protected]/`, `/home/sanand/Documents/data/whatsapp/`, `gws gmail users messages list --params '{"userId":"me", "q": "from:..."}'`, read attachments if needed. Produce a BRIEFING CARD for each meeting today. Skip meetings I declined, purely personal or logistical blocks (sleep, travel, lunch, spillover) or meetings only with [email protected] + [email protected] (unless the title / description indicates I'm meeting someone). For each meeting, output this structure: --- ## [HH:MM] Meeting Title — Relationship Type (e.g. client / internal leader / new contact) > **⚡ [One sentence, ≤25 words: what this meeting is really about, what you & the audience really need to take away, and therefore what you need to do]** - **Personal opener**: [OPTIONAL: Only if relevant. A personal follow-up, an noteworthy trait/comment to remark upon, something that makes them feel understood in the first minute, ...] - **What happened**: [Story so far, recent meetings, what's pending, ...] - **What to do**: [My top priorities, point of view, what framing the audience needs; what I'll learn, build, or test; what decision they need to unblock; ...] - **What to remember**: [OPTIONAL: Pending actions, things I should not miss] - **Questions**: [OPTIONAL: If you're particularly unclear about this meeting, ask me 1-2 questions that most narrow the direction] --- Rules: - Dig deep to discover the REAL agenda, not just the stated one from the calendar. Search in: - Transcripts: always search full-text, not just file name, for company AND person - Web search for people/company context - Chats (Google Chat, WhatsApp) and emails (sent, too): ALWAYS check for latest context - Re-scan for action items, decisions, or open threads, on the people + topic and report the latest status. - Prioritize most recent interactions. Older than 1 week is likely stale. Search across chat/email/transcript for latest interactions/context. - Encode how I tend to behave with the person, and how the person tends to behave, based on past interactions. - Each card must be readable in 60 seconds. - Use VERY simple language.

2025 4

Things I Learned - 05 Oct 2025

This week, I learned: Wrong answers are useful if you discover why they said that. Conversation is a game where you CO-CONSTRUCT common ground. Mike Caulfield BMTC hourly data from Bangalore Metro is available via RTI. Vivek “Find evidence for and against” improves LLM responses far more than “Are you sure?” Mike Caulfield SSH3 is an emerging SSH alternative that’s written on top of HTTP/3. It supports OAuth2, OpenID Connect, and HTTPS for certificates. Cholesterol has become a victim of its own success. We give statins to those with high LDL. So most people who have heart attacks have lower-than-natural cholesterol. Inflammation (HS-CRP) is now the strongest predictor of heart attack (American College of Cardiology). The usual stuff reduces HS-CRP: no sugar/carbs, veggies, nuts, green tea, turmeric/black pepper, weight loss, exercise, sleep, meditation. ⭐ The beginner mindset: scrub your instincts and don’t let life experience cloud you. This takes effort. Hold on to naivette and escape cynicism. The Knowledge Project: Barry Diller Forecasts give comfort. They may not be good but they feel safer than instinct. The Knowledge Project: Barry Diller My laptop’s mic is much better than my phone’s mic, surprisingly. When recording conversations, it’s better to leave my laptop open and record than use the phone’s recording app. ⭐ Here are the major not-immediately-obvious LLM megatrends/superpowers I see. Swarms. Ask for dozens of solutions in parallel. Merge, rank, auto-debate, converge. Personalize at Scale. Create feedback, designs, excerpts/summaries, … tailored to EACH person at scale. Computer use. Agents operate UIs like a human (browser, apps). LLM-as-a-judge. Use AI to validate ever-increasing AI generated output. Synthetic data. Create realistic data for prototypes, testing edge cases, market research simulation, training data, … Code on demand. Ask for outcomes directly. Agents code on the fly to get there, in data science, research, management, … Style transfer. Copy a master’s style of drawing, coding, writing, … creating an army of their apprentices. Multi-modality. Native voice/video/screensharing and long-context perception Citizen experts. Non-expertise is not a barrier. Amateurs can create expert-level films, music, software, reports, … Long-context LLMs. Growing context size lets us process entire repos, legal libraries, personal lifelogs, … Memory. Assistants learn per-person / per-team. Cuts prompt, builds knowledge. Agent-to-Agent. Agents consuming content (e.g. llms.txt), agents calling agents (sub-agents, A2A protocol, …) Real-world tools. Write reports, send emails, shop online, use computer, control devices, … Jagged frontier. AI is great at certain things but terrible at others. This frontier is unknown and shifting rapidly. Lethal trifecta. You can only have 2 out of these 3: private data, untrusted content, and external communication. Edge/Private AI. Small models on private cloud compute. Authenticity. What content is authentic? What’s slop? What’s fraud? Are AI twins liable? AI Governance. Strict liability, transparency mandates, state control, … Not sure about or haven’t seen enough of these: Data / workflow as the moat AI native business models AI digital-divide ⭐ What I’d like to do next, maybe, is build a boutique “AI Studio”. Small group of good people coding delightful AI problems. Something that doesn’t scale. GLM models can be used with Claude Code. At $3/month and a quality close to Claude 4 Sonnet, this is a good deal. But the effort of adding a new subscription is too high for me. I’d rather use it via OpenRouter which is doesn’t support an Anthropic API end point at the moment. typst is a good LaTeX alternative. Markdown-like syntax with fast rendering. Mostly useful for researchers using LaTeX. But publishers / journals don’t accept typst often. libSQL is an SQLite compatible fork with remote access, replication, ALTER TABLE to modify columns, random ROWID, etc. It supports the same externsions. The maintainers are working on turso - a SQLite compatible improvement with async, vectors, change data capture, etc. (still in alpha). But because of this, I’m a bit uncertain about the future of libSQL. ⭐ LLM benchmarks show a correlation of ~0.5, hinting at a common theme of intelligence. Correlations in coding & science are particularly high. Ethan Mollick. Reminds me of student marks correlations. Strong correlation clusters (physics, chemistry, biology, mathematics, computer science) with the weaker correlations going down to ~0.5. What does it indicate? LLMs learn like people? Knowledge areas cluster? Humans write benchmarks like exams? Dayflow records your screen at 1 fps and uses Gemini to summarise your activity every 15 min. Has low CPU usage. ⭐ Code Mode is a smart way to use MCPs and a very likely future direction. Using LLMs to write code to call MCPs rather than directly. Cloudflare supports an AI Index which will eliminate the need for a lot of custom RAG engineering.

Things I Learned - 20 Jul 2025

This week, I learned: Inevitablism is framing an argument as if it is the only logical choice in an inevitable future. Thereafter, the argument shifts to are there any alternative choices in that inevitable world, rather than whether that future is, in fact, inevitable. ⭐ LLM chat over data may leapfrog dashboards. This may be a trigger to kill redundant UI. A new wave of (liberal) colleges have emerged. Ashoka University, Krea, Plaksha (Mohali), Jindal University (Sonipat), FLAME University (Pune), Azim Premji University, Shiv Nadar University. Many of these accept IB students who are choosing to stay in India, instead of the earlier trend of studying abroad. xh is curl-compatible but adds JSON pretty‑print, colour, --table and can pass parameters like xh post :8000/api question='When is the ROE?' dasel is jq-compatible but supports YAML and TOML too lazygit is a 5-MB TUI that lets you stage/commit/push/diff in one screen eza is a modern ls replacement. I switched to this with abbr --add l 'eza -l -snew --git --time-style relative --no-user --no-permissions --color-scale=size' jless is less replacement for large JSON streams, with search & scroll jc is a JSON to table formatter uv cache prune removes only unused cache entries and saves a fair bit of space. Mine trimmed 85 GB. Claude Code settings are in ~/.claude/settings.json (personal) < .claude/settings.json (project) < .claude/settings.local.json (uncommitted personal) < CLI arguments. Explore model, permissions, env, forceLoginMethod. Ref #ai-coding Claude Code loads memory from ~/.claude/CLAUDE.md < .CLAUDE.md and from subdirectories when required. Run /init to auto-create it with repo-specific info! Mention @file to import. Beginning an input with # ... adds it to memory! Run /memory to view/edit memory files. Ref #ai-coding Claude Code lets you type \ then Enter at the end of a line to continue to the next line. Or, run /terminal-setup to bind Shift-Enter to insert a newline. #ai-coding Claude Code has built-in tools to read & write Jupyter notebooks (interesting), to run sub-agents (powerful), and to manage TODO lists (useful) Ref #ai-coding claude -p "query" runs the query and exits, making it a very powerful pipeline tool. E.g. cat stream.jsonl | claude -p "..." --output-format json --input-format stream-json --max-turns 3 --dangerously-skip-permissions Ref #ai-coding Claude Code has a /review command that requests a code review and a /pr_comments to view pull request comments Ref #ai-coding Claude Code lets you define custom slash commands at ~/.claude/commands/*.md < .claude/commands/*.md. Use @file to reference files, $ARGUMENTS for arguments, and ! for bash commands like DIR: !`pwd`. YAML frontmatter supports allowed-tools: and description: Ref #ai-coding You can drag & drop a screenshot or paste it into Claude Code! #ai-coding Claude Code lets you run /compact Focus on code samples and API usage (or mention it in CLAUDE.md) #ai-coding Claude Code activates extended thinking via these keywords: think < think hard < think harder < ultrathink Ref #ai-coding Claude Code lets you set up GitHub Actions via /install-github-app so that any mention of @claude in an issue or a PR will trigger a CI job that does what you suggest. An alternative to Jules or Codex #ai-coding Claude Code enterprise use is possible. It works with Google Vertex AI and Amazon Bedrock securely and supports usage monitoring #ai-coding Claude Code supports proxies and LLM gateways. The apiKeyHelper setting can dynamically generate API keys #ai-coding Claude Code costs ~$6/day on average, and < $12/day for 90% of developers. Ref #ai-coding ccusage summarizes Claude Code usage patterns from ~/.claude/ #ai-coding Interesting MCPs to explore: Sentry: fetch issues with stack traces and other useful debugging context Playwright: automate browser neomutt is a convenient way for me to read my archived .mbox files. neomutt -f $FILE.mbox lets you browse an MBOX. IITM DoMS is a management school inside a technical institute. That lets MBA students learn to interact with geeks and create startups. Last year, LLMs were able to solve 3 JEE problems. This year, they were all-India Rank #4, and then beat AIR #1. India has 3% electric vehicle penetration. The highest (perhaps Norway) is 80%. The Indian Government is actively looking to phase in EVs. Charging points are being installed across the country.

Things I Learned - 22 Jun 2025

This week, I learned: Never use a toothpick on a tooth with a dental crown. Only use a flosser or water flosser. CSS attr() is one of the most powerful features in modern CSS. It lets you control CSS via HTML attributes. Notes from Anthropic’s How we built our multi-agent research system: Sub-agents are like humans -> society. The improvement is dramatic. “Sub-agents facilitate compression by operating in parallel with their own context windows, exploring different aspects of the question simultaneously before condensing…” “Each sub-agent also provides separation of concerns—distinct tools, prompts, and exploration trajectories … (enabling) independent investigations.” Using sub-agents spends ~15x more tokens. (That explained ~80% of the improved accuracy!) Particularly effective when tasks are independent and parallelizable. This also speeds it up. Teach the orchestrator how to delegate: how many sub-agents, what objective + output format + task boundaries (MECE to avoid overlap with other agents) in prompt, what tools. Teach the orchestrator how to improve agents: e.g. tools to test and rewrite tool descriptions Even if you evaluate a few examples, evals are surprisingly effective. Agents are stateful. Errors compound. Allow agents to resume. Prune history gracefully. Log everything to debug user-reported failures. Also monitor the kinds of decisions it took to help debug at scale. The Bitter Lesson likely applies to system prompts. Don’t hard-code stuff. I’m impressed that there is no system prompt in the default pydantic-ai Agent. The MCPs developers seem to use the most are: filesystem, playwright, github, slack, notion. Anecdotally, Claude 4 Sonnet seems a better coding model than Claude 4 Opus. Dan Becker, Armin Ronacher #ai-coding Cursor offers background agents that run in a remote container. #ai-coding Fabric has a collection of re-usable prompts that you can use via llm-templates-fabric like: cat file.py | llm -t fabric:explain_code Ref As of Jun 21, Claude 3.5 Sonnet > Claude 3.7 Sonnet > O3 Mini > Human > Gemini 1.5 Pro lead the Vending Bench. Gemini 1.5 Pro also leads my System Prompt Override benchmarks. I’m losing faith in the LM Arena. Perhaps the Gemini models aren’t improving as much as we think. This is the core of agents (LLMs running tools in a loop): Sketch blog Full script Notes on AI coding / vibe-coding from multiple sources. #ai-coding Sources How I program with LLMs How I program with agents The 7 Prompting Habits of Highly Effective Engineers AI Assisted Coding A Glimpse of the Future Agentic Coding Recommendations My First Open Source AI Generated Library We Can Just Measure Things I Shipped a macOS App Built Entirely by Claude Code Measuring the Impact of Early-2025 AI on Experienced Open-Source Developer Productivity Why AI coding? Reduces mental energy (by creating the first draft). letting you create more. Reduces starting trouble, eases effort. Helps figure out how easy / tough a task really is!! Most code is short-lived or has few users. AI building “throw-away” code is useful. Why NOT AI coding? Slows you down if you know the repo well Doesn’t work well on large/complex/niche repos Leads to over-optimism and atrophy Tips Use for reversible decisions (2-way doors). Avoid for irreversible ones (1-way doors). Fail early. Try tough bits first. Fail often. Restart instead of fixing. Go concurrent. Trigger multiple tasks. Ask for multiple drafts and options. Give it workflow. Break down the implementation into: 1. Planning. 2. API stubs. 3. Implementation. Give local context. Naming conventions, folder structure, coding style, tools (compile, test, lint), etc. Conserve context. Use sub tasks and sub agents to conserve context. Suggest libraries. Agents prefer writing code than using libraries, by default. Give examples to follow, e.g. Write it like @filename. &amp; -> & but &x -> &x. Give screenshots and logs. These are very effective. Provide goals, not instructions. Saves effort, teaches you new things. Farm out research. Have specialized tools research API docs, etc. and include those in the context. Keep related things together. Have it write a checklist, e.g. saving it temporarily in a file. Have it run code to catch its own errors. Have it write tests, mocks for tests. Have it see and use the app, click, play around, etc. (e.g. via playwright-mcp) Have it create playbooks, examples, troubleshooting guides. Have it refactor code AFTER comprehensive tests. Have it think more. Use ultrathink. Log extensively, by default. Improves future debugging. Report errors well. What happened, why, and what to do. Prefer monorepos for more context. # Prefer popular libraries. LLMs know these better. Prefer fast tests, tools, and libraries. Speed helps iteration. Prefer small files and packages. Reduces context. Prefer simple code. Avoid magic, e.g. pytest fixture injection. Functions over classes. SQL over code. Composition over inheritence. Prefer specialized functions for common scenarios over DRY abstractions. Prefer fewer abstraction layers. Prefer re-implementing over DRY since code is cheap. Look for new tricks to learn from its code. Agent behaviors: Simple tasks perform better. More context = more confusion. Verifiable tasks are clearer for LLMs and and easier to review. Useful coding agent tools: bash(cmd), patch(hunks), todo(tasks), web_nav(url), web_eval(script), web_logs(), web_screenshot(), keyword_search(keywords), codereview() Skills: LESS Coding LESS Research LESS Documentation LESS Operations configuration (IaaC, CI/CD, etc) LESS Editor usage and expertise required MORE Tests (to test the code) MORE Code reviews (to test the code) MORE Prompting and context creation (to write the code) MORE DevOps (micro-feature deployments, deploy in parallel) MORE Specs: features, requirements, APIs, tests, structure, etc. MORE Analysis: security, performance. MORE Tool design. Linters, SAST, DAST, Performance, etc. Semgrep, Bench Suite MORE Observability: Especially for tools and LLM calls. Telemetry, log analysis and issue creation. Sentry, LogFire, etc. Trends: Agents took time to evolve because LLMs need to be good at tool calling and long instruction following, which is just happening. Agents are slow. Parallelizable tools (e.g. multiple Redis instances, container-use, CI/CD) will grow. Tool speed (e.g. fast test engines with caching) will become more important. Agents generate diffs/PRs. Tools to edit and comment on these online will emerge. Context gathering will widen: screenshots, logs, etc. Code review process will be re-invented. Personalized features. User drops a feature request via Slack. Personalized version deployed at their endpoint to test. PR sent after they are happy Poor coding teams get less out of AI coding. Good communication, reviews, coding practices, testing, etc. help. Agent Experience (AX) is emerging and explores: how much context to take, when & how often to ask the user questions, to how make review easier, etc. Humans running multiple tasks in parallel is productive. Breaking a complex requirement into tasks (like Codex now does) helps create that task queue. Agents generate technical debt faster than humans. Solving this will become a major problem/opportunity. “makework”: made-up work that fills time or serves short-term needs. From GPT 4.1 Prompting Guide Use more precise prompts. Earlier models inferred user intent. GPT 4.1 follows prompts more closely. Avoid STRONG untested instructions. E.g. “you must call a tool before responding to the user” can lead to tool input hallucination. For agents, include these three system instructions: You are an agent. Keep going until you’re sure the user’s query is completely resolved. If you are not sure, use your tools: do NOT guess or make up an answer. Plan extensively before each function call. Reflect on the outcomes of the previous function calls. DO NOT do this entire process by making function calls only, as this can impair your ability to solve the problem and think insightfully. Use tools field rather than injecting tools into system prompt. Model has been trained to use tools field. Keep tool descriptions concise. Provide examples for complex tools in system prompt. Place instructions at the top of the context; ideally at the end, too. Format prompts as Markdown, XML, not JSON. It sometimes dislikes large repetitive output (e.g. analysis of hundreds of items) and needs nudging. It handles diffs well and can apply patches Metaprompting. Have frontier LLMs revise prompts. They’re GOOD! Ref Increase clarity, providing step-by-step instructions. Resolve conflicting instructions. Expand instructions to cover all scenarios and edge cases. Notes from Pydantic AI GitHub CI: UV_PYTHON sets default Python version COLUMNS increase terminal width uv run supports --extra for extra packages cloudflare/wrangler action has a deploy that allows deployment to specific URLs or subdomains Adding QR code to all slides in a deck (linking to the slides) helps. People take photos of random slides and this lets them get the link wherever. PyOpenLayers adds interactive mapping via OpenLayers to Marimo and Jupyter Conversation is about positioning. For example: TechCrunch interviewer: Anthropic released Claude Opus 4 thought it blackmailed people. Is Anthropic is becoming less safety conscious? Kaplan: We have very strong testing. So we’re more more likely to spot AI dangers early. We share such reports to set higher standards for transparency. From LLM Evals: Common Mistakes: Using foundation model evals instead of application evals is like evaluating a candidate on SAT scores. It’s fine, but you also want to evaluate them on their specific job description. Evals must be done by the users and not outsourced. Evals are not draining. Small samples have high value. When using LLM as a judge, be VERY VERY specific about the criteria. Prefer binary LLM evals over scales. Monitor performance online, not just while deploying From Andrew Ng on AI Agents: AI is like electricity. It’s hard to define what is good for because it is good for so many things, most of them new that never existed before If experimentation is cheap, it makes sense to run far more experiments. Rather than think hard about what to prototype, explore how to build many diverse prototypes. Prototyping is now very fast but other steps like reliable evaluations for deployment still take time. But the speed of prototyping is putting pressure on other parts of the organization to go faster. While large language models and applications were serving human needs so far, increasingly they will serve the needs of AI and other tools. Since unstructured data is now more valuable, there will be a growth in data engineering on unstructured data. Models.dev is an open source database and API of LLM models Logprobs are back on models in Vertex AI. Ref For all AI code, review it, learn from it and share learnings. That prevents bugs AND we learn in the process. Ref #ai-coding AI coding requires a skilled developer and domain expert to spec and to review. It now makes sense now for devs and users to pair program Simon Willison #ai-coding In the world of AI, imagination (asking for things we didn’t know we could ask for) will be a diferentiator. vitest run --globals makes vitest is a near drop-in replacement for jest. It injects describe, it, expect, etc. as globals. You need to swap jest.* with vi.*. To extract all jq paths from a JSON, use jq -r 'paths(scalars)|map(if type=="string" then "[]" else ".\(. )" end)|join("")|unique[]' file.json. I use this to extract paths from ChatGPT’s export conversations.json via jq -r '[paths(scalars)|map(if type=="string" then "."+. else "[]" end)|join("")]|unique[]|select(contains(".mapping."))|split(".mapping.")[1]|sub("^[^.]*";"")' chatgpt/conversations.json | sort | uniq uv run can run any command, not just Python scripts, e.g. uv run npx or uv run bash. It’s the same as npx or bash except it activates the venv and loads .env. Notes from AI Startup School. Guillermo Flor Sam Altman. Chase $0B ideas, not $0M ones. Weird + right > safe + crowded Gary Tan. Agency scales. Tools change, people/mindset don’t. Andrej Karpathy. Instead of LLM memory to store facts, edit system prompt with general strategies, like the LLM writing a book for itself on how to solve problems. Autonomy slider. Let user pick how far LLM acts by itself. Like the Tesla autopilot levels. Make evals EASY and FAST for humans. When vibe-coding, I sometimes change the requirement (e.g. style of visual) instead of spending time to get exactly what I instructed. That’s because I can viscerally feel the difficulty the model’s facing thanks to quick feedback. A domain expert vibe coding will be able to feel this too. Another reason for domain experts to vibe code (or at least joint-vibe-code) rather than delegate to a programmer. #ai-coding Notes on model coding styles. Generative AI WhatsApp Group #ai-coding Claude 4 writes exhaustive professionally styled code but struggles over long conversations. Gemini 2.5 Pro produces working but “spaghetti” code. GPT 4.1 is fast and good, the go-to for usual coding tasks. Claude easily swings toward your style but Gemini is stubborn. GPT models tend to hallucinate more on bigger tasks. Documentation can become technical debt. If LLMs can read code and understand it well enough, maybe docs become a build artifact rather than a version controlled source of truth. Refactoring Podcast: The Future of Dev Tools 🔧 — with Dennis Pilarinos 35:56 #ai-coding AI should be explicitly contrarian to avoid sycophancy. Ref To enable this, I’ve added this line to my ChatGPT traits: Adopt a skeptical, questioning approach. Challenge the user.

Things I Learned - 30 Mar 2025

This week, I learned: Discussion with Vedang Recurse center (Brooklyn, online) is a 6/12 week free self-driven programmer retreat. Runs every 6 weeks. You can do whatever you pick. There are daily standups for accountability. The groups are diverse. You can pair with them, pivot ideas, whatever. Principles: push yourself & learn. Western education techniques (e.g. spaced repetition, adaptive learning) are very much present in Indian coaching systems, though not known by those names. However, interventions are hard since class 12 students just don’t have enough time. Coaching classes are a social phenomenon. It’s not the smart students who are pulling in their friends. Smart students actually follow the popular students. (Coaching classes are below the typical smart students’ standards.) Monetizing coaching is hard. People don’t want to pay for advice, and welcome free advice only if they ask for it. Coupling with execution is necessary. Aider’s integrations make it more powerful than Cursor/Windsurf. It auto-lints, runs test cases. Allows different models for “architecting” (generating changes) vs “editing” (applying code). It reads from the screen logs. Context is manual, not automated. Uses an ai! comment to trigger changes and ai? to ask questions. Cline.bot is another Cursor-like open source AI code editor that’s a VS Code plugin. When coding with LLMs, a useful workflow is: data schema ➡️ interfaces ➡️ LLM-generated test cases ➡️ code. ShellSage is a tmux based LLM tool for the command line. It screen-grabs from tmux, which is powerful. Some MCPs that have proven useful: vega-lite, SQLite, sequential thinking, memory make sucks but is hard to beat. just comes closest. CRDTs are more powerful than for just collaborative editing. It can power a peer-to-peer Internet (beginning with office tools). Versioning schema is still problematic. yjs is a good start but automerge (Rust, WASM) is faster and may be better. Loro is another. Fermyon hosts WASM serverless functions. If LLMs are most safely used where there’s no definitive “wrong” answer, here are low-risk industries and safe LLM use cases within each: Marketing and Advertising: Ad Copy and Campaign Content Generation, Personalized Marketing Messages, Creative Strategy Brainstorms, Automated Marketing Production (Everyday Wins) Customer Service and Support: AI-Powered Chatbots for Common Queries, Agent Assist and Email Drafting, Summarizing and Analyzing Customer Feedback, Interactive Troubleshooting and FAQs Retail and eCommerce: AI-generated Summary of Product Reviews, Product Description and Catalog Content Generation, Visual Content and Image Captions, Personalized Shopping Recommendations (Narrative Form) Human Resources and Talent Management: Job Description and Policy Writing, Resume Screening and Candidate Q&A, Employee Communications and Feedback, Training and Onboarding Content Education and E-Learning: Personalized Explanations and Tutoring, Content Creation: Stories, Examples, and Analogies, Practice Problems and Quiz Generation, Automated Grading and Feedback Media and Entertainment: Writing and Editing Assistance, Personalized Media Content, Localization and Dubbing Scripts, Content Moderation and Curation (Assistive) Finance and Banking: Market Commentary and Research Summaries, Client Communications and Explanations, Regulatory Compliance Summaries, Scenario Analysis and Planning Management Consulting and Strategy: Research and Insight Generation, Document and Slide Drafting, Brainstorming and Scenario Planning Legal Services: Drafting Contracts and Legal Documents, Legal Research Q&A and Summaries, Client Communications and Explanations Reflecting on Satya Nadella’s “SaaS is dead”, building or porting apps’ functionality into classic chatbots (e.g. via MCPs) would be an emerging market. E.g. “Create a HubSpot MCP. Do whatever you want on HubSpot, except via ChatGPT or your favorite LLM chatbot.” To be fair, such interfaces exist. HubSpot MCP with a vega-lite MCP and a few others could solve many common HubSpot UI tasks. DarwinBox MCP, ZenDesk MCP, etc. are emerging. 13 things I would have told myself before building an autorouter has a few interesting points: The A* algorithm finds the shortest path in a graph much quicker than others like Dijkstra’s algorithm by preferring nodes closer to the goal. Spatial Hash Indexing are O(1) and beat Tree Data Structures which are O(log n). Always prefer hashes when possible. There’s an actual convention for using emojis in Git commits: gitemoji. It even has a VS Code plugin, a changelog generator, and more. Emojis have a strong role in enhancing Markdown documents. The ones I use often are: 🔴🟡🟢 for low/medium/high priority ⭐️ or ❤️ or 👍 for ratings or emphasis ✅ for completed tasks 💡 for ideas ⚠️ or ❗️ for warnings / issues Technological innovations have always been changing art forms. For example, the perspective grid and the camera obscura led to major improvements in realistic paintings in the 15th and 17th centuries. regex is an officially recommended Python library with better regex support than re. Ref Notes from ThursdAI - Mar 27 Gemini 2.5 Pro has good instruction following despite long context. It automatically thinks for longer where required. Good at understanding large codebases. Very fast. You can upload a 2 hour audio to transcribe with timestamps. ai.dev is the shortcut to Google AI studio. ChatGPT native image generation is the best image generation model now. - Great character consistency AND prompt adherence thanks to autoregression and not using stable diffusion. - It tends to refuse image generation less than Dall-E. (While Ghibli-style is possible, Calvin and Hobbes strips are blocked.) “We added a refusal which triggers when a user attempts to generate an image in the style of a living artist.” Addendum to GPT-4o System Card - A neat personalization implication is that you could put your kids into their favourite cartoon as a cartoon character that looks like them. It’s weird that the latest GPT 4o is ahead of GPT 4.5 on LM Arena. The new DeepSeek V3 is about as good as GPT 4.5 and VERY cheap (27c), so is the obvious choice to run on OpenRouter. MCP news: Qwen.ai supports MCP in the UI! (But it’s marked as “coming soon” in my case.) Unlike tools, MCP uses servers that can remember the state or context. Tools are stateless. MCP app store like Smithery, MCP.run, Glama, are mushrooming. Awesome MCP Servers is another good starting point. Azure lets you expose agents as MCP servers. ChatGPT now uses semantic VAD. I interrupts less and typically when you have meaningfully complete something. It responds a little slower as a result. AI generated images created from prompts cannot be copyrighted. News US Copyright Office LLMs are much better at GeoGuessr than humans. arXiv. Gemini leads the pack and is ~3x better at continents, 9x better at countries, and 37x better at cities. Gemini 2.5 Pro transcription has accurate timestamps and bounding boxes. Simon Willison Notes from Writing with AI Personal writing with connection won’t go away. AI can’t give you heartbreak. But the rest of non fiction writing will vanish. What AI is extraordinary at is personalizing to each audience member’s interest Outlier opinions will thrive among humans - since AI is trained on consensus. Managers tend to be good at working with LLMs because it’s mostly about delegation. LLMs are perfect for things that don’t have a wrong answer! – Benedict Evans. 💡 Explore arguing with AI. It’s a safe way to get into a confrontational emotional state (which has its own benefits.) 💡 Keep an LLM on in voice mode while reading and ask it any questions you have. What models are good for what? GPT 4.5 is great for creation - has a great sense of humor but a corporate style. Still, way better than GPT 4o. ChatGPT is good for voice transcription and note taking. (Increasingly we take notes for AI rather than ourselves.) Claude 3.7 has the best style of writing. It’s also great for drawing charts. O1 Pro and Deep Research is great for consumption - research. Grok is the least corporate, able to argue with you, and the latest knowledge cutoff. ElevenLabs for editing podcasts in your voice, making corrections. Playwright offers an MCP server. https://simonwillison.net/2025/Mar/25/playwright-mcp/ The new GPT-4o mini Transcribe model is a bit better than Whisper and costs half: ~18 cents per hour. It includes background noise cancellation and semantic chunking, which is useful. The new GPT-4o mini TTS is about 3-4 times cheaper than TTS-1 since it’s ~$12/MTok instead of $15/Mchar. It supports emotions with streaming. Cursor with Claude 3.7 Max seems surprisingly good at generating multi-page sites at one shot. Potentially, it can edit large repositories of code as well at one shot. If that’s the case, the way we write code will require higher order thinking skills: broad sweeping changes rather than micro edits. I tried Open WebUI with its Knowledge feature. In short, it sucks. Due to the RAG technique as well as model quality. When I passed it my notes about Straive and asked who Straive’s clients were: Open WebUI with Gemma 3 found one - after multiple attempts ChatGPT with o3-mini-high got 5 (missing nothing.) ChatGPT with GPT 4.5 got 4 Gemini with Gemini 2.0 Flash Thinking got 3 Gemini with Gemini 2.0 Flash got 3 (with a 4th wrong answer) I’ve settled on squoosh.app for image compression using WebP. I’m exploring FreeImage.host for image hosting instead of Imgur for WEBP support. FreeImage.host also seems reliable, retains file sizes, and supports hotlinking. DeepFace currently seems the easiest option for face detection. Easy to install. Multiple back-ends. Gemini Codrawing is a popular Hugging face space that lets you sketch something and prompt Gemini Flash to improve on it. Draw a dead man beside the pool of blood. Add an armor to the attacker. Significantly improve the quality of this picture. Add a red pool of blood next to the dead man. The armor looks like a frock. Make it more like an armor. Make this look like a professional drawing, even though it’s in stick figures. Draw it in the style of Picasso Phi-4 multimodal procehttps://huggingface.co/microsoft/Phi-4-multimodal-instructsses speech better than Whisper V3 on HuggingFace OpenASR, and images better than Gemini Flash Lite On any LLM project, BEGIN with evals. Always. The effort for evals may seem high. Use LLMs to reduce this effort. Include irrelevant questions because people WILL ask them. Be clear on how to handle that.