# AGENTS.md — andlukyane.com
Universal agent config for this repository. Readable by Claude Code, Cursor, Codex, OpenCode, and any tool that follows the AGENTS.md convention. Tool-specific config (hooks, MCP servers, settings.json) lives in `.claude/`; that file remains the source of truth for Claude Code internals.
## What this repo is
Jekyll site hosted on GitHub Pages, custom domain `andlukyane.com`. Personal blog of Andrey Lukyanenko — Senior ML Engineer at Meta, Kaggle Grandmaster. Content is applied ML, paper reviews, career, and language learning.
Build: `bundle exec jekyll serve --no-watch`. Build takes ~33 seconds. Use `rm -rf _site` before rebuild if Liquid caching is suspected.
For deeper architecture notes (Jekyll layouts, Liquid gotchas, AJAX navigation in `personal.js`, tag-page generation), read `CLAUDE.md` at repo root.
## Writing voice — the style-guide skill
**Always load `.claude/skills/style-guide/SKILL.md` before drafting or editing any post.** It defines the house voice (first-person practitioner, hedged, contrastive "yes, but" reasoning), the structure rules for paper reviews / book reviews / general blog posts, and the banned-vocabulary list for AI writing tells (delve, tapestry, bolster, pivotal, "stands as", "It's not X, it's Y", and so on).
In Claude Code, invoke via the Skill tool: `skill: style-guide`. In other harnesses, read the file directly.
The hook `.claude/hooks/check-writing-tells.sh` runs after Write/Edit on `_posts/*.md` and surfaces banned terms — if the hook fires, address the flagged lines before continuing.
## Content workflow — skills and commands
Andrey's content pipeline. Use these in order, not in isolation.
1. **`article-extractor` skill** — fetch arxiv / Notion / GitHub URLs, return a structured memo at `extract-.md`. Replaces manual Phase A of the swarm.
2. **`brainstorming` skill** — produce a short angle/positioning memo at `brainstorm-.md`. Use when the paper sits in a domain with no prior review to anchor against, or when the angle is genuinely unclear. Skip when prior reviews already calibrate the voice.
3. **`/paper-review-swarm` command** — orchestrates a parallel swarm (technical-summary agent + style-draft agent + related-work agent), then runs the `draft-critic` agent. Output: a Jekyll post in `_posts/YYYY-MM-DD-paper-review-.md`.
4. **`fact-verifier` agent** — cross-check every numerical claim and comparison attribution in the draft against the paper's own tables and figures. Run after `draft-critic` and before publishing. Catches what style critics miss.
5. **`/telegram-post` command** — generate the Russian-language Telegram channel post at `telegram-.md` from the published `_posts/` file. Format spec lives in `memory/reference_telegram_post_format.md`.
Other skills already in this repo: `excalidraw` (diagram generation), `learn-from-session` (extract patterns from a session), `unslop-code` (roast AI code slop). Generic skills available in the harness (loop, schedule, claude-api, etc.) are tool-features, not project workflows — use them when applicable but they are not part of the content pipeline.
## Specialized agents in `.claude/agents/`
- **`draft-critic`** — reviews drafted posts against the style guide, flags banned vocabulary patterns, structural tells, and book-review-specific violations. Cites line numbers and exact quotes. Tools: Read, Grep, Glob.
- **`fact-verifier`** — verifies every numerical claim and comparison attribution in a paper-review draft against the paper's own tables and figures. Outputs a per-claim verdict (verified / incorrect / unverifiable / mis-attributed / omitted concession). Tools: Read, Grep, Glob.
## Memory and project context
The author's audience and channel mix shapes a lot of decisions. Pointers to the things any agent should be aware of (read these on demand, not eagerly):
- `memory/MEMORY.md` — index of persistent memory entries (Claude Code only)
- `memory/reference_telegram_post_format.md` — format spec for Telegram cross-posts
- `memory/reference_blog_url_format.md` — production URL pattern with UTM tags
- `memory/feedback_paper_review_drafting.md` — first-draft checklist for paper reviews
- `memory/feedback_paper_review_fact_verification.md` — fact-verifier requirement
- `memory/project_audience_channels.md` — LinkedIn ~14K, Telegram ~3K, blog mix
Channel context: cross-posting goes blog → Telegram (Russian, technical, code-switched English terms) → LinkedIn / Medium. Each channel has its own format constraints. Posting itself is manual; agents draft, the human ships.
## Workflow preferences
- For paper reviews, target 600-900 words; 1500 only for frontier-system papers.
- For page redesigns, create 2-3 temporary versions at `/about-v1`, `/about-v2` URLs for comparison, then combine the best elements and delete temp files.
- Push to a new branch and share a PR URL — never commit directly to `main`.
- The user edits files directly in the IDE between messages. Always re-read before editing.
- Don't auto-post to Telegram or LinkedIn. Drafts only.
## When NOT to use the swarm or fact-verifier
- One-off summaries that aren't going to `_posts/` — write directly.
- Book reviews — different style; use the book-review section of the style-guide skill, skip `fact-verifier` (no benchmarks to verify).
- Career or language-learning posts — these don't have papers, headline numbers, or comparison claims. The fact-verifier is irrelevant; the draft-critic still applies.
## What this file is not
This is not a kitchen-sink doc. It exists to onboard a new agent in under 60 seconds. Tool-specific config (hook scripts, settings.json, permissions) lives in `.claude/`. Architecture notes for the Jekyll site live in `CLAUDE.md`. The writing style itself lives in the `style-guide` skill. This file is a map, not the territory.