Varun S G
Student, building agents
Hi, I'm Varun, a student from Bangalore--:-- here
. I'm doing a BTech in Computer Science and AI at Plaksha University, and I graduate in 2027.
I like working on agents, mostly on the parts around the model: the harness that runs the loop, the tools it calls, the context it carries and the checks on what it says. I'm looking for internships and full-time roles as a software or AI engineer, and I can start right away.
I also contribute to open source: 37 merged PRstext-to-cad18ai-sdk-provider7supervision-js4browser-harness3cambai-python-sdk2mem01dbos-transact-py1gear1 so far, mostly in agent and AI tooling. That includes code merged at OpenRouter, mem0, Browser Use, Roboflow, DBOS and Camb.ai.
Away from code, I'm into bikes. Not racing, just all the different kinds of bikes and the engines in them.
Now, Building upheld, and digging into how agent tooling and environments are built today and how they could be better.
Experience
AlgoUniversitytech intern at a YC S21 startupJun – Aug 2026
I built three tools for AlgoUniversity's students and staff. The first is a grading pipeline (Next.js, BullMQ, Redis, Gemini 2.5) that scores a submission's logic and Big-O complexity in under ten seconds. It's hardened against prompt injection and hardcoded outputs, and it replaced manual first-pass grading.
The second is a code coach that gives hints derived from the syntax tree to walk students through logic errors, which cut escalations to human mentors by 60%. The third turns uploaded problem images into structured JSON and Markdown with the Vercel AI SDK, which cut admin time by 80%.
Work
upheldchecks AI citations against their sources74.4 F1
AI search answers mostly cite real links now, but the cited page often doesn't say what the answer claims. upheld splits an answer into claims, finds the passage in each cited source that bears on it, and reports which claims the sources actually back. It also flags dead links, wrong entities and factual sentences with no citation.
QTell me about the Eiffel Tower.
The Eiffel Tower was designed by the engineering company of Gustave Eiffel and completed in 1889.[1] It stands 384 metres tall.[1] It was the tallest man-made structure in the world until the Chrysler Building in New York was finished in 1930.[1] Its design was led by the architect Frank Lloyd Wright.[1] The tower is repainted every three years using a special bronze paint.[2] It is the most visited paid monument in the world.
The cited source backs the claim.
It is named after the engineer Gustave Eiffel, whose company designed and built the tower from 1887 to 1889.[1] en.wikipedia.org/wiki/Eiffel_Tower
The source is real and readable, but doesn't back the claim. Flagged span: “stands 384 metres tall”.
The tower is 330 metres (1,083 ft) tall, about the same height as an 81-storey building, and the tallest structure in Paris.[1] en.wikipedia.org/wiki/Eiffel_Tower
The cited source backs the claim.
…the tallest human-made structure in the world, a title it held for 41 years until the Chrysler Building in New York City was finished in 1930.[1] en.wikipedia.org/wiki/Eiffel_Tower
The source is real and readable, but doesn't back the claim. Frank Lloyd Wright isn't named anywhere in the source.
The design of the Eiffel Tower is attributed to Maurice Koechlin and Émile Nouguier, two senior engineers working for the Compagnie des Établissements Eiffel.[1] en.wikipedia.org/wiki/Eiffel_Tower
The cited URL is dead and was never archived. [2] returns HTTP 404.
A factual-looking sentence with no citation at all.
- [1]en.wikipedia.org/wiki/Eiffel_Towerlive · 200
- [2]
en.wikipedia.org/wiki/Eiffel_Tower_repainting_schedule404 · never archived
It runs on a laptop with no API key. The default verifier combines MiniCheck, word overlap and LettuceDetect with a four-number logistic regression, and scores 74.4 macro-F1 on AttributionBench, above every zero-shot system in the benchmark's paper.
deadlock1v1 competitive programming, live1,600+ problems
Two players get the same Codeforces problem and the first correct submission wins. Matchmaking and match state live in Redis, each player sees the other's progress over Socket.IO, code runs on Judge0 in more than ten languages, and results feed an Elo rating.
There's ranked matchmaking with problems picked to match both ratings, invite links for private duels, and ghost replays. Seat claims and match starts are Redis Lua scripts, so they're atomic, and a shared judge queue stops test runs from causing false time-limit failures. For fair play, the editor blocks outside pastes and large inserts, opponents see when you switch tabs, and each player gets an integrity record that a person reviews instead of an automatic penalty.
Budget-conditioned racingone RL policy that races to an energy budget4.51 / 5.0
A Soft Actor-Critic driver for TORCS that takes its remaining energy as an input, the way a Formula E car manages its battery. The budget was grafted onto a pretrained 32-input driving policy as a 33rd input, so it kept its racing line while learning to lift and coast when energy runs short.
On a budget of 5.0 it finishes every lap and uses 4.51 of it. The unconstrained baseline runs dry 94% of the way round.
Open sourceOpenRouter, mem0, Browser Use and more37 merged
I'm the most active outside contributor to text-to-cad, and I added a public rerankingModel() API to OpenRouter's AI SDK provider. The rest is mostly fixes in agent and AI tooling.
I'm its most active outside contributor: 18 PRs and over 20,000 changed lines in under a month. I split the 5,200-line Python codebase into single-purpose modules, kept the viewer inside its root, streamed multi-gigabyte assets in 64 KiB chunks and built a 3D measure tool.
- 26 Aug#335skills: fix gcode's export remediation; add cad-viewer test suite; repair skill deps
- 26 Aug#305viewer: add worker and cold process timeouts and stream large assets
- 25 Aug#333viewer: stream asset and download responses in 64 KiB chunks
- 25 Aug#304viewer: enforce root containment, fix symlink escapes, and guard scanner loops
- 23 Aug#312cadgen: safe STEP metadata id minting; GLB reader and table-helper dedupe
- 23 Aug#311implicitjs: shared theme settings and GIF encoding, declared materials honored
- 23 Aug#310cadgen: fix Windows lock probe handle mode and scene-cache rename races
- 14 Aug#261cadgen: split generation.py and step_scene.py into single-concern submodules
- 14 Aug#260Add Windows msvcrt fallback to the coordination lock
- 14 Aug#259Add skill-level tests for sendcutsend, step-parts, and implicit-cad
- 14 Aug#258Add TYPE_CHECKING imports for cadgen public API
- 14 Aug#257Rename cadgen.step_artifact module to step_artifact_cli
- 14 Aug#256cadgen: annotate or narrow every bare exception handler
- 14 Aug#255docs: add SECURITY.md with the Viewer trust model
- 14 Aug#254release: sync implicitjs versions with the canonical VERSION
- 14 Aug#253cadgen: drop the dead traversal in _scene_has_assembly_structure
- 12 Aug#193Add full 3D measure tool to the CAD viewer
- 5 Aug#192fix(viewer): survive malformed percent-encoding in legacy CAD paths
OpenRouter's official AI SDK provider. I added a public rerankingModel() API for the SDK's rerank(), and fixed streaming reasoning metadata, routing options that overwrote provider preferences, and the strict flag on tools.
- 21 Oct#553feat: add runtime reranking model support
- 21 Oct#552fix(chat): support OpenAI image detail parameter (#493)
- 21 Oct#551fix(image): merge runtime provider options with configured routing preferences
- 21 Oct#550fix(usage): preserve is_byok as isByok in providerMetadata.openrouter.usage
- 21 Oct#549fix(provider): declare specificationVersion v4 on provider object
- 21 Oct#548fix(chat): forward tool strict setting to API request
- 21 Oct#547fix: prevent assigning undefined keys during streaming reasoning accumulation (#540)
Roboflow's supervision-js: fixes for seeking and chunked detection in the web player and for mask rasterization, and a new percentage bar annotator.
- 16 Sep#104feat(web): add percentage bar annotation renderer
- 27 Aug#102fix(core): align mask rasterization boundaries and preserve box dimensions
- 26 Aug#98fix(web): guard seek and step presentation against superseded navigation
- 26 Aug#97fix(web): include exact range-end chunks in chunked detection source
Browser Use's browser-harness: rejecting bad CLI flags and malformed auth files, and saving webm exports next to the requested output.
Camb.ai's Python SDK: falling back to the CAMB_API_KEY environment variable, and fixing the README's examples.
Stopped mem0's config manager from pushing OpenAI's base URL and model onto other providers.
DBOS Transact: dbos start now exits with the failing command's code.
A framework for recursive self-improvement of agent harnesses. Its search now samples parents from the seed champion instead of the run's starting harness.
More on GitHub.
Awards
Kaggle silver medalHull Tactical market prediction166th / 3,677
Forecasting S&P 500 excess returns with an FT-Transformer and XGBoost pipeline, trained with sharpness-aware minimization. It reached a Sharpe ratio of 1.699 and placed 166th of 3,677 teams.
Dot Slash hackathonproduct cataloging for local vendors1st place
A cataloging pipeline for local shops: bounding-box detection finds each product in a photo, and the Gemini API pulls its details into a product CSV.
Stellar Community FundKickstart award for a Web3 project$10k grant
A $10k Kickstart grant for a Web3 project on the Stellar chain, designed to drive use of the network and let people monetize their content.
Contact
Email is the best way to reach me: varunsg666@gmail.com