arXiv Science⌕ Search

arXiv · 2609.32198

Agents as Software: A Programming Languages Agenda for Agent Reliability

Abstract

AI agents increasingly resemble software systems: they call tools, remember facts, follow policies, delegate work, and take actions with real consequences. % Yet the ``program'' of an agent is scattered across prompts, tools, memories, workflows, and execution traces, making its behavior difficult to inspect through ordinary testing and debugging alone. % This essay argues that a programming-systems perspective offers a natural lens for making agents reliable. % We recast agents as programmable artifacts whose behavior can be specified over traces and state, checked before deployment, monitored during execution, and improved from observed failures. % The goal is not to make probabilistic agents behave like deterministic programs, but to give them enough structure that their behavior can be reasoned about, controlled, and repaired.

Explore related subjects

Keep this discovery

Explore connections, maps & timelines

BibTeXRIS

Shraddha Barke, Adithya Murali. 2026-09-26. Agents as Software: A Programming Languages Agenda for Agent Reliability. https://arxiv.org/abs/2609.32198

Cite the original work for its findings. Save a collection to share your selection of sources.

KEEP EXPLORING

Related papers

Capture Now, Consume Later: Reachability Types with Flow-Sensitive Effects for Higher-Order Ownership Transfer

Higher-order impure programs routinely transfer or consume a resource through a closure: when one access path consumes the resource, it must be disabled through all remaining aliases---including those captured in closures---precisely at the point of consumption. We present a flow-sensitive type-and-effect system for reachability types that makes such ownership transfer sound in the presence of higher-order control flow. The key idea is simple: every computation can induce a use and/or a kill effect. The system statically tracks them, rejects any use of a killed resource. With reachability qualifiers and flow-sensitive effects, the system also derives on-demand uniqueness patterns compatible with higher-order impure functions. We illustrate the practicality of the system through numerous case studies such as a freezable counter, a destructive merge on unique linked lists, Rust-style swap on Box, recursive sum on unique linked lists, and use-once continuations. We formalize the system as the $\mathsf{F}_{\varepsilon <:}^{\diamondsuit}$ calculus, present its typing rules and operational semantics, and prove effect soundness, including multi-step preservation and preservation under parallel reduction. We mechanize all key results in Rocq.

cs.PL↗

First-Class Refinement Types for Scala

Refinement types -- types qualified with logical predicates -- have proven effective for lightweight verification in languages like Liquid Haskell, F*, and Dafny. However, in these systems refinements are either written in a separate specification language or treated as second-class annotations, disconnected from the host language's type system. This disconnect creates usability barriers: programmers must maintain two mental models, and refinements cannot interact with features like type inference, subtyping, or overloading. We present the design of first-class refinement types for Scala 3, where refinements are ordinary types that participate in subtyping, inference, and pattern matching alongside existing language features. We prove type soundness of a core calculus mechanized in Rocq, combining dependent function types, bounded polymorphism, positive equi-recursive types, union and intersection types, and refinement types under a partial-correctness semantics using a fuel-bounded definitional interpreter and semantic typing. Finally, we implement our design as a prototype extension of the Scala 3 compiler with a lightweight e-graph-based solver for predicate entailment.

cs.PL↗

Verification of Compiler-to-Accelerator Mappings for Machine Learning Accelerators

To meet the performance needs of modern machine learning (ML) applications, ML compiler frameworks support compiler-to-accelerator mappings that offload parts of application code to operations in specialized hardware accelerators. However, most of these frameworks do not verify these mappings down to the hardware level, potentially resulting in functional mismatches. In this paper we propose BOLT, the first framework for formally verifying the correctness of compiler-to-accelerator mappings for coarse-grained intrinsics in ML accelerators, with respect to a formal hardware semantics. BOLT does not require additional information from the compiler, and verifies the functional equivalence of the application code and the code for the mapped hardware accelerator intrinsic, including handling of complex loop nests and tensor data layouts in hardware. It effectively utilizes a pattern of *aligning* software loops with the hardware, followed by *relating* corresponding data layouts, to enable verification using well-aligned product programs. To support these steps, we propose two custom templates --- the sync-skeleton and the layout-sketch --- to guide users in aligning loops and specifying data layout relationships, respectively. We have developed a proof-of-concept prototype for BOLT and use it to successfully verify the correctness of several complex mappings for two recent open-source ML accelerators.

cs.PL↗