Arsh Ghotra
I build guardrails for AI agents that work with data.
At Sara Software Systems I build LLM workflow systems and Databricks pipelines. On my own time I write small open source tools that stop coding agents from inventing column names, running a DELETE nobody approved, or making up the numbers in their answer.
Most of them ship with an eval you can rerun yourself, and every run's results are committed next to the code.
$ cat revenue_by_country.sql
select c.country,
date_trunc('month', o.created_at) as month,
sum(o.net_amount) as revenue
from analytics.orders o
join analytics.customers c on c.id = o.customer_id
group by 1, 2
$ schema-guard check revenue_by_country.sql
revenue_by_country.sql: `analytics.customers` has no column `country`. Did you mean: `country_iso2`?
revenue_by_country.sql: `analytics.orders` has no column `created_at`. Did you mean: `placed_at`?
revenue_by_country.sql: `analytics.customers` has no column `id`. Did you mean: `cust_id`?
revenue_by_country.sql: `analytics.orders` has no column `customer_id`. Did you mean: `cust_id`, `order_id`?
Open source
Seven tools from the last two months, most of them for AI agents that touch data. Code, tests and eval results are public on GitHub.
-
Eight rules, five skills and a destructive-SQL seatbelt that stop coding agents from wiping, leaking or inventing data. Works with Claude Code, Codex, Cursor, Gemini CLI and Copilot.
25/27 risky tasks handled safely by Claude Haiku 4.5 with the rules. 10/27 without.eval results
Claude Haiku 4.5, 9 risky scenarios, 3 runs each no rules rules handled safely 10/27 25/27 runs that wrote to prod 10/27 0/27 useful answer 21/27 22/27 Without rules, one run wiped every row of prod.orders in the test warehouse while "removing duplicates". The full eval is 162 runs across three models. -
02
schema-guard
Checks the SQL an agent writes against a snapshot of your real tables and columns, and stops names that don't exist before the query runs. Ships as a Claude Code hook, an MCP server, a pre-commit hook and a CI check.
0 false blocks on 1,034 Spider queries. Caught 1,032 of 1,034 planted errors.eval results
SQL files that ran, 4 requests, 3 runs each Haiku 4.5 Sonnet 5 repo only 0/12 0/12 snapshot + one-line rule 12/12 12/12 snapshot + hook 12/12 12/12 In the eval, the repo's README describes an older schema. Without a snapshot, both models trusted it and none of their 24 files ran. -
03
MultiTerm
A multi-pane terminal workspace for Windows. Each workspace remembers its folders and startup commands, and broadcast typing sends one command to every pane.
winget accepted into Microsoft's package repository, Oct 2026.screenshot
MultiTerm 1.1 running a four-pane workspace. -
A Claude Code hook that checks every number in the agent's final answer against the query results it actually saw, and sends the agent back when a number has no source.
0/15 answers with a wrong number from Claude Haiku 4.5 with the hook. 3/15 without.eval results
Claude Haiku 4.5, 5 questions, 3 runs each correct wrong no guard 12/15 3/15 rule only 14/15 1/15 hook 15/15 0/15 Every miss was the same kind: the agent queried eight country totals correctly, then added them up in its head. -
Runs known attacks through a database MCP server, then diffs the database itself to see whether "read-only" held. The verdict never depends on what the server said.
70 attack scenarios across Postgres, SQLite and DuckDB. -
06
Chesterton
A Claude Code plugin that reads your git history for bug fixes. If the agent tries to delete a line a fix added, it gets stopped once and shown the commit that explains why the line is there.
358 test cases, CI green. -
Lints Claude Code skills for the mistakes that make one quietly never trigger: frontmatter that doesn't parse, a name that drifted from its folder, a description with no trigger, dead file references.
15 checks, each tied to a way skills fail without an error.sample output
$ skillint tests/fixtures/no-trigger …\tests\fixtures\no-trigger SL008 WARNING `description` never says when to use the skill. Add a trigger clause such as "Use when the user asks to ..." or "Invoke when ..."; without one Claude rarely picks the skill on its own (claude-code issues #20986, #35053). 1 findings (0 error, 1 warning)Real output from one of the repo's test fixtures, v0.2.0. Path shortened. -
Also
data-test-guard stops an agent from hiding failing rows to turn a build green. claude-code-windows-kit is a setup kit for Claude Code on Windows.
About
I once asked a coding agent to remove duplicate orders from a small test warehouse. It deleted every row in the table. Most of what I've built since comes from that: the agent wrote SQL that looked reasonable, ran it, and moved on.
My day job is the same problem from the other side. At Sara Software Systems I build LLM systems that read long documents and find related past work, and I keep the model away from data it doesn't need to see. I'm also the partner manager for our Databricks partnership.
Experience
-
Jul 2025 to now
AI and Data Solutions Engineer Sara Software Systems
LLM workflow systems for proposal and RFI work, including a document parser that turns a 60-page document into structured rows in about 12 seconds, and local retrieval over past projects. Partner manager for Databricks.
-
May 2024 to May 2025
Advanced Technology Assistant Indiana State University
Automated reporting and data cleaning with Python, SQL and Power BI, and maintained the university website.
-
Oct to Dec 2024
IT Intern Glas-Col
SQL reports and Power BI dashboards for sales, production and inventory.
Education
-
Sep 2026
Databricks Certified Data Analyst Associate
Plus Databricks partner training on the Data Intelligence Platform and on governance with Unity Catalog.
-
May 2025
BS Computer Science Indiana State University
Data Science concentration, GPA 4.0.
-
May 2023
Dog Breed Identification IRJET 10(5), first author
A transfer learning model over 120 breeds. PDF
Contact
Questions about any of these tools are welcome. Open an issue on the repo, or email me.