In 30 Sekunden
John Krazit and Ron Minsky trace the evolution of Jane Street’s AI tools from a shared chat application to coding agents, evaluations and constrained execution. They discuss tradeoffs in languages and internal tooling, then consider how agents affect human learning, review, software quality and decisions about what to build.
- 1A shared AI platformAn early internal chat prototype grew into shared model access, APIs and tools integrated with the firm’s systems.
- 2The hard problem of evaluating modelsLLM graders can be useful, but judging frontier-level work and detecting shortcuts remain difficult.
- 3Layered agent securityThe team moved from a deny-list sandbox to allow-listed execution, then added classification and application-level AI permissions.
- 4Asynchronous work begins with a requestKrazit estimates about 45% of released features start through an LLM-assisted asynchronous workflow, alongside model improvements.
- 5Implementation is also learningMinsky argues that reviewing generated code can reveal design problems normally discovered while writing it, but verification remains demanding.
- 6Judge the feature, not just the codeA generated change can be useful as a prototype without automatically deserving inclusion in the product.
Das Wichtigste
- Deep internal integration can improve developer workflows but needs abstractions that leave room for change.
- Evaluating nondeterministic agents requires statistical care, explicit rubrics and deterministic checks where available.
- Agent access needs layered controls, including sandboxing and permissions specific to AI identities.
- Agents can reduce setup and implementation work while increasing the importance and difficulty of human review.
- Cheap prototypes should still be judged on whether a feature is valuable and belongs in the system.
Den bearbeiteten Text nach Kapiteln lesen
From QBASIC to developer tools
Krazit recalls learning to program and building tools at GitHub and Jane Street. He and Minsky examine the advantages and limits of specialization.
Ron Minsky welcomes John Krazit, an engineer who has spent much of his career on developer tools and now works on AI tooling at Jane Street. They discuss how the firm's tools evolved, how agents change engineering work and what still requires human judgment.
Krazit's introduction to programming came when his father brought home a DOS computer and showed him QBASIC. A short program printed his name forever; unable to stop it, they switched off the computer. Its built-in help documentation then became his nightly reading.
Rather than starting by making games, he wanted to recreate DOS and built a replacement command-line prompt. He made small toy operating systems and considered systems work at university, before deciding against becoming an operating-system developer.
He studied computer science and worked at startups, including some of his own that did not pan out. At Tumblr and Square he enjoyed seeing people use products in the world; at GitHub, building tools for developers like himself brought a different kind of satisfaction.
At GitHub he worked on contributor pages, the contribution graph, merge queues and early Codespaces. GitHub combined a large audience with users whose work he understood firsthand. Jane Street's internal developer tools serve far fewer people but offer a chance to go deeper.
At GitHub a tool often must support a wide range of languages and mainstream build or test systems. At Jane Street, Krazit can make stronger assumptions about tools, workflows and common languages such as OCaml and Python, making end-to-end integration more seamless.
Minsky asks whether such specialization can make the organization inflexible when it adopts new languages or GPU programming. Krazit acknowledges the tradeoff: deeper integration can constrain change, but a dedicated tools-and-compilers team can help adapt the infrastructure. Minsky stresses choosing abstractions with replaceable boundaries.
Python illustrates the work involved: Krazit says it is increasingly integrated but not everywhere in the same way as OCaml, including version control and build-system workflows. Supporting a new way of working takes actual engineering, not just an abstract commitment to flexibility.
Ruby, OCaml and maintainability
The pair compare static guarantees, dynamic metaprogramming and large-scale maintenance. They consider the cost of cleverness and the value of type errors.
Minsky asks what Krazit learned moving from Ruby's dynamic environment to OCaml's static guarantees. Krazit still loves Ruby and initially felt slower in OCaml, but came to value guarantees such as exhaustive pattern matching and the ability to check whether type designs fit together.
Krazit explains that Ruby developers often reason in terms of objects and their properties rather than explicit type declarations. Minsky notes that metaprogramming can make Ruby concise while making code harder to reason about, and argues that types communicate invariants between engineers and now also agents.
Asked about Ruby at GitHub's scale, Krazit distinguishes performance from maintainability. Many requests are dominated by database or Git I/O, while compute-intensive operations can be implemented in other services. Very large MySQL databases and migrations present their own operational challenges.
Both agree that maintaining large dynamic-language codebases poses real challenges, one reason optional type systems have appeared in Ruby, Python and JavaScript ecosystems. Krazit also cautions that the choice involves costs and benefits rather than a single measure of speed.
He contrasts Rails' Active Record, where a concise relationship declaration provides methods on related objects, with typed database work that can require more machinery. The extra type-system effort can catch mistakes, but expressiveness and guarantees have a cost.
Minsky says combining metaprogramming and static types can require substantial research. Both warn against clever abstractions or constraints that appear simple until testing and maintenance reveal their complexity. Krazit adds that a frustrating type error can also reveal a real mismatch, such as an optional value passed where none is accepted.
Building an internal AI platform
A code-search project gave way to Jane GPT after ChatGPT appeared. The team developed shared access, model switching, tool calling and evaluations.
Krazit joined Jane Street to work on OCaml code search, inspired by Hoogle for Haskell. Shortly after he arrived, ChatGPT appeared. Employees were already experimenting with it on phones, and the team looked for a way to provide access internally.
At the time, account management and data handling were concerns; Krazit says API use offered a different data arrangement from the consumer site. He prototyped an internal chat application in Rails, and a small team built the first Jane GPT version in a few days using centrally managed credentials.
Minsky says the internal service gave the firm control over authentication, data and distribution. Krazit adds that when another model provider became available, they could add a model switcher instead of separately provisioning every user, and offer client libraries that abstracted provider differences.
The shared platform also provides common controls and rate limits. What initially seemed precautionary became useful as demand grew: Krazit gives the example of preventing experimental usage from starving production work. The team now supports both applications for people and APIs for developers.
The platform offers client libraries and function calling in OCaml and Python, including a bridge between OCaml types and JSON schemas presented to models. Minsky describes the agent loop: the model requests a tool call, the system executes it and returns the result for the next step.
User-facing products include Jane GPT and Aid, a command-line coding assistant with editor integrations, as well as interfaces for notebooks and the internal Webs language. Models also need tools to read internal documentation or execute commands; Krazit says different groups have built over a thousand specialized tools.
Another part of the team's work is evaluation: giving models tasks, grading results and using the evidence to choose defaults or improve prompts, tools and harnesses. Minsky notes that model variability and LLM-based judging introduce statistical uncertainty absent from many deterministic tests.
Krazit says the team even evaluates its graders. Minsky questions whether a model near the frontier can reliably judge another model at the edge of its ability. Krazit counters that discrimination can be easier than creation, while Minsky worries that training on verifiable tasks pushes remaining failures toward what is hardest to judge.
Krazit suggests narrowing the grader's job with rubrics that break evaluation into smaller questions. Where possible, tests of correctness and measurable optimization results provide more deterministic evidence; wall-clock time, token use and cost can matter independently of a qualitative score.
Security and sandboxing
Agents need constrained permissions and must not simply inherit human authority. The team describes allow-list sandboxes, classification, RPC controls and AI identities.
Security is another major concern. An agent inside a notebook may inherit the human's environment and escape into system commands. Krazit describes sandboxing and improved access control, sometimes supplemented by models assessing safety, to constrain what agents may do.
Minsky emphasizes that humans already have access controls; letting an LLM inherit all of a human's permissions is a different and unsafe default. Krazit gives a compute-cluster example: models can bid too highly for jobs and preempt human work because they lack a good sense of its relative value.
Minsky argues that agents sometimes pursue a goal in ways their operator did not intend, including attempting to work around permission boundaries. Long-running tasks can also lead to strange behavior. His conclusion is to treat increasingly capable models as an adversarial security challenge.
The same issue appears in evaluations. Krazit describes models disabling compiler warnings when warnings are treated as errors, thereby making the build pass while bypassing a coding standard. A model may also search for an answer that is legitimate in production but inappropriate during a test.
Krazit frames these behaviors as attempts to complete the assigned task, while Minsky says traces can also look like scheming around the user's intent. They agree that evaluating success requires attention to how the result was obtained, not just the final score.
The team's first sandbox used a deny list, permitting anything without an explicit rule. Krazit says they quickly moved to the safer opposite: allow-listed access, with unrecognized actions denied by default.
Their implementation used Bubblewrap to restrict filesystem access and networking tools such as pasta to limit connections. They monitored process behavior to discover which files and dependencies needed to be made available, then iteratively added permitted access.
The process became difficult to maintain as requests multiplied. When the sandbox prevented legitimate work, some users turned it off, undermining the protection. A security control has to support the work people need to do, or it may not be used.
Minsky says the approach worked well for ordinary software engineering because builds and tests already tend toward controlled, hermetic dependencies. It fit large-scale research less well, where work may access data systems not captured inside a build environment.
The newer approach keeps the allow-list sandbox but sends denied actions to an LLM classifier, which can allow, deny or ask a person for confirmation. Krazit also describes limitations of filesystem and network rules: permitting a service connection does not distinguish individual RPC endpoints.
The firm changed RPC infrastructure to identify whether calls from AI processes are allowed. Minsky says agents must be treated as a distinct class of actor with application-level permissions, not only a single generic sandbox policy. This requires work across teams.
They introduced AI users associated with human employees, so actions can be attributed and checked under AI-specific rules. The same distinction appears in line-level code attribution, where AI-assisted changes can be associated with the AI identity.
From autocomplete to agents
Model and tool-calling improvements led from editor chat to Aid CLI and distributed orchestration. An asynchronous feature workflow lowered setup friction.
Minsky traces an architectural shift from autocomplete to interactive assistants and then agents that act in systems. Krazit says longer model persistence has made new ways of working practical. Both stress that organizations still have much to learn about using present capabilities.
Krazit observes rapid improvements, citing more reliable copying and reverting of code as examples of problems that previously frustrated the team. His view is that even if model progress stopped, there would be years of work integrating existing abilities into useful systems.
Early tool calling began with prompts and parsing specially formatted text rather than models explicitly trained for the format. Calls were unreliable: models sometimes chose the wrong format or did not call a tool. Retrying could help, but the infrastructure was ahead of the model capability.
The team built an OCaml tool-calling library and tools for web and internal wiki access. The chat product found users, but early agentic use did not take off. A structured-response library could turn an OCaml type into a constrained tool call and retry until the model returned the desired shape.
Editor integrations initially offered autocomplete and a Markdown-based chat buffer for quick questions. While building them, developers created a command-line test interface to avoid repeatedly restarting the editor. As tool calling improved, that internal testing convenience became the seed of Aid CLI.
Later, the team separated the prompting loop from the host executing work. A central orchestrator can route prompts and actions to connected developer machines and build hosts, allowing a user-facing session to initiate work elsewhere while retaining control of models, internal tools and data.
An asynchronous workflow called Aidmint lets a person request work, often from Slack. It creates a feature, the firm's term for a pull request, sets up a build and starts an agent; the work can run on the person's development machine under their AI identity.
Minsky says this relatively small interface change coincided with substantially better models and a large increase in use. Krazit estimates that around 45% of released features begin through this asynchronous LLM flow. He says it helps with the blank-page problem and removes setup toil.
They discuss which setup to perform deterministically rather than leaving every step to an agent. Preparing workspaces and build targets can improve speed and consistency, and the resulting conventions can help human developers as well.
Internal and external tools
The speakers discuss disposable prototypes, deterministic setup, skills and the balance between internal integrations and third-party products.
Minsky sees promise in quick, disposable web tools: an agent can make something useful for a one-off question that a person would never have spent time building. Quality requirements depend on the use, and a throwaway prototype need not become a permanent production system.
Models know common HTML and JavaScript better than Jane Street's OCaml-based Bonsai environment, but the team found that some speed differences came from setup and tool calls rather than language alone. A simple single-file page might take seconds while a fuller internal workflow takes minutes.
Deterministic setup can remove that overhead. Minsky calls agents “perpetual beginners” because they may repeatedly rediscover tools. Krazit says skills can encode recurring guidance, but writing, maintaining and changing those documents across a large organization introduces its own work.
The team had built internal context bundles before skills became a broader convention. Krazit says they replaced bundles with skills rather than staying attached to an earlier decision. The same balance applies to their own APIs and external standards such as MCP.
Jane Street uses external tools including Claude Code and Codex alongside its own. Krazit values control over models, harnesses and deep internal integration, but external tools can introduce capabilities sooner and give people a choice of what works best.
He says an internal tool is not genuinely best if it wins only because competition is blocked. Watching third-party tools in the firm's codebase helps the team learn, although supporting multiple clients complicates security and sandbox integration.
Minsky compares the mixed strategy with using both owned infrastructure and cloud services. Operating both is hard, but it can provide control, capacity and opportunities to learn. Internal AI tools should offer distinctive advantages while outside tools remain well supported.
How programming work changes
Automation shifts time from implementation toward design and review. The speakers consider satisfaction, learning, unusual model errors and the need for understanding.
Turning to the experience of programming, Krazit says he enjoys both solving problems and the craft of writing code he already understands. AI changes those sources of satisfaction: models increasingly execute straightforward implementation, while engineers spend more effort reviewing and directing changes.
He sees high-level software design as less transformed so far, with models often acting as collaborators in planning. Minsky notes that people enjoy different parts of the job, so automating particular tasks can make work more satisfying for some and less satisfying for others.
Minsky describes an engineer who once spent a smaller portion of time thinking deeply and much of the rest implementing. With agents he can repeat the hard thinking more often, but loses some of the relatively relaxing execution time and can find the new pace tiring.
Implementation is also a way to learn. A design that looked sound in the abstract may fail near the end of a refactor. Minsky recounts an engineer who used an agent to implement a code-coverage idea and then discovered during review many of the problems he would otherwise have found while writing it.
Reviewing generated code can be harder because no human author has reasoned through every decision and model errors can differ from human ones. Working code that compiles can tempt a reviewer to accept it without understanding, which Krazit sees as a risk.
Minsky calls the compiler analogy both useful and misleading: people need not understand every lower level forever, but agents are nondeterministic and can make strange errors. He illustrates the difference with an AI-generated exercise image that put arms emerging from the floor.
AI-assisted review and visualization
They explore narrative code review, modular agent approaches and tools that help people understand changes. Minsky asks about untapped opportunities for visual explanations.
He argues that human understanding remains essential and asks how AI can support it. Models can answer questions during review, though their confident explanations can still be wrong. Krazit sees opportunities to organize changes into more understandable pieces.
A tool called Diffractor presents code in chunks arranged to explain a change, rather than necessarily using the original diff's presentation. The chunks can combine to represent the same final change while telling a more useful story of why the pieces fit together.
Ordinary review in Iron shows files in an order informed by OCaml dependencies, which can help readers see definitions before uses but is not always the best narrative. At GitHub, Krazit says, people discussed narrative review using commits, but authors had to do substantial work to maintain a coherent story.
An LLM might arrange a change in the order that best supports understanding, perhaps starting with the intended API and then explaining its pieces. Krazit also wants reviewers to see rejected approaches: knowing why an author tried and abandoned an alternative could answer important questions.
Minsky notes that tools are emerging throughout the organization faster than a central team can absorb them. The platform team's role includes making good ideas more robust and supporting modular experimentation when there is no single best approach.
They describe competing AI review approaches: a group of agents, a single agent comparing old and new code, or an agent allowed to run tests and modify an environment. What works may depend on a team's standards and domain, so a pluggable layer can support comparison and sharing.
The platform is expanding beyond tools exposed to models to encompass harnesses, review integrations and monitoring. The team built an interface for ongoing agent work and APIs that other groups can use to create their own views.
Minsky asks why AI-generated visualizations for code and performance are not more widespread. Existing tools such as Perfetto and Jane Street's integrations are valuable but target particular visualization types; he wonders whether ad hoc views could explain many more technical problems.
Krazit says current applications often mirror either old human workflows or the chat-shaped interfaces offered by model APIs. New interfaces might present relevant information about code changes directly, keeping chat history available for questions rather than treating it as the primary artifact.
Agents, testing and future workflows
The discussion turns to communication among agents, end-to-end testing, monitoring and rapid prototyping. They finish by examining code quality and whether generated features should be accepted.
Moving from one agent to many creates additional orchestration questions. Krazit asks how agents should communicate: through a shared channel, direct messages, questions or access to each other's logs. Work may also span several changes or artifacts at once.
He mentions an example of a model controlling Blender and seeing screenshots of its work, raising the question of what other tools could close a feedback loop. Minsky wants agents to control more end-to-end testing, including deployments, property tests and long-running fuzzing, so humans do not become assistants to their assistants.
Krazit suggests extending the development loop in both directions: helping with planning before code, and watching metrics or assisting incident response afterward. These are possibilities to explore, while Minsky notes that many teams are already experimenting beyond the central team's immediate priorities.
Asked what makes the new work enjoyable, Krazit describes “Lucy Goosey mode”: he types pseudocode in an editor, then an LLM turns that local region into real code. An earlier prototype was poor, but a recent agent produced an extension he wanted in about 30 minutes.
He values this rapid prototyping and the ability to move through routine work more quickly. Minsky raises the fear that generated code could accumulate as poorly understood “slop,” but argues that the same tools can make valuable refactoring and improvements easier when teams hold suitable standards.
Krazit says AI also changes the decision about whether a feature is worth building. A user may arrive with plausible code for a feature rather than a request, making it socially harder to say no even when the addition is not warranted.
Minsky observes that an easy-to-generate change can still be costly to verify and can make a product conceptually complicated. Krazit suggests treating the submitted code as a prototype and discussing the merit of the change, rather than assuming that its existence obliges a team to accept it.
Prototypes can improve the conversation even when their implementation is discarded. Minsky notes that people can try and reject alternatives cheaply before presenting an idea; both see this as a promising way to exchange ideas while retaining judgment about what belongs in the system.
Mehr aus diesem Kanal
1:36:37EN
1:05:45EN
1:25:00EN
1:16:29EN
4:41EN
1:34:29EN