Suraj Malla
I build AI systems for small B2B teams and run them in production. Mytrya is the name I work under.
For the last two years I’ve built and operated an AI support employee for a software company: one agent that handles a case end to end across their helpdesk, their live chat and a chat widget of its own on their site and inside their apps. It acts in billing and on the dev board, asks a person before it moves money, and learns from what the human team actually sends. Alongside it sit a daily dashboard that reads the same desk for their leadership, and two smaller internal tools. All of it is written up under Work, with the client unnamed.
On my own time I build products, and they keep me honest about what it takes to ship. offScript is a rehearsal partner for actors with two speech engines and a cue engine that reads the line instead of the clock. NEPSE Copilot is an investing copilot for the Nepal Stock Exchange that grades its own calls. Narratelyreads people’s own books aloud and narrates each sentence once for every reader. All three are live, and you can watch them change in the build log.
The practice is one person on purpose. You talk to the person who writes the code, runs it and answers when it breaks. The cost of that is capacity, so I take a small number of projects at a time and say no when a project isn’t a fit.
I write most things in TypeScript on Next.js, keep data in Postgres or Redis, and use Claude, Gemini and OpenAI models through their APIs, chosen per task and measured where the choice matters.
- Status
- Taking new projects
- Local time
- --:-- · UTC+5:45
- [email protected]
- GitHub
- srjmalla
- Suraj Malla
- Hours
- Full overlap with Europe, mornings for the US East Coast.
How I build
Rules that appear in the code of the systems under Work. Each exists because something went wrong without it.
Dry-run is the default
Anything that can write to a system ships with a mode that shows the full trace and writes nothing. That mode is on until you turn it off, one integration at a time.
Grounded or escalated
An agent may state what it retrieved and cite where it came from. It may not approximate. When there is nothing to ground an answer in, escalating to a person is the correct output.
Numbers are computed, not generated
Counts, medians, returns and thresholds are computed in code where a test can check them. Models describe and classify. They don't add up.
Read the structure that already exists
Scripts have scene headings, tickets have fields, boards have columns. Parsing them is exact and free. Asking a model to infer them costs the whole document and returns a guess.
Cost is part of the spec
Caps per window, shared in-flight requests, and work deferred until someone actually opens the page. A system whose bill grows with curiosity gets switched off.
Assume the source will disappear
Rate limits are measured, not assumed. The old path stays as a fallback. An unexpected response shape is treated as an outage and reported, never interpreted as data.
Identifiers come from context
Ticket IDs, account IDs and record keys are read from the assembled context, never from model output. A hallucinated ID has nowhere to go.
Taking new projects · start within 2 weeks
Tell me about the process that eats someone's week.
What it is, who does it, how often, and what goes wrong when it’s late. I reply within one working daywith a scoping call or an honest reason it isn’t worth automating.