# 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.