{"id":26885,"date":"2026-05-18T16:43:14","date_gmt":"2026-05-18T11:13:14","guid":{"rendered":"https:\/\/blog.razorpay.in\/blog\/?p=26885"},"modified":"2026-06-17T07:42:45","modified_gmt":"2026-06-17T02:12:45","slug":"razorpay-engineers-built-slash-slash-builds-the-rest","status":"publish","type":"post","link":"https:\/\/razorpay.com\/blog\/razorpay-engineers-built-slash-slash-builds-the-rest\/","title":{"rendered":"Razorpay Engineers Built Slash. Slash Builds the Rest."},"content":{"rendered":"<p><b>Tens of thousands of agent sessions, thousands of PRs created and merged every month, and over a third of them merged without a human in the loop. Every one of them still had to pass the same checks as any other change.<\/b><\/p>\n<p><span style=\"font-weight: 400;\">That&#8217;s what one quarter looks like with an autonomous agent platform running inside Razorpay engineering. We call it <\/span><b><i>Slash<\/i><\/b><span style=\"font-weight: 400;\">. Slash writes code, opens PRs, reviews them, answers questions from engineering and business teams, and talks to fifteen plus internal systems along the way. This post kicks off a series on Razorpay&#8217;s Agentic SDLC. What we built, how Slash works, and what it took to get our repos ready.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Before we get into Slash, let&#8217;s set the scene.<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\"><b>Code got cheap. Everything else didn&#8217;t: <\/b><span style=\"font-weight: 400;\">Engineers in 2025 spent about fifty percent of their time actually coding. The rest went in PR reviews, Slack threads, boilerplate tests, onboarding, flaky pipelines, and hunting down config files. It was easy to write code but it was still very hard to ship fast.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>The model curves bent:<\/b><span style=\"font-weight: 400;\"> By late 2025, coding agents could read a 50-file diff, hold the context, and produce a working PR with tests on real production codebases. The question stopped being whether a model could do the work and became why we were still doing it ourselves.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Cycle time has a new lever:<\/b><span style=\"font-weight: 400;\"> A PR raised at 3 AM gets reviewed at 11 AM in a human-only org. With agents in the loop, the first review lands in under five minutes. Cycle time is the metric most engineering orgs have spent years trying to compress, and the lever here is not adding more people.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><b>Every handoff between humans drops context:<\/b><span style=\"font-weight: 400;\"> A ticket reads &#8220;Support amount filter on bulk refunds&#8221; and never mentions the seventeen edge cases the author walked through on a call. An agent can read all of it in one pass: the ticket, the call transcript, the Slack thread, the linked doc, and the previous attempt.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Slash is the answer to all four.<\/span><\/p>\n<h3><b>What Slash actually does<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Slash is a cloud agent that understands our codebase, our tools, our docs, and how we ship, and then does the work end to end.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Slash is one platform with three doors. Razorpay engineers reach it via a @Slash mention in Slack, auto-assign on a ticket, or trigger it from a GitHub CI pipeline. Same agent, same memory, same toolchain underneath. Inside, a handful of components do the actual work.<\/p>\n<p><\/span><b style=\"color: #111111; font-family: Roboto, Arial, sans-serif; font-size: 1.368em;\">Here is what happens under the hood:<\/b><\/p>\n<p><b>Launch Agents: <\/b><span style=\"font-weight: 400;\">An engineer hands Slash a task in plain English. It clones the repo, writes the code, runs tests, opens a PR, and posts an update to Slack, with no hand-holding in between. It runs in single-repo mode for the standard case, batch mode when the same change has to land across many repos at once, multi-repo mode for a task whose changes span several codebases that need to stay consistent, and clean-slate mode for skill-based work that does not need a repo at all. Execution logs stream throughout, so engineers can watch a run live or audit it later.<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-26903 aligncenter\" src=\"https:\/\/blog.razorpay.in\/wp-content\/uploads\/2026\/05\/slash-launch-agents-1.gif\" alt=\"\" width=\"640\" height=\"397\" \/><\/p>\n<p><b>Slash Reviewer: <\/b><span style=\"font-weight: 400;\">Every pull request is reviewed by a set of specialised sub-agents, each owning a single dimension: bug detection, security, code quality, the Razorpay design system, internationalization, and a pre-mortem pass. Rather than working off the diff alone, each sub-agent clones the repo and reads the surrounding file context, so its findings account for how the change interacts with the rest of the code. Severity is scored against repo-specific review skills, which encode the standards and known failure modes for that codebase, and an AI filter layer removes false positives before any comment is posted. Low-severity PRs are auto-approved without a human in the loop. About one in three code reviews flowing through Slash today is reviewed, scored, approved, and merged with no human comments.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-26908 aligncenter\" src=\"https:\/\/blog.razorpay.in\/wp-content\/uploads\/2026\/05\/slash-reviewer-gif-1.gif\" alt=\"\" width=\"640\" height=\"398\" \/><\/p>\n<p><span style=\"font-weight: 400;\"><b>Slash Event Listener<\/b>: Watches new tickets so engineers do not have to break focus mid-sprint. When a cross-functional ticket lands, it is auto-assigned to Slash, which picks it up, writes a fix that follows our standards, and posts back to the thread. In the clean case, nothing needs a human touch between ticket creation and PR approval.<br \/>\n<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-26904 aligncenter\" src=\"https:\/\/blog.razorpay.in\/wp-content\/uploads\/2026\/05\/slash-event-listener-1.gif\" alt=\"\" width=\"640\" height=\"397\" \/><\/p>\n<p><span style=\"font-weight: 400;\"><b>Scheduled Skills:<\/b> A skill is a scoped instruction that tells Slash how to handle a specific, repeatable task. A few hundred of them sit in the catalogue today, contributed by teams across the org, and we are now certifying a large chunk of them so they carry guaranteed SLAs. Typical examples include generating a sprint report, building a weekly Slack digest, analyzing open PRs for missing tests, reviewing support escalations, and running a daily Trino cost report. The routine work that used to take someone an hour every Monday morning now runs on its own.<br \/>\n<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-26905 aligncenter\" src=\"https:\/\/blog.razorpay.in\/wp-content\/uploads\/2026\/05\/slash-skills-1.gif\" alt=\"\" width=\"640\" height=\"397\" \/><\/p>\n<p><span style=\"font-weight: 400;\"><b>MCP and CLI Gateway: <\/b>Slash reaches tickets, GitHub, our design system (Blade), docs, logs, Grafana, deployment pipelines, the data lake, Slack, and a couple of dozen more systems through a single gateway. Each connection is registered once with scoped permissions that define exactly what Slash can read, what it can write, and what it must never touch, so access stays auditable as the platform grows. Once a tool is added at the gateway, every agent on the platform can use it without any further integration work.<br \/>\n<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-26906 aligncenter\" src=\"https:\/\/blog.razorpay.in\/wp-content\/uploads\/2026\/05\/slash-mcp-gateway-1.gif\" alt=\"\" width=\"640\" height=\"411\" \/><\/p>\n<p><b>Discover, Slash&#8217;s Knowledge Graph: <\/b><span style=\"font-weight: 400;\">Discover works like an internal search engine for everything the company already knows. It takes a natural language question and searches across ten plus sources, including GitHub PRs, Slack threads, Google Drive, AWS, ticketing software, and internal tooling. A leader can ask something like &#8220;what did the payments team discuss about the latency issue last week?&#8221; and get back a short synthesis along with the underlying thread, the linked tickets, and the doc someone wrote up afterwards. Making this kind of context easy to find is the first step in any culture and productivity shift, and Discover is how we are solving it.<\/span><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-26907 aligncenter\" src=\"https:\/\/blog.razorpay.in\/wp-content\/uploads\/2026\/05\/slash-discover-1.gif\" alt=\"\" width=\"640\" height=\"397\" \/><\/p>\n<p><b>Slash is the platform. Repos decide the output.<\/b><\/p>\n<p><span style=\"font-weight: 400;\">Connecting a coding agent to a repo takes a few seconds, but getting useful output from it can take hours, and the same agent will produce very different results across two repos. The difference comes down to how well each codebase describes itself to an agent.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">We wanted Slash to behave with high accuracy across all our repos. So we score every repo on three pillars.<\/span><\/p>\n<ul>\n<li><b>Context<\/b><span style=\"font-weight: 400;\">: how well a repo describes itself to an agent. Does it have an <\/span><a href=\"http:\/\/agents.md\" rel=\"nofollow noopener\" target=\"_blank\"><span style=\"font-weight: 400;\">AGENTS.md<\/span><\/a><span style=\"font-weight: 400;\"> and the right repo context files? Do large subdirectories carry their own scoped skills, so an agent working deep in the tree still has local guidance? Are the knowledge docs kept current rather than left to drift?<\/span><\/li>\n<li><b>Testing<\/b><span style=\"font-weight: 400;\">: how safely an agent can validate its own work. Unit, integration, and end-to-end coverage; API and contract documentation; and dev testing infrastructure that lets changes be exercised without touching production.<\/span><\/li>\n<li><b>CI\/CD<\/b><span style=\"font-weight: 400;\">: how smoothly an agent&#8217;s output reaches production. Agent skills wired into CI, deployment automation, build speed, and the configuration needed to take a change live.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">We are still refining the exact scoring, but a repo that clears 80% across all three pillars is considered \u201cAgent Ready\u201d. Scores are refreshed periodically and surface in POD health dashboards. Engineering teams across Razorpay have spent the last several months getting their repos above that bar, and the effort compounds: once a repo is Agent Ready, every agent that touches it works better, not just for Slash but across the whole SDLC.<\/span><\/p>\n<h3><b>What surprised us<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">We didn&#8217;t expect an internal platform to behave like an internal open-source project. But that&#8217;s what happened. A small team built the first version, and a lot of what came next was contributed organically by engineers who were not on the project, at a pace we did not anticipate. The contributions were not limited to engineering either. Designers, business teams, and PMs came in with their own ideas for how to use Slash and how to make it better.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Discover itself started as a hackathon project. By the time we reached a limited internal launch, more than half the agents on the platform had been contributed by engineers who did not work on Slash. Teams saw the same value at the repo level and began investing in their own codebases, sharpening docs, wiring in CI agents, and lifting test coverage. The compounding effect was easy to see, since every hour spent on a repo&#8217;s readiness paid back across every future agent task that touched it.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The numbers moved accordingly. PRs created through Slash went from about 100 a week to about 1,000 a week inside a month. PRs merging with zero humans in the loop went from about 10 a week to about 100 a week in a couple of weeks. Queries through Discover went from about 1,000 a week to tens of thousands a week in the same window.<\/span><\/p>\n<h3><b>What&#8217;s next<\/b><\/h3>\n<p><span style=\"font-weight: 400;\">Slash is the platform. The agents on top of it are what make it useful.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">The next post in this series will go deep on the Agentic Quality Lifecycle, the set of agents we built on top of Slash to do our own testing across the SDLC. It covers how they generate test suites from PR diffs, run them in parallel against dev environments, triage the failures, and decide what is ready to ship.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Will share more about this soon.<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tens of thousands of agent sessions, thousands of PRs created and merged every month, and over a third of them merged without a human in the loop. Every one of them still had to pass the same checks as any other change. That&#8217;s what one quarter looks like with an autonomous agent platform running inside<\/p>\n","protected":false},"author":179,"featured_media":26913,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[1137],"tags":[],"class_list":{"0":"post-26885","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-ai-products"},"_links":{"self":[{"href":"https:\/\/razorpay.com\/blog\/wp-json\/wp\/v2\/posts\/26885","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/razorpay.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/razorpay.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/razorpay.com\/blog\/wp-json\/wp\/v2\/users\/179"}],"replies":[{"embeddable":true,"href":"https:\/\/razorpay.com\/blog\/wp-json\/wp\/v2\/comments?post=26885"}],"version-history":[{"count":11,"href":"https:\/\/razorpay.com\/blog\/wp-json\/wp\/v2\/posts\/26885\/revisions"}],"predecessor-version":[{"id":27251,"href":"https:\/\/razorpay.com\/blog\/wp-json\/wp\/v2\/posts\/26885\/revisions\/27251"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/razorpay.com\/blog\/wp-json\/wp\/v2\/media\/26913"}],"wp:attachment":[{"href":"https:\/\/razorpay.com\/blog\/wp-json\/wp\/v2\/media?parent=26885"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/razorpay.com\/blog\/wp-json\/wp\/v2\/categories?post=26885"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/razorpay.com\/blog\/wp-json\/wp\/v2\/tags?post=26885"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}