{
  "$schema": "https://agentskills.io/schemas/v0.2.0/index.json",
  "version": "0.2.0",
  "name": "brand-crew",
  "description": "The Claude Code skills that author and maintain ai.satyajit.si — publishing articles, daily arXiv digests, build logs, projects, snippets and notes into a Zod-validated content layer.",
  "whenToUse": "Install these when you are working inside the satyajitghana/ai repository and need to add or maintain its content — a new article, the daily arXiv digest, a build log, a project page, a snippet or a note — so the file lands with correct frontmatter, passes the Zod content layer, and ships through the repo's PR workflow. They encode one site's house style, schema and validation pipeline, so they are not useful as general-purpose writing, research or publishing skills, and they are not a way to read the site's content: for that use the MCP server, the JSON API, or the markdown twin of any page.",
  "homepage": "https://ai.satyajit.si/colophon",
  "documentation": "https://ai.satyajit.si/developers",
  "license": "CC-BY-4.0",
  "install": {
    "marketplace": "satyajitghana/ai",
    "command": "claude plugin install brand-crew@satyajit-ai"
  },
  "skills": [
    {
      "name": "add-papers-digest",
      "type": "skill",
      "description": "Build the daily arXiv paper digest for ai.satyajit.si. Use when Satyajit wants today's (or a given date's) personalized arXiv digest, \"the papers\", says \"/arxiv\", or asks the paper-scout to run. Runs scripts/fetch-arxiv.mts, curates the top candidates, writes a personal take per paper, and saves content/arxiv/YYYY-MM-DD.mdx, then runs pnpm validate.",
      "url": "https://ai.satyajit.si/.well-known/agent-skills/add-papers-digest/SKILL.md",
      "sha256": "998d99333664c35ec827f4ae6dcb35fdbe8920f94f4b7546ce0cc2cb5a4e8419",
      "bytes": 1723
    },
    {
      "name": "add-patent",
      "type": "skill",
      "description": "Add a USPTO patent application (\"Patent Pending\") to ai.satyajit.si from a filing receipt. Use when Satyajit has a new patent filing to list on /patents. Appends to data/patents.ts, then runs pnpm validate.",
      "url": "https://ai.satyajit.si/.well-known/agent-skills/add-patent/SKILL.md",
      "sha256": "4441e4aa55d86b9cae10399db715355756cce9f8fb4918587fbd723df315adb4",
      "bytes": 1046
    },
    {
      "name": "add-publication",
      "type": "skill",
      "description": "Add a peer-reviewed publication to ai.satyajit.si from a DOI or arXiv id. Use when Satyajit has a new paper to list on /publications. Resolves metadata, appends to data/publications.ts, then runs pnpm validate.",
      "url": "https://ai.satyajit.si/.well-known/agent-skills/add-publication/SKILL.md",
      "sha256": "70d0867a34db21678eadba08aa49f6d88525655ee85378d50b990bbb29b79445",
      "bytes": 1045
    },
    {
      "name": "add-reading",
      "type": "skill",
      "description": "Add or update an entry on the /reading page of ai.satyajit.si (papers and books queued, reading, or read). Use when Satyajit shares a paper/book link, arXiv id, or DOI to track, or wants to move an item's status. Edits data/reading.ts, then runs pnpm validate.",
      "url": "https://ai.satyajit.si/.well-known/agent-skills/add-reading/SKILL.md",
      "sha256": "127ad914a7ed8ee8b7cf519434c076e3aed81e4b87acf85cd7d6f69e19953d81",
      "bytes": 1131
    },
    {
      "name": "add-snippet",
      "type": "skill",
      "description": "Add a code snippet to ai.satyajit.si (CUDA/PyTorch/C++/bash tricks). Use when Satyajit wants to save a small copy-pasteable code piece. Creates content/snippets/<slug>.mdx with valid frontmatter, then runs pnpm validate.",
      "url": "https://ai.satyajit.si/.well-known/agent-skills/add-snippet/SKILL.md",
      "sha256": "56cc0c7471059e67e81a09b60d2e302fd11d165484f6b0d27958e87520e95ae3",
      "bytes": 1031
    },
    {
      "name": "amplify",
      "type": "skill",
      "description": "Turn a published post/project/log into platform-native social drafts for ai.satyajit.si — an X/Twitter thread, a LinkedIn post, and Hashnode/dev.to crossposts. Use when Satyajit says \"amplify\", \"promote\", or \"draft social for\" a piece. Writes drafts to drafts/<date>/ and NEVER posts anything.",
      "url": "https://ai.satyajit.si/.well-known/agent-skills/amplify/SKILL.md",
      "sha256": "1290b136347254d2fcc7506173837971849143b2cbd82d5af8e9404cca4b0b88",
      "bytes": 1754
    },
    {
      "name": "explainer-films",
      "type": "skill",
      "description": "Write and render an explainer film for an article: a 90-125 second animated, narrated explanation of how the thing the article is about works — its architecture, its technique, what is new about it — presented by a mascot (cat, dog, fox, bunny, capybara or fish) who is different in every film, in one of eighteen drawn styles (watercolour, crayon, pastel, ballpoint, pencil, marker, charcoal, sumi, engraving, stipple, calligraphy, spray, chalkboard, blueprint, neon, notebook, riso, pixel). Every article also gets a thumbnail painted from the same storyboard, used as the cover of an article with no film and as the card in its OG image. Use when an article needs its film or thumbnail, when an article's facts change, or when asked for a video explanation of a piece. The storyboard is data/films/<slug>.json; every number and quote in it must appear in the article, and pnpm validate fails if one does not. Architecture explainers (content/architectures/<slug>.mdx) get films the same way, in their own namespace: data/films/architectures/<slug>.json, keyed architectures/<slug>.",
      "url": "https://ai.satyajit.si/.well-known/agent-skills/explainer-films/SKILL.md",
      "sha256": "581676f78ac563db9a601a254713b21919c781245d864f2168763323fd56ea5c",
      "bytes": 24511
    },
    {
      "name": "film-narration",
      "type": "skill",
      "description": "Add a spoken narration track and captions to an article film on ai.satyajit.si, using Piper text-to-speech on CPU — no GPU, no API, no per-character billing. Writes one voice clip per scene, places each at its scene offset, mixes the film's generated score underneath as a bed, muxes mono AAC/Opus into the mp4 and webm, and emits a WebVTT caption track. Use when a film explains something rather than just illustrating it, when the user asks for narration, voiceover, audio, a talking version, or a 3Blue1Brown-style explainer. Not for the silent ambient loops that open most articles — those stay muted and autoplaying.",
      "url": "https://ai.satyajit.si/.well-known/agent-skills/film-narration/SKILL.md",
      "sha256": "1cb8b4af96d2637fbe212851409c0b5a86df1b35adc2cdf5beca4941aaefcb01",
      "bytes": 6244
    },
    {
      "name": "math-reels",
      "type": "skill",
      "description": "Write and render a math reel: a 15-21 second, 1280x720 video for one result family of OpenAI's openai/math release (372 families), drawn programmatically in one fixed dark style — a plain-words line, the mathematical object animated with a small library of exact Canvas2D primitives (number line, plot, graph, grid/tensor, shape, Venn, sequence, equation with a term visualiser, dependency tree), optionally the key idea of the proof as one of 14 archetypes, then the before-to-after achievement, then an honest verification badge; music bed, optional Kokoro narration and captions. Use when a family needs its reel, when writing data/math-reels/<id>.json specs, or when previewing or rendering reels. Not the narrated explainer films (explainer-films) and never AI-generated imagery.",
      "url": "https://ai.satyajit.si/.well-known/agent-skills/math-reels/SKILL.md",
      "sha256": "77e5ece6803bc9212938e6f1ed79108285e8cd58908011dbf3ae1c507645c73e",
      "bytes": 32568
    },
    {
      "name": "new-article",
      "type": "skill",
      "description": "Write a curated long-form AI article for ai.satyajit.si. Use when Satyajit wants to publish an evergreen explainer or essay on AI broadly (transformers, RL, diffusion, systems) — a rigorous teaching piece, not a personal build-log. Creates content/articles/<slug>.mdx with valid frontmatter, then runs pnpm validate.",
      "url": "https://ai.satyajit.si/.well-known/agent-skills/new-article/SKILL.md",
      "sha256": "3cf8c9ac3274ac27e2e53e8754e247ff806ccf086d2e7bd78f8aed5f13e61316",
      "bytes": 4138
    },
    {
      "name": "new-log",
      "type": "skill",
      "description": "Write a dated daily build-log entry for ai.satyajit.si. Use when Satyajit gives a braindump, a sentence about what he did today, or says \"log from git\". Creates content/logs/YYYY-MM-DD-slug.mdx with valid frontmatter, then runs pnpm validate.",
      "url": "https://ai.satyajit.si/.well-known/agent-skills/new-log/SKILL.md",
      "sha256": "4f41b46cfb896b65fa7c5245ba2ce9256219f90fbfb813eb0aa05cd963d58f05",
      "bytes": 1249
    },
    {
      "name": "new-note",
      "type": "skill",
      "description": "Add a digital-garden note to ai.satyajit.si (evergreen, interlinked with [[wikilinks]]). Use when Satyajit wants to capture or grow an evergreen concept note. Creates content/notes/<slug>.mdx with valid frontmatter, then runs pnpm validate.",
      "url": "https://ai.satyajit.si/.well-known/agent-skills/new-note/SKILL.md",
      "sha256": "19c8b166686aeb9c3d3d10e2fe0ac30ec7a1960363b8818edf456619d0563ba2",
      "bytes": 1259
    },
    {
      "name": "new-post",
      "type": "skill",
      "description": "Write a new blog post for ai.satyajit.si. Use when Satyajit wants to publish a technical blog post, a \"what I learned / what I shipped / TIL\" daily post, or an explainer — from a topic, voice-note transcript, repo URL, or notes. Creates content/blog/<slug>.mdx with valid frontmatter, then runs pnpm validate.",
      "url": "https://ai.satyajit.si/.well-known/agent-skills/new-post/SKILL.md",
      "sha256": "2de64d450d599cee9dc031f77534e7b29d1050dfef2207bfdffd810efd3a183c",
      "bytes": 1670
    },
    {
      "name": "new-project",
      "type": "skill",
      "description": "Add a project page to ai.satyajit.si from a GitHub repo URL. Use when Satyajit wants to showcase a repo/project. Pulls README/stack/stars via gh, creates content/projects/<slug>.mdx with valid frontmatter, then runs pnpm validate.",
      "url": "https://ai.satyajit.si/.well-known/agent-skills/new-project/SKILL.md",
      "sha256": "03238cff065745a595b1e1fb80986cfd5bc1a21afb8bb824d9e5826e36dc7b08",
      "bytes": 1388
    },
    {
      "name": "recheck-reposts",
      "type": "skill",
      "description": "Recheck Satyajit's X reposts (https://x.com/thesudoer_) for things the site should write up, and write them. Use when he says \"I reposted a few more\", \"check my reposts\", \"recheck\", \"/reposts\", or shares that he has been reposting links he wants covered. Fetches the timeline with `pnpm reposts`, drops everything already decided in data/reposts-ledger.json, triages the rest (new article, update to an existing one, roundup, already covered, skip) with primary sources found for each, records every decision in the ledger, then writes the articles (in parallel for a batch) and ships them via PR.",
      "url": "https://ai.satyajit.si/.well-known/agent-skills/recheck-reposts/SKILL.md",
      "sha256": "df28b81901645f4338e297352042f1f46e2398e396bf3bd84cc95fe0a746866e",
      "bytes": 9083
    },
    {
      "name": "refresh-seed-stats",
      "type": "skill",
      "description": "Refresh the GitHub seed stats (repos/stars/followers) baked into data/profile.ts for ai.satyajit.si. Use when Satyajit says \"refresh stats\" or on the nightly stats-refresher routine. Fetches live counts and updates profile.seedStats, then runs pnpm validate.",
      "url": "https://ai.satyajit.si/.well-known/agent-skills/refresh-seed-stats/SKILL.md",
      "sha256": "00ed8f95c12304a2981fe4228faf570b10ac65f551c5247499597a8c9e76c5f6",
      "bytes": 1057
    },
    {
      "name": "update-health",
      "type": "skill",
      "description": "Update the biomarker dashboard on ai.satyajit.si from a lab panel. Use when Satyajit shares blood-work / lab results (PDF, photo, or text) to ingest. Rewrites the biomarker entries in data/health.ts (Zod-validated inline), then runs pnpm validate.",
      "url": "https://ai.satyajit.si/.well-known/agent-skills/update-health/SKILL.md",
      "sha256": "66c40fc2f9b30e3df2a4e42ef326732b3dc45c0c0e949cab83e2c6122ddab565",
      "bytes": 1548
    },
    {
      "name": "update-now",
      "type": "skill",
      "description": "Update the /now page on ai.satyajit.si — what Satyajit is currently focused on. Use when he says \"I'm now working on X\" or wants to refresh his now-list. Edits data/now.ts and bumps `updated`, then runs pnpm validate.",
      "url": "https://ai.satyajit.si/.well-known/agent-skills/update-now/SKILL.md",
      "sha256": "7e84932ac4fb65744f578bbc4b8afdd1d3ac5e777cc0f512175b8b3970936ab9",
      "bytes": 865
    },
    {
      "name": "update-resume",
      "type": "skill",
      "description": "Update Satyajit's resume — edit the typed Resume object in data/resume.ts (experience, education, skills, projects, publications, patents, dates). Use when the user reports a new role, achievement, skill, or asks to fix resume details. The HTML page, downloadable PDF, and /resume.json all regenerate from this one object at the next build.",
      "url": "https://ai.satyajit.si/.well-known/agent-skills/update-resume/SKILL.md",
      "sha256": "4a94297f477af8fd85e032c36b2ba03534445133f7321662849e61d869be4c09",
      "bytes": 1582
    },
    {
      "name": "update-uses",
      "type": "skill",
      "description": "Update the /uses page on ai.satyajit.si — gear, editor, and stack Satyajit reaches for. Use when he gets new hardware/software or wants to correct his setup. Edits data/uses.ts, then runs pnpm validate.",
      "url": "https://ai.satyajit.si/.well-known/agent-skills/update-uses/SKILL.md",
      "sha256": "c350a791d616acdb35548411ec86194d424bf095881e4bbf13a026c11228f5c1",
      "bytes": 862
    }
  ]
}