Browse · Writeups
Debugging the Internet: CodiumAI’s Case for Specialized Coding Agents
Generating tests is one step toward a larger goal: keeping specifications, tests, and code aligned, with developers deciding what the software should do.
Source and teaching reviews passed · Human editorial review pending.
Small failures, large consequences
A QR-code payment fails to scan. Across a large volume of transactions, a small change in reliability can matter enormously. Itamar Friedman illustrates this with a hypothetical reduction in scan failures from 5% to 4%, suggesting that tens of millions of dollars a day could be involved. These are illustrative stakes, not measured savings.
[CodiumAI](https://www.codium.ai/) brings that concern with failures into the code editor. In the May 2023 conversation, Friedman describes an extension for VS Code and JetBrains that analyzes code, generates tests, helps debug them, and suggests improvements. Zero bugs is the ambition; reducing bugs is the immediate goal. User reports of finding problems offer encouragement, without establishing a detection rate.
Friedman traces the problem to roughly two decades managing research and development. In his experience, performance, security, and integration had substantial tooling, while verifying whether individual components implemented the intended logic remained a bottleneck. Earlier exposure to formal verification tools in hardware at Mellanox sharpened that frustration.
Work on large language model (LLM) developer tools at Alibaba suggested a way forward: problems become more tractable for these models when expressed through language. Code-logic testing connects several representations—natural-language requirements, technical specifications, implementation, and potentially visual descriptions. Friedman left Alibaba and partnered with Dedy Kredo, whom he identifies as his first employee, to pursue that connection.
Strengthen tests, then establish intent
Friedman argues that prompting an off-the-shelf LLM to analyze and test code is insufficient for verifying its logic. His proposed approach combines models with established code-analysis and testing techniques, using AI to help with choices that otherwise make those techniques expensive or inefficient.
Mutation testing makes the idea concrete: deliberately change an equation in application code, then check whether the tests detect the resulting fault. Catching all 100 faults across 100 mutations is his hypothetical example of a strong suite. The harder question is which changes to try. AI could select promising mutations instead of choosing randomly; useful recommendations need not be perfect. This is a proposed use of AI, with no measured selection accuracy supplied.
But correctness depends on intent. Improving performance is different from deciding whether software does what its developer meant. AI could compare code with a natural-language specification and ask for missing requirements, leaving the developer responsible for intended behavior and approving fixes. An interlocutor describes this as a shift from syntax toward semantics: models handle more of the expression, while humans establish the meaning.
Inside the test-generation loop
The demonstration starts with a call-center class in VS Code. Developers can launch CodiumAI from a sidebar, a button above a component, or a right-click action on selected code. Analysis examines the class and code it uses or calls, producing a natural-language description called the specification. In the demonstrated version, that description is read-only.
The test workflow follows a short sequence: 1. Generate six tests by default, then optionally generate more to explore additional behaviors and edge cases. 2. Refine individual tests conversationally—for example, increase the number of employees in the call-center scenario or request a more rigorous test. 3. Confirm execution, then inspect pass/fail results and error logs. 4. After a failure, request a solution with Reflect and Fix and rerun it.
Execution requires confirmation because tests use the environment configured in the editor, which could be production. Reflect and Fix invokes a longer reasoning process to propose a solution. The presenter reports a passing rerun in this simple demonstration, not a general repair success rate.
A separate suggestions interface covers performance, modularity, maintainability, vulnerabilities, best practices, and suspected bugs. Developers select suggestions to produce an applicable diff. Editable specifications were planned to extend the loop: describe new behavior, generate tests that initially fail, then change the implementation to satisfy them.
Give generated tests realistic inputs
The call-center class has deliberately simple inputs. Real components may receive tests that are too shallow unless developers supply representative input data, such as JSON or YAML. CodiumAI’s models and algorithms can use that data to generate more relevant tests. An existing test—or one written as a reference—can also guide the rest of the suite.
Generation hints also introduce testing practices. Given–when–then describes the setup, the action, and the resulting behavior, making it useful for both tests and bug reports. Code-dependent hints were planned to teach suitable techniques as developers worked. A playful option requests pirate-themed docstrings and a different joke per test; regenerating with those instructions replaces the existing suite with six new tests.
Mocking substitutes anticipated dependency behavior for a real operation—for example, replacing a web search or crawl during a test. CodiumAI is described as selectively inserting mocks when it can anticipate that behavior. The call-center example has no meaningful dependency to replace, so forcing mocks provides no useful benefit.
When a deposit subtracts money
The next demonstration exposes the intent problem directly. A bank-account class is deliberately changed so that a deposit subtracts money instead of adding it. CodiumAI analyzes the class and generates runnable tests. Even this obvious-looking bug needs an intended behavior to judge it against: an unusual specification could conceivably require subtraction. Dialogue with the developer is how the proposed system resolves that ambiguity.
The presenter reports that CodiumAI already suggests changing subtraction back to addition, then describes how failing tests and Reflect and Fix could identify the implementation as the problem. That execution-and-repair sequence is explained rather than run. The distinction matters: a failing test does not, by itself, tell you which artifact to fix. Its expectation also needs justification.
After the demonstration, CodiumAI reports weekly active users in the high thousands. Roughly seven weeks into early growth, weekly usage and downloads were reportedly doubling every two or three weeks, with no assurance that pace would continue. Weekly use was the immediate target; daily use was an aspiration as the product became more integrated into development.
The presenter places particular value on recommendations between colleagues. One unnamed company reportedly grew from one user to 48 in about two weeks. Adoption within a company was stronger than sharing between companies, and workplace recommendations were treated as a more direct signal of usefulness than public social sharing.
One button, a dozen model calls
Function names, docstrings, and variable names supply semantic hints. One suggested rename changes isClient to isPreferredClient because the variable controls a different commission. Accepting that clearer name is described as improving the information available to subsequent model operations. Generated analysis also serves as a reference, with planned developer edits intended to provide further guidance.
A request to help with the bank-account class reportedly triggers about a dozen model calls, with more behind actions such as Reflect and Fix. Models are selected by task: code understanding, natural-language explanation, instruction following, and output formatting can favor different models. The team benchmarks new releases, including [StarCoder](https://huggingface.co/blog/starcoder), and preassigns models to particular operations. A formatting requirement might demand JSON, code without explanation, or a specific docstring style.
The recommended model-development sequence starts with product needs: 1. Use the best available model and identify its limits. 2. Fine-tune a foundation model to address those limits. 3. Consider training a custom model after reaching further limits and defining the properties that need improvement. CodiumAI aimed to have its own models in 2024. Meanwhile, it prioritized interface design, engineering, and code analysis. Cheap advertised training costs were not sufficient reason to start training.
For evaluation, the proposal is progressively harder, property-based benchmark levels: check specific properties of an open-ended result rather than require one exact answer. An illustrative task asks [Auto-GPT](https://github.com/Significant-Gravitas/Auto-GPT) for the best seasonal cocktail in San Francisco. Stronger levels check whether it returns something, follows a requested structure, uses expected tools, and supplies relevant content. Some challenges would support fine-tuning while others remain outside training. The presenter offers this as an unproven approach, not a benchmark result.
The engineering around the model
Two editor integrations introduce familiar product-engineering demands. The team found VS Code development more flexible, using React for its interface; the JetBrains implementation was relatively native but offered portability across that IDE family. Supporting both was compared to maintaining Android and iOS clients: share a backend, define version compatibility, and keep behavior consistent for teammates using different editors.
A gap of roughly two or three weeks between VS Code’s 0.5.x and JetBrains’ approximately 0.4 release produced noticeably different user reactions. A three-star JetBrains review was welcomed as actionable feedback; for the young startup, silence was worse.
Persistence was another unfinished part of the product. Closing the Codium tab discarded its working state, although developers could open generated tests as a file and save them. Plans for persistent work, teammate sharing, and suggestions in pull requests made consistency across editors more consequential.
Extreme DRY: keep specifications, tests, and code aligned
The larger vision is code integrity: helping developers retain confidence as code generation accelerates. The presenter distinguishes an assistant, exemplified by Copilot, from an agent that accepts a goal and chains tasks to accomplish it. Generating a specification and tests from implementation is the demonstrated agent operation; conversationally revising a test is the assistant operation.
A planned technical-specification assistant would help teams enter the process from different directions: - Begin with a specification, then generate tests and code. - Begin with tests, then generate implementation. - Begin with implementation, then generate its specification and tests. The proposal accommodates both test-driven development—writing tests before implementation—and teams that start by coding.
Extreme DRY extends Don’t Repeat Yourself beyond duplicate code to the overlapping information in specifications, tests, and implementation. These artifacts are partially redundant: a specification as detailed as the implementation would effectively become the implementation. Natural language, visual descriptions, code, and tests would coexist, with AI reducing the work of keeping their meanings aligned.
When artifacts disagree, the proposed system asks the developer which is correct and which should change. Code-integrity agents were described as operating in the editor, with GitHub Actions integration planned. The product focused on backend development; Figma was not accepted as specification input, and possible support in 2024 remained prospective.
An interlocutor identifies the difficult ongoing case: implementation advances under time pressure while tests or specifications fall behind. When should an agent infer that the specification needs updating? That unresolved question leads to another—where developers should invest their effort. The response offers a tentative five-year outlook: developers direct agents, understand desired outcomes, and review generated work. Strong programming expertise would support more sophisticated software, alongside creators focused on translating product requirements into work through AI tools.
Specialized agents and unreliable chains
CodiumAI’s strategy is to earn trust with narrowly scoped agents that generate tests, run them, and help fix them, then expand their responsibilities. The product is explicitly imperfect, so its interface should communicate uncertainty and invite developer intervention. Auto-GPT is characterized as approaching from the opposite direction: demonstrate a broad agent framework, then improve its accuracy.
The presenter reports generating tests for Auto-GPT with CodiumAI and finding problems, alongside testing, advisory, and management contributions to its community. Joint workshops and hackathon participation were planned. An interviewer raises a separate governance problem: automated contributions could help projects with many users and few contributors, but also burden maintainers with noise. Whether agents should follow different contribution guidelines remains an open question.
At the time, the presenter doubts that Auto-GPT or [LangChain](https://github.com/hwchase17/langchain) could successfully carry out a broad instruction to improve an entire repository. Chaining imperfect outputs can erode reliability; useful agents need engineering that handles inaccuracies, suitable tools, and task-specific prompting. Whole-repository operation was still a proposed CodiumAI feature.
A specialized CodiumAI agent within Auto-GPT was under discussion, and a ChatGPT plugin was described as nearly finished. Neither was presented as a released integration. CodiumAI was not open source; opening it was under consideration, with a preference to make it work well first.
Trial, error, and the product breakthrough
The conversation widens to Israel’s startup ecosystem. The presenter emphasizes a dense community that spreads information and introductions, plus early exposure to advanced technology through military service. The account extends beyond security to water purification, agricultural technology, and AI21, described as an Israeli competitor to OpenAI without implying comparable size.
Icon’s nonprofit Silicon Valley 101 program connects visiting Israeli participants with industry talks and introductions. Appreciation for trial and error is offered as another possible advantage of the startup culture. One speaker recounts four companies: a teenage business, a startup that initially prospered before collapsing, another that exited to Alibaba, and the current company. Failure, in this account, can produce experience and renewed motivation.
The lightning round returns to the importance of product design. CodiumAI reportedly began before ChatGPT, when conversational code testing met skepticism from investors and engineering leaders, including resistance to giving AI access to code. The presenter found ChatGPT’s accessibility more surprising than any sudden jump in underlying capability: experience with GPT-3 and GPT-3.5 had already suggested strong conversational and instruction-following potential.
Asked about unresolved AI questions, the response identifies alignment as a major technical and philosophical problem. The discussion turns to interpretability—understanding what happens inside models—connecting earlier visualizations of neural-network features with OpenAI work attempting natural-language descriptions of parts of a language model. These are directions for exploration, not a claimed solution to alignment.
The closing assessment is that people were overestimating generative AI’s present capabilities while underestimating its future potential. The practical advice is to test concrete use cases before announcing what an agent can do. Two impressive examples can conceal poor performance on many others; for Auto-GPT enthusiasts, the suggested exercise is to find five distinct use cases they can actually make work, accepting that they may be unable to.
Builders are encouraged to anticipate what models might support in a year or two and discover the remaining challenges through repeated experimentation. CodiumAI’s thesis follows the same pattern: unmodified LLMs are insufficient for code-logic verification, but combining them with other technical elements offers a proposed path toward keeping specifications, tests, and implementation aligned.