Generative AI workflows and hacks 2026
2026-01-13 — 2026-05-28
In Which Practical Notes on Generative AI Tooling Are Assembled, With Particular Attention to the Training of a Personal Prose-Style Adapter on One’s Own Writing.
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
- lives in
- earns its keep
- \(x\) worth \(y\)-ing
- reach for
- circling
- N different [things] in a trenchcoat
I’m keeping my em-dashes and smart quotes; you can have my dashes when you pry them from my cold, dead keyboard shortcuts.
2 PDFs, word docs
Quick and savage conversion to LLM-friendly markdown, datalab-to:
Higher quality but eats 2 GB of space for an OCR engine, microsoft/markitdown
Still to test: opendatalab/MinerU:.
3 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.
4 Breaking the (Claude code)-(Google Chrome) tether
Claude Code has browser integration but only for Google Chrome, and they do not intend to fix that. I’m not a fan of Google Chrome because it’s creepy and gross. Firefox is not at all well supported, but many Chromium browsers can be forced into working.
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.
5 Running locally
Ok, I’m into this now. It turns out that macs 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 image generation, which is weirdly more tractable than text for basic usage.
6 Fine-tuning a small specialist on my own prose
Claude is a perfectly competent ghostwriter for someone else. For me, the output reads like a LinkedIn post: smooth, hedging, signposted, breathlessly upbeat in flat places. I have climbed the prompt-engineering ladder — a /dan-voice skill with a banned-words list, a Vale ruleset as a mechanical safety net, in-context exemplars, rewrite-it-again-in-Dan’s-voice loops — and there is a floor on how much taste we can install via prompt that we have hit.
So the plan is to train a small LoRA adapter on top of an open-weights model (probably Qwen3 8B, with Llama 3.3 70B as the upgrade path) as a specialist prose styler: feed it AI-flavoured draft text, get back something closer to my own voice. Training on Together’s serverless LoRA pipeline runs about $10 per pass for the 8B, cheap enough to iterate freely, and the adapter weights pull down to MLX on the Mac for offline use. The corpus is ~1.6M words of my own prose already in the repo (target side) paired against Claude paraphrases of the same passages (slop side), plus a manual pair-logger that captures every (AI draft, my rewrite) diff as I work.
Full write-up at Fine-tuning danbot.
7 Going agentic
OK, let’s go hard agentic! Which insane agentic assistant should I use? Claude Desktop? Hermes? I do not know yet.
- Claude Desktop is … pretty great. 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.
8 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.
9 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 marginal value add for my use case.
10 Google is a bit shit at copy-pasteable content
Google broke its Markdown output in an interesting 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 it).
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.
11 OpenAI UX sucks increasingly and they do not really care about that
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 is now better at that for the kind of stuff I do, and it has beautiful Markdown output. Anyway, OpenAI is emitting worrying signs of being unethical.
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.
12 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.
13 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