Generative AI workflows and hacks 2026
2026-01-13 — 2026-07-09
In Which Practical Notes on Generative AI Are Gathered, Including Observations on Data-Retention Postures Across Major Providers, Local Model Storage, and the Ongoing Problem of Markdown Fidelity in Copy-Pasted Output.
I’ll try to synthesise LLM research elsewhere. This is where I keep ephemeral practical notes and links, continuing my habit from 2025 and 2024 and 2023.
1 Phrases it hurts that I can no longer say because now they are AI slop tells
- leverage
- load-bearing
- failure mode
- -shaped
- earns its keep
- \(x\) worth \(y\)-ing
- reach for
- circling
- N different [things] in a trenchcoat
- lives in
- sits in
- carries
- binding constraint
- [inanimate object] wants
I’m keeping my em-dashes and smart quotes; you can have my classic punctuation marks when you pry them from my cold, dead keyboard shortcuts.
2 AI skills
In an attempt to upskill the machine learning debugging on AI coding assistants (and humans), I’ve collected high quality sources on how to debug machine learning projects, focusing on the mindset and the “taste”.
3 AI plots
This is cool: Flint plotting language that is designed to be used by LLMs, which is compiled down to a specific plotting language and rendered in various formats.
I think the idea here is super good, but I am somewhat pessimistic about it since the graphing libraries they target are not very capable, and in my experience every plot is a special unique snowflake that uses obscure features of the underlying library, which I think is rule out by design here? Let us fund out.
- microsoft/flint-chart Flint is a visualization language that lets AI agents reliably create expressive, good-looking charts from simple, human-editable chart specs.”
4 LLM knowledge bases
Karpathy wrote the canonical llm-wiki intro. The comments are full of vibe-coded self-promotions, but AFAICT the style seems effective.
5 PDFs, word docs
Quick and savage conversion to LLM-friendly markdown, microsoft/markitdown:
Higher quality but eats 2 GB of space for an OCR engine, datalab-to/marker
Punishing but perfect: opendatalab/MinerU:.
Details at PDF ingestion.
6 Self-tuition via LLM
I rolled my own but here are some skills that I used as starting points:
- socratic-method-skill/SKILL.md at main · malkreide/socratic-method-skill
- Socratic Tutor command for Claude Code
cf learning with AI for more general thoughts on this topic.
7 Breaking the (Claude code)-(Google Chrome) chains
Claude Code has browser integration but only for Google Chrome, and they do not intend to fix that. Now, I’m no fan of Google Chrome mainline because it’s creepy and gross, and also I am stubborn. So, what to do?
Firefox is not at all well supported, but many Chromium browsers can be forced into working. Some of them are sufficiently perverse to meet my standards.
Whether it’s wise to let your browser traffic flow through the Anthropic servers I’ll leave as an open question; they already have your intimate thoughts from all that Claude usage, so why not get some extra value, I guess?
Anyway, there are community-supported hacks to get non-Google-Chrome browsers working at stolot0mt0m/claude-chromium-native-messaging). I like Vivaldi.
macOS setup:
Take care before running this; for all I know it sends your API keys to Macedonian script kiddies and plays the sad trombone sound.
8 Running locally
Ok, I’m into this now. It turns out that Apple hardware are an OK and reasonably affordable (relatively speaking) way of executing LLMs, with an amazing community. Auditioning some clients like Osaurus/Ollama/Hugging Face transformers/…
This does tie into my general interest in sovereign infra, which is gradually unfurling on the internet as danmackinlay/SOV. phases-apple/ tracks all the dumb stuff I tried.
Relatedly, we can run our own generative image toolchain, which is weirdly more tractable than text for basic usage.
9 Fine-tuning a small specialist on my own prose
LLM prose sucks. I’m experimenting with style fine-tuning. Full write-up at fine-tuning danbot.
10 Going agentic
OK, let’s go hard agentic! Which insane, insecure agentic assistant should I use? Claude Desktop? Hermes? I do not know yet.
- Claude Desktop is … pretty good. I’m mostly executing on the laptop via Claude Code, which are relatively capable models.
- Hermes Agent seems fun. Open source, model-agnostic, multi-channel, persistent memory and all that good stuff. Hermes can use self-hosted models, e.g. self-hosted Osaurus or Ollama or whatever, rather than locking me in to Anthropic’s (admittedly incredible) infrastructure and models.
- Many others. Read the writeup.
11 Don’t train on me
I don’t want providers to train on me. They can have my money but not my soul. Who is replicating my life in their training data? As an average consumer, I mean.
What follows is a vibe check, not legal advice; click through for the source of truth.
Legend:
- 🟢 Green = strong “no training”
- 🟠 Amber = OK with careful configuration / provider choice
- 🔴 Red = defaults allow training on my prompts for at least some flows
| Option / provider | Vibe | Posture |
|---|---|---|
| Self‑hosted open‑weight models | 🟢 | I control the infra; nobody else can train on prompts that never leave it. |
| Azure OpenAI / Models sold by Azure | 🟢 | Contractual “no training on customer data by default”; abuse‑monitoring logs still exist. |
| Anthropic Claude API | 🟢 | API inputs/outputs not used for training by default; consumer Claude.ai is a separate product. |
| Google Gemini paid APIs / Vertex | 🟢 | Paid APIs don’t train on prompts; free tier / web UI is very skeezy 🔴. |
| Groq Cloud | 🟢 | Inference‑only shop; no retention, no training on API data. Narrow open‑weight menu (Llama, Qwen, gpt‑oss) |
| Cerebras | 🟢 | “We do not retain inputs and outputs associated with our training, inference and chatbot Services.” Similar narrow open‑weight menu to groq. |
| Fireworks | 🟢 | No training on your data without consent; Zero Data Retention by default. Broad open‑weight catalogue and strong tool‑calling. |
| Together | 🟠 | Biggest open‑weight catalogue and offers fine‑tuning, but ZDR is opt‑in — toggle it on, or prompts may be stored and (with separate consent) used for training. |
| Ollama Cloud | 🟢 | The hosted side of the local runtime; says it doesn’t retain inference data and doesn’t train on it. Young product, narrow menu. |
| OpenAI API (platform / business) | 🟠 | No training by default, but heavy logging and human safety review. |
| OpenRouter (locked down) | 🟠 | Router doesn’t train; downstream risk depends on your training / ZDR filters (see note below). |
| Consumer ChatGPT / Copilot / Bing | 🔴 | Free‑tier UIs use prompts for training; toggling it off seems to be for business tiers. |
| OpenRouter with worst‑case routes | 🔴 | Wide‑open routing can be arbitrarily bad. |
Note on “no training” vs “Zero Data Retention”: the table conflates two distinct claims that the industry has started to keep separate. “We don’t train on your data” is the looser promise that most paid APIs (Anthropic, OpenAI, paid Google) meet by default. “Zero Data Retention” is stricter — the provider retains nothing, not even 30‑day abuse‑monitoring logs. None of the big three frontier shops do literal ZDR on their first‑party endpoints by default; it’s available only by enterprise arrangement, or by routing the same models through Bedrock / Vertex / Azure. OpenRouter exposes both as independent toggles in account settings: a “training opt‑out” (relaxed, keeps you on the good first‑party endpoints) and a separate “ZDR” filter (strict, disables first‑party Anthropic / OpenAI / Google and forces you onto Bedrock / Vertex / Azure routes instead, with the latency and version‑lag that implies). If your concern is “don’t feed me to the next model,” the training opt‑out is enough. If your concern is “leave no log my employer’s lawyer could subpoena,” you need ZDR.
Other relevant advice:
- I’m not exactly an expert in avoiding getting personally hacked, so how safe can I actually make data on my local machine?
- The CLOUD Act means the US government can read your stuff on US servers. Avoiding that is substantially more effortful.
12 Reading the internet
MCPs are handy for reading the internet.
Currently my favourite is Jina, which is affordable.
Their more famous competitor, Firecrawl, is too expensive and provides little marginal value for my use case.
13 Google is a bit shit at copy-pasteable content
Google broke its Markdown output in a highly specific, almost-personally-exasperating way: links don’t work in the output docs. This is particularly infuriating in my favourite Google product, Deep Research. It’s supposed to be about citations and links, and yet it can’t turn URLs into linked text (try copy-pasting the output to get inline citations if you don’t believe me).
For that reason—and because Gemini subscriptions are annoying and have shitty bundle pricing—as soon as Google released an API version of Google Deep Research, I wrote a Google Deep Research client that does all kinds of clever stuff to bypass their horrible output formatting and get the links and maths and tables and code blocks out in a format I can actually use. Unlike Google’s horrible subscription options, it is pay-per-use at standard token pricing. My last research report cost about USD1.70.
See danmackinlay/gemini_deep_research_client. It does quite a lot to make sure the output works, including links, mathematics, and the other things researchers actually want included in their work. Pull requests welcome.
14 OpenAI UX sucks increasingly and they do not really care about that
Relatedly, OpenAI hates markdown output now too. The ChatGPT client used to generate lovely markdown that I could use where I wanted structure (maths, code, tables) and HTML for text-y unstructured things.
That was a good time. A few months ago they totally fucked it up, and they’ve shown no interest in fixing it. We can no longer copy-paste tidy, structured Markdown from ChatGPT — just the slobbery mess of HTML.
Read on if you want to fix that.
But actually, I have just decided to quit OpenAI and use a different provider, so I don’t care about this any more. They used to have the best model for advanced mathematics, but Anthropic’s Claude seems better to me now, and it has beautiful Markdown output. Anyway, OpenAI is emitting worrying signs of being comic book villains.
I’m leaving the following bit here for posterity. I suspect OpenAI’s interest isn’t in chat clients — that’s a legacy product they keep around while they plan on brain-computer interfaces or utility fog or armies of death drones or something. The fix won’t come from them.
Solutions:
First, we could move to a good client like Jan that preserves Markdown on copy-paste and, as a bonus, lets us use diverse backends, including local ones.
Alternatively, if we’re being lazy, open the chat we want to copy in a web browser and then use a browser extension to convert the HTML. Here are two that were recommended to me:
- Chrome: Markdown Capturer - BibCit
- Firefox: ChatGPT LaTeX Copy Fix
Partial fix: Use a macOS script to convert clipboard HTML to Markdown. Here is a fish script
function chat2md
if not type -q pandoc; echo "Install pandoc: brew install pandoc" >&2; return 1; end
pbpaste -Prefer public.html 2>/dev/null | \
sed 's/class="Apple-converted-space"//g; s/<span[^>]*>//g; s/<\/span>//g' | \
pandoc -f html+raw_html -t markdown+raw_tex+tex_math_dollars+fenced_code_blocks+hard_line_breaks --wrap=preserve -s |
pbcopy
echo "HTML → Markdown complete (LaTeX, code, newlines preserved)"
endTBH, this still messes with Markdown math, but it preserves code blocks and newlines, which is a win.
15 But actually just ditch OpenAI
Claude has beautiful Markdown output. Also, OpenAI seems to be on some kind of slide into being generally evil, and I’ve noticed that my friends who work for OpenAI soon quit or stop getting invited to fun parties. Various actors, e.g. QuitGPT have been arguing that OpenAI is a bad actor. I’m not qualified to assess all their claims.
16 Oh no local LLMs are filling up my backup drives with models I briefly auditioned
As per my notes elsewhere
sudo tmutil addexclusion -p ~/.cache/huggingface
sudo tmutil addexclusion -p ~/.cache/uv
sudo tmutil addexclusion -p ~/.ollama/models
sudo tmutil addexclusion -p ~/.lmstudio
sudo tmutil addexclusion -p "$HOME/Library/Application Support/Jan/data/llamacpp/models"
sudo tmutil addexclusion -p "$HOME/Library/Application Support/Jan/data/mlx/models"
# optional — only if you accept re-running the uv tool installs after a restore:
sudo tmutil addexclusion -p ~/.local/share/uv
sudo tmutil addexclusion -p ~/Documents/Draw\ Things\ Models/ #this one is a custom path