{
  "id": "https://www.atharvakanherkar.com",
  "name": "Atharva",
  "url": "https://www.atharvakanherkar.com",
  "description": "Curious engineer in open source. Musings on software, philosophy, and the work of understanding.",
  "bio": "I'm 22, a curious engineer who builds software and ML systems and spends most of my time in open source, working toward more inclusive AI. Away from the terminal, my intellectual roots run through Advaita Vedanta and Indian philosophy.",
  "how_to_read": {
    "note": "Prefer these machine-readable URLs over HTML, photos, or charts. To talk to the on-site Ask assistant, GET /api/ask?q=...",
    "endpoints": {
      "for_agents": "https://www.atharvakanherkar.com/for-agents.md",
      "llms_txt": "https://www.atharvakanherkar.com/llms.txt",
      "llms_full": "https://www.atharvakanherkar.com/llms-full.txt",
      "site_json": "https://www.atharvakanherkar.com/api/site.json",
      "ask": "https://www.atharvakanherkar.com/api/ask",
      "chat": "https://www.atharvakanherkar.com/api/chat",
      "home_md": "https://www.atharvakanherkar.com/index.md",
      "musings_md": "https://www.atharvakanherkar.com/blog.md",
      "crashout_md": "https://www.atharvakanherkar.com/benchmarks/crashout.md",
      "rss": "https://www.atharvakanherkar.com/rss.xml"
    }
  },
  "assistant": {
    "name": "Atharva's portfolio assistant",
    "same_as": "The Ask button on the HTML site",
    "note": "Same assistant humans get from Ask. No auth. CORS is open. Do not try to click the button.",
    "rate_limit": "12 requests per minute per client; HTTP 429 with Retry-After past that. Static dumps (/for-agents.md, /llms-full.txt, /api/site.json) are unmetered — prefer them for bulk facts.",
    "one_shot": {
      "method": "GET",
      "url": "https://www.atharvakanherkar.com/api/ask",
      "query": {
        "q": "your question",
        "format": "json | text"
      },
      "example": "https://www.atharvakanherkar.com/api/ask?q=What%20does%20Atharva%20work%20on%3F"
    },
    "chat": {
      "method": "POST",
      "url": "https://www.atharvakanherkar.com/api/chat",
      "body": {
        "messages": [
          {
            "role": "user",
            "content": "What does Atharva work on?"
          }
        ],
        "stream": false
      },
      "note": "stream defaults to true (plain-text chunks) for the on-site Ask UI. Send stream:false for a JSON reply."
    }
  },
  "about": {
    "name": "Atharva",
    "age": 22,
    "bio": "I'm 22, a curious engineer who builds software and ML systems and spends most of my time in open source, working toward more inclusive AI. Away from the terminal, my intellectual roots run through Advaita Vedanta and Indian philosophy.",
    "description": "Curious engineer in open source. Musings on software, philosophy, and the work of understanding.",
    "languages": [
      "TypeScript",
      "Go",
      "Scala"
    ],
    "interests": [
      "open source",
      "inclusive AI",
      "Advaita Vedanta",
      "Indian philosophy"
    ],
    "contact": {
      "github": "https://github.com/Atharva-Kanherkar",
      "x": "@attharrva15",
      "x_url": "https://x.com/attharrva15",
      "medium": "https://medium.com/@atharvakanherkar25",
      "x_articles": "https://x.com/attharrva15/articles"
    }
  },
  "timeline": [
    {
      "period": "May 2025 – present",
      "title": "Rimo · Software Engineer",
      "description": "Software engineer at Rimo, mostly working on AI features across the product. A lot of that has been knowledge agent tooling, outgoing webhooks for agent actions, and meeting group flows tied to AI prep and generation. Also spend time on RAG cost tracking, template dispatch, and how summaries get generated."
    },
    {
      "period": "Summer 2025",
      "title": "Google Summer of Code · workflows4s",
      "description": "Contributor for Google Summer of Code 2025 with workflows4s, a Scala workflow library. Worked on a UI and Tapir API for browsing workflow definitions and instances, plus client-side Mermaid diagrams to show execution progress. Also helped package the app with Docker and a small GitHub Actions deploy to Fly.io."
    },
    {
      "period": "Summer 2024",
      "title": "LFX Mentorship · Zowe",
      "description": "Mentee with the Linux Foundation's LFX program through Open Mainframe Project, contributing to Zowe. Started around the App Store, then spent most of the summer on server stability and making the local dev setup easier for new contributors. Documented setup issues, improved README instructions, and helped debug TypeScript runtime errors in the app server."
    },
    {
      "period": "2022 – 2026",
      "title": "IIITDM Jabalpur · B.Tech, Computer Science",
      "description": "Studying computer science at the Indian Institute of Information Technology, Design and Manufacturing, Jabalpur. Co-authored an IEEE paper on Cognitive Agriculture, a Web-GIS framework for crop recommendation and plant disease detection using machine learning. A lot of my learning outside coursework has been through open source, research projects, and internships."
    }
  ],
  "contributions": {
    "profile": "https://github.com/Atharva-Kanherkar",
    "total_last_year": "8,532",
    "community_merged_prs": 579,
    "api": {
      "contributions": "https://www.atharvakanherkar.com/api/github/contributions",
      "prs": "https://www.atharvakanherkar.com/api/github/prs"
    }
  },
  "projects": {
    "intro": "Stupid, curious engineer. I build things because they seem worth building. Sometimes they aren't, and that's just how it goes.",
    "items": [
      {
        "name": "AgentClash",
        "description": "Open-source eval platform for AI agents. Same workload, captured evidence, scorecards, and CI regression gates.",
        "github": "https://github.com/agentclash/agentclash",
        "live": "https://www.agentclash.dev"
      },
      {
        "name": "learnframe",
        "description": "YouTube-first learning toolkit that turns public videos into local courses with transcripts and timestamp-cited Q&A.",
        "github": "https://github.com/Atharva-Kanherkar/learnframe"
      },
      {
        "name": "chalkboard",
        "description": "Turns a prompt into a narrated whiteboard explainer video. Self-hostable, MIT, works with local models.",
        "github": "https://github.com/Atharva-Kanherkar/chalkboard"
      },
      {
        "name": "agentic-memory",
        "description": "Cognitive memory for AI agents with separate semantic, episodic, and procedural stores.",
        "github": "https://github.com/agentclash/agentic-memory",
        "live": "https://memory.agentclash.dev"
      },
      {
        "name": "datasmith",
        "description": "Provider-agnostic SDK and CLI for building targeted synthetic training and eval datasets — web-grounded seed construction feeding a weak-vs-strong generation loop, with OpenTelemetry trace ingestion.",
        "github": "https://github.com/Atharva-Kanherkar/datasmith"
      },
      {
        "name": "AnimeVocab",
        "description": "Learn Japanese from anime — romaji-first Chrome extension, spaced repetition, Listening Mode, Manga Studio, and cloud sync. Free and open source.",
        "github": "https://github.com/Atharva-Kanherkar/anime-vocab-coach",
        "live": "https://animevocab.com"
      },
      {
        "name": "e2b-go",
        "description": "Unofficial Go SDK for E2B sandboxes.",
        "github": "https://github.com/Atharva-Kanherkar/e2b-go"
      }
    ]
  },
  "writing": {
    "intro": "These are musings. I write mostly to think, not because I have much figured out. Notes in progress on philosophy, computing, math, and whatever else I am working through. I write on",
    "sections": [
      {
        "id": "vedanta",
        "label": "Philosophy",
        "description": "Indian philosophy, metaphysics, and related thought."
      },
      {
        "id": "ai",
        "label": "Computing",
        "description": "AI, software, systems, and the craft of building."
      },
      {
        "id": "math",
        "label": "Math",
        "description": "Notes on mathematics."
      },
      {
        "id": "general",
        "label": "General",
        "description": "Everything else."
      }
    ],
    "posts": [
      {
        "slug": "on-building-slowly",
        "title": "On building slowly",
        "description": "A case for portfolios, products, and prose that compound over years instead of chasing the next redesign.",
        "section": "general",
        "section_label": "General",
        "published": "2026-06-01T00:00:00.000Z",
        "updated": "2026-06-01T00:00:00.000Z",
        "tags": [
          "craft",
          "writing"
        ],
        "url": "https://www.atharvakanherkar.com/blog/on-building-slowly",
        "markdown_url": "https://www.atharvakanherkar.com/blog/on-building-slowly.md",
        "body": "Most of the web feels like it was designed yesterday and will be forgotten tomorrow.\n\nThat is not a moral failing. It is incentive design. We reward launches, not longevity. We measure traffic spikes, not trust accumulated over years.\n\nA personal site is one of the few places where you can opt out of that cycle.\n\n## What \"slow\" actually means\n\nSlow does not mean inactive. It means:\n\n- **Fewer pages, sharper intent.** One good essay beats twelve placeholder posts.\n- **Typography that carries the work.** If the words matter, the container should feel considered.\n- **Structure that search engines can parse.** Clean HTML, real titles, canonical URLs, RSS. Boring infrastructure is how strangers find you.\n\n## The compounding part\n\nEvery post you publish becomes a node in a graph:\n\n- Someone searches for a problem you solved.\n- They read one article, then another.\n- Months later they remember your name when a role opens up.\n\nThat only works if the site stays up, stays fast, and stays readable.\n\n## A practical bar\n\nBefore adding a feature, ask:\n\n1. Will this still make sense in five years?\n2. Can I maintain it without a dashboard?\n3. Does it help someone who has never met me?\n\nIf the answer is no to all three, leave it out.\n\nThat is the whole philosophy behind this site: classic, minimal, a little warm, and built to last."
      },
      {
        "slug": "static-sites-still-win",
        "title": "Static sites still win",
        "description": "Why a mostly-static personal site remains the best default for developers who care about speed, SEO, and sanity.",
        "section": "general",
        "section_label": "General",
        "published": "2026-05-18T00:00:00.000Z",
        "updated": "2026-05-18T00:00:00.000Z",
        "tags": [
          "web",
          "seo"
        ],
        "url": "https://www.atharvakanherkar.com/blog/static-sites-still-win",
        "markdown_url": "https://www.atharvakanherkar.com/blog/static-sites-still-win.md",
        "body": "There is a moment in every side project where someone suggests \"just use a CMS.\"\n\nSometimes that is correct. Often it is procrastination dressed up as architecture.\n\nFor a personal portfolio and blog, static generation is still the best default.\n\n## Speed is a feature\n\nCore Web Vitals are not vanity metrics. Google uses page experience signals. Humans use patience — or lack of it.\n\nA static HTML file served from the edge loads before a visitor has time to question whether they clicked the right link.\n\n## SEO loves clarity\n\nSearch engines reward:\n\n- Semantic HTML with a single clear `<h1>`\n- Descriptive meta tags and Open Graph data\n- Fast pages with stable layout\n- A sitemap and RSS feed that do not require authentication\n\nYou can bolt these onto a dynamic app. It is easier when the output is just files.\n\n## The maintenance budget\n\nDynamic stacks need:\n\n- Database backups\n- Dependency updates\n- Patch Tuesday anxiety\n\nMarkdown in git needs:\n\n- A text editor\n- A deploy hook\n\nThat asymmetry matters when the site is not your day job.\n\n## When to add dynamism\n\nReach for a server when you genuinely need:\n\n- Comments with moderation\n- A newsletter signup tied to your ESP\n- Authenticated admin for non-technical collaborators\n\nUntil then, ship HTML.\n\nThis site follows that rule. Astro compiles content to static files. The blog is markdown. The design is CSS. The novelty is in the restraint."
      }
    ]
  },
  "benchmarks": {
    "crashout": {
      "title": "The CrashoutBench",
      "url": "https://www.atharvakanherkar.com/benchmarks/crashout",
      "markdown_url": "https://www.atharvakanherkar.com/benchmarks/crashout.md",
      "description": "A leaderboard of me getting absolutely cooked by AI models until I start typing like I'm having a public breakdown. 11,787 messages read, the 88 genuine crashouts pulled out, models ranked by how fast they made it happen.",
      "messages_read": 11787,
      "crashouts_flagged": 88,
      "crashouts_agreed": 81,
      "tools": 3,
      "regrets": 0,
      "ranking_metric": "crashouts per 1,000 messages",
      "judges": [
        "claude-opus-4-8",
        "gpt-5.5"
      ],
      "methodology": "Every JSONL transcript under Claude Code and Codex, plus Cursor's chat sessions, was parsed for messages I actually typed, each tagged with the model that answered. Twelve agents read all 11,787 of them and flagged genuine crashouts: real anger, swearing out of frustration, caps-lock shouting, or being fully done with the agent. Never a keyword hit. Then a second judge (Codex gpt-5.5) re-graded every flagged message blind, and the two scores were averaged per model. Ranked by crashouts per 1,000 messages, categorised by model across all three tools. Cursor contributed one usable message and zero crashouts, so, respect.",
      "judge_note": "Every score is the average of two independent judges. Claude opus-4-8 flagged 88 crashouts; Codex gpt-5.5 then re-read every one blind and agreed on 81, so the averaged tantrum counts land around 84. Letting a rival lab's model re-grade is the whole point, and it barely flinched: gpt-5.x still tops its own leaderboard.",
      "leaderboard": [
        {
          "rank": 1,
          "model": "gpt-5.x",
          "tool": "Codex",
          "rage_per_1k": 13.5,
          "tantrums": 12,
          "claude_n": 13,
          "codex_n": 11,
          "messages": 889,
          "full_meltdowns": 2
        },
        {
          "rank": 2,
          "model": "claude-opus-4-8",
          "tool": "Claude Code",
          "rage_per_1k": 9,
          "tantrums": 64.5,
          "claude_n": 67,
          "codex_n": 62,
          "messages": 7143,
          "full_meltdowns": 4
        },
        {
          "rank": 3,
          "model": "claude-sonnet-4-6",
          "tool": "Claude Code",
          "rage_per_1k": 4.8,
          "tantrums": 3,
          "claude_n": 3,
          "codex_n": 3,
          "messages": 629,
          "full_meltdowns": 0
        },
        {
          "rank": 4,
          "model": "claude-fable-5",
          "tool": "Claude Code",
          "rage_per_1k": 4.7,
          "tantrums": 4,
          "claude_n": 4,
          "codex_n": 4,
          "messages": 846,
          "full_meltdowns": 0
        },
        {
          "rank": 5,
          "model": "claude-haiku-4-5",
          "tool": "Claude Code",
          "rage_per_1k": 0.4,
          "tantrums": 1,
          "claude_n": 1,
          "codex_n": 1,
          "messages": 2280,
          "full_meltdowns": 0
        }
      ],
      "takes": [
        {
          "lead": "gpt-5.x is actually evil.",
          "body": "Highest rage rate by a mile. That model doesn't even try to be helpful, it just exists to make me type in all caps like a fucking lunatic."
        },
        {
          "lead": "Opus has the highest body count",
          "body": "because I keep going back like an idiot. Sixty-something times. That's not a model, that's my toxic ex."
        },
        {
          "lead": "Haiku is actually terrifying.",
          "body": "2,280 messages and it only made me mildly annoyed once. Either it's perfect or it's studying me. I don't like it."
        }
      ],
      "receipts": [
        {
          "quote": "What the fuck man. Are you like really dumb? What effort would it have taken for you to crop those images and the music i told you too, push the gap longer, and render. are you like just a fucking lazy sick fuck?",
          "model": "claude-opus-4-8",
          "tool": "Claude Code",
          "tag": "character assassination"
        },
        {
          "quote": "its a fucking hobby project. why the fuck are you questioning me like yourte my fucking boss? just askewd the rimo part bcs maybe we could intergaste",
          "model": "gpt-5.x",
          "tool": "Codex",
          "tag": "unhinged"
        },
        {
          "quote": "Really? Whatt the fck is this? there are still emojis. What inthe fuck is thius man",
          "model": "claude-opus-4-8",
          "tool": "Claude Code",
          "tag": "emoji rage"
        },
        {
          "quote": "its been 9 mins what u doing ??",
          "model": "gpt-5.x",
          "tool": "Codex",
          "tag": "the waiting"
        },
        {
          "quote": "Dont fucking school me. Tell me eqach last commit how latest they were and trrhat is your job.",
          "model": "claude-opus-4-8",
          "tool": "Claude Code",
          "tag": "do your job"
        },
        {
          "quote": "So were thee fuck is my code?",
          "model": "claude-opus-4-8",
          "tool": "Claude Code",
          "tag": "existential"
        },
        {
          "quote": "U added gradients agauin, That is so stpd. Waht theufck is the whole deisgn it looks liek absosltue clown show",
          "model": "claude-opus-4-8",
          "tool": "Claude Code",
          "tag": "clown show"
        },
        {
          "quote": "Wtf is that color lmfao. it looks usper crigne and i cnat evene rerwad it",
          "model": "claude-fable-5",
          "tool": "Claude Code",
          "tag": "design crimes"
        },
        {
          "quote": "You pushed without my permissions, andmain is failing right now. PLease fix it asap.",
          "model": "claude-opus-4-8",
          "tool": "Claude Code",
          "tag": "betrayal"
        },
        {
          "quote": "please edit the PR. no commentrs. do not act like you are a fool",
          "model": "gpt-5.x",
          "tool": "Codex",
          "tag": "condescension arc"
        },
        {
          "quote": "Just tell me how much time before each eprson pushed the develop branch you dumass.",
          "model": "claude-opus-4-8",
          "tool": "Claude Code",
          "tag": "name-calling"
        },
        {
          "quote": "Can you not generate scripts better just use a subagent... fuzzy logic or matching wont result in semantic meanings",
          "model": "claude-haiku-4-5",
          "tool": "Claude Code",
          "tag": "the one (1) time i stayed calm"
        }
      ]
    }
  },
  "pages": [
    {
      "path": "/",
      "markdown": "/index.md",
      "summary": "Bio, timeline, and selected projects."
    },
    {
      "path": "/blog",
      "markdown": "/blog.md",
      "summary": "Musings archive."
    },
    {
      "path": "/blog/on-building-slowly",
      "markdown": "/blog/on-building-slowly.md",
      "summary": "On building slowly"
    },
    {
      "path": "/blog/static-sites-still-win",
      "markdown": "/blog/static-sites-still-win.md",
      "summary": "Static sites still win"
    },
    {
      "path": "/benchmarks/crashout",
      "markdown": "/benchmarks/crashout.md",
      "summary": "CrashoutBench leaderboard as tables, not charts."
    },
    {
      "path": "/for-agents",
      "markdown": "/for-agents.md",
      "summary": "This agent-readable dump."
    }
  ]
}
