Agents Without Code: Skills, YAML, and Filesystems Replaced Python — Philipp Schmid, Google DeepMind

Read the talk

Replacing Agent Orchestration with Files and General Tools

Selected presentation frame from Agents Without Code: Skills, YAML, and Filesystems Replaced Python — Philipp Schmid, Google DeepMind at 614 seconds
Replacing Agent Orchestration with Files and General Tools

Philipp Schmid builds a GitHub pull request reviewer three ways, showing how frameworks and hosted sandboxes reduce custom code while leaving instructions, capabilities, and outcome verification with the developer.

From a talk by Philipp Schmid

At a glance

Ideas worth remembering

  • The three versions move responsibility outward: custom Python runs the first loop, a framework handles the second, and a hosted service runs the third. Execution machinery remains even when it disappears from application source.

  • General tools broaden what the model can attempt. The hosted reviewer uses the GitHub CLI for review and Google search for weather, while the framework reviewer remains limited by its explicitly defined tools.

  • Proxy-injected credentials separate authenticated access from exposing the raw token. Domain access is another control, but the talk does not establish exact blank-setting semantics or a guarantee about every authenticated action.

  • Skill files can extend an agent without new orchestration code when the required utilities are available. Developers still own domain rules, workflows, evaluations, and verification of the resulting behavior.

  • Treat increasing harness complexity as a reason to reassess the design as models improve. Files can express capabilities, recorded preferences, and deferred handoffs, but smaller source code alone is not proof of better outcomes.

An agent needs more than alternating chat turns

Selected presentation frame from Agents Without Code: Skills, YAML, and Filesystems Replaced Python — Philipp Schmid, Google DeepMind at 144 seconds
An agent needs more than alternating chat turns

Philipp Schmid opens with a practical definition: an LLM agent runs tools in a loop until it achieves a goal. His experiment keeps the goal constant—a GitHub pull request review—and changes the implementation three times. Each version removes code and relies more on files. The comparison asks how much of the machinery around the model developers actually need to write.

The common interface is the Interactions API, which Schmid introduces as a Gemini API for calling both models and agents. He describes support for server-side state, background execution, tool calls, and multimodal understanding and generation. Keeping these operations behind one interface allows the demonstrations to change who runs the agent without changing the basic way the application communicates with it.

The API represents a conversation as a timeline of steps rather than only alternating user and model turns. A chat can fit that alternating pattern, but an agent also produces reasoning, calls functions, and receives results from its environment. Schmid’s example sequence is user input, reasoning, function call, and function result. Giving each event its own type avoids presenting tool output as though a user had said it.

0:200:22
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

0:12 · section reference included

Version one: write and maintain the loop

Selected presentation frame from Agents Without Code: Skills, YAML, and Filesystems Replaced Python — Philipp Schmid, Google DeepMind at 263 seconds
Version one: write and maintain the loop

The first reviewer uses a Python loop. The application inspects the model’s output to distinguish a text response from a function call, matches the call to an implementation, executes it, and returns the result or error. Schmid shows a class with a run function using the Interactions API, alongside the parsing and error handling needed to keep that cycle going.

The reviewer’s purpose lives in a separate system-instruction file. Its capabilities require two additional pieces: JSON schemas describing the actions the model can request, and Python implementations that send requests to the GitHub API. The schema tells the model how to ask for an action; the implementation makes that action happen. Both must remain aligned with the application’s dispatch logic.

Through a simple input interface, Schmid greets the agent and asks it to review a pull request in the Gemini skills repository. He reports that the function-call sequence works. The limitation appears when the request falls outside the tools supplied: the agent says it cannot perform the task. The developer owns the loop, routing, schemas, Python execution, and state management, yet that machinery still exposes only the capabilities explicitly implemented.

2:322:34
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

2:29 · section reference included

Version two: a framework removes repetitive orchestration

Selected presentation frame from Agents Without Code: Skills, YAML, and Filesystems Replaced Python — Philipp Schmid, Google DeepMind at 351 seconds
Version two: a framework removes repetitive orchestration

The second implementation uses the ADK framework. Its agent class handles the tool loop, function calling, retries, and errors. The custom agent file disappears, while the system prompt and tool implementations remain. Handwritten JSON definitions also disappear because the framework generates schemas from the signatures of the Python functions. The schemas still exist at the model boundary; the developer no longer maintains them separately.

With a similar interface and prompt, the reviewer retrieves pull request data, the diff, and the code it needs. Schmid then asks for the weather in San Francisco. He describes the response as an inability to answer because no weather tool was defined. Removing orchestration code has simplified construction, but it has not broadened the set of operations available to the model.

Schmid separates what the framework solves from what the application still owns. Turn taking, routing, execution mapping, and schema creation move into the framework. Developers still write the Python tools, specify rules and requirements, and provide the environment that runs and hosts those tools. A framework reduces repeated plumbing without taking responsibility for the entire execution environment.

5:065:09
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

5:06 · section reference included

A hosted sandbox changes the execution boundary

Selected presentation frame from Agents Without Code: Skills, YAML, and Filesystems Replaced Python — Philipp Schmid, Google DeepMind at 502 seconds
A hosted sandbox changes the execution boundary

The next step is a remote agent available through the Gemini API. Schmid distinguishes sharing an agent harness from sharing an identical agent: an IDE’s coding agent and an API’s general-purpose agent can use the same underlying machinery while having different system instructions and tools. In particular, he says the API agent can use an existing Google search tool.

An environment parameter gives the agent access to a hosted, isolated cloud sandbox where it can run tools and bash commands and save files. The environment can receive source material from a GitHub repository, a GCS bucket, or inline files. This makes executable utilities and filesystem content part of the agent’s working environment rather than requiring every capability to arrive as a custom function.

Schmid describes a network proxy around the sandbox that injects credentials into outbound requests. The agent knows it can call the GitHub API, but the token is supplied as the request leaves the sandbox, so it does not need to see the credential itself. This separates access to an authenticated service from possession of the raw token. The described mechanism does not establish that every action performed through that service is harmless.

Network destinations are configurable, with a tradeoff between restricting access and making exploration easy. Schmid describes broad access as the default, but his explanation of blank domain settings is ambiguous, so it does not establish an exact configuration recipe. He also introduces an Agents API for reusing a configuration: a custom ID names an agent with its system instruction, base agent, and base environment, allowing callers to invoke that configuration through the same interface.

7:387:42
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

7:38 · section reference included

Version three: instructions, a CLI, and a filesystem

Selected presentation frame from Agents Without Code: Skills, YAML, and Filesystems Replaced Python — Philipp Schmid, Google DeepMind at 691 seconds
Version three: instructions, a CLI, and a filesystem

In the third reviewer, the source directory is gone. An AGENTS.md file supplies a similar system instruction, now telling the agent it has access to the GitHub CLI, bash, and a filesystem. Instead of defining separate functions for accessing a pull request or reading its files, the application lets the model choose how to use those general capabilities. A small bash script checks whether the GitHub CLI is installed and downloads and installs it on the first turn if necessary.

Schmid uses streaming so the audience can receive intermediate events instead of waiting without feedback. He describes the agent exploring the sandbox, discovering that the CLI is missing, installing it, and then using it for the review. Function calls still occur, but they invoke the available general tools rather than the application’s predefined GitHub functions. The model draws on its existing knowledge of the CLI to decide which operations to perform.

The San Francisco weather question now produces a different behavior: the agent uses Google search and returns around 20° Celsius. Schmid identifies July 2 as the day of the demonstration, without establishing a year. The example shows that the hosted agent can select a capability outside pull request review. It does not show that tools are unnecessary: search is available, and the model chooses it without the reviewer’s author writing a weather-specific function. The reported result illustrates flexibility rather than a measured guarantee of answer accuracy.

10:0110:06
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

10:01 · section reference included

What the server runs and what the developer owns

Selected presentation frame from Agents Without Code: Skills, YAML, and Filesystems Replaced Python — Philipp Schmid, Google DeepMind at 760 seconds
What the server runs and what the developer owns

The client supplies the installation script and AGENTS.md as sources, along with credential configuration for the GitHub API and github.com. Schmid explains that both destinations are needed for API requests and git operations. His demonstration also permits access to the rest of the web without supplying credentials for those other destinations. Network reachability and credential availability are therefore separate parts of the configuration.

A call carries the user input, environment, and previous interaction ID to continue the conversation. On the backend, the service starts the sandbox, loads AGENTS.md and skill files from the environment, and provides them to the model. The model and service then perform the repeated calls and result exchanges. A single client call can initiate many internal steps; the loop has moved behind the API rather than disappeared.

Schmid says hosted execution also manages tool routing, conversation and session state, and context compaction. Callers provide new inputs while the agent compacts context when needed and continues working in a remote Linux sandbox. This removes those tasks from application code. He does not explain the compaction policy or what information it preserves, so automatic context management should not be read as a promise that every earlier detail remains available.

The developer still defines instructions, rules, and behavior in AGENTS.md, provides capabilities or context through skill files, and owns evaluations. Schmid’s argument is that repeatedly implementing infrastructure consumes effort that could go toward the product. Files express the application’s particular requirements, while the hosted harness supplies the common execution machinery.

12:2812:32
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

12:28 · section reference included

Extend capabilities without expanding the harness

Selected presentation frame from Agents Without Code: Skills, YAML, and Filesystems Replaced Python — Philipp Schmid, Google DeepMind at 964 seconds
Extend capabilities without expanding the harness

Security scanning provides Schmid’s extension example. In the earlier approach, adding a scan means choosing a CLI utility, writing a Python function around it, defining a function schema, and registering the tool. With the file-based agent, a skill file can explain which utility to use, and the environment can supply that utility. The existing general tools then let the model perform the work without changing the application’s orchestration code. The scanner and its execution requirements still have to be available.

Schmid cites Cursor’s presentation at AI Engineer Europe as an example: roughly 12,000 lines of TypeScript orchestration for git worktrees were replaced with about 200 lines of agent files, using a skill and Markdown. He also reports other teams refactoring a harness five times in six months, rearchitecting a research agent three times in a year, and removing 80% of tools while achieving fewer steps, faster responses, and better accuracy. These are examples he reports, rather than controlled comparisons demonstrated here.

His heuristic follows from that pattern: as models become more capable, some orchestration can be removed. If the harness instead becomes more complex with each model improvement, it may be overengineered. This is a prompt to reconsider how much execution behavior the application hard-codes, not evidence that every reduction in code improves an agent.

14:3714:39
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

14:37 · section reference included

Use files for memory and handoffs, then verify outcomes

Files can carry more than initial instructions. Schmid describes asking an agent to record rules or preferences so it can reuse them in a later session. This form of memory works by writing information to a file and making that file available again; it does not require the preference to remain only in the conversation. His description does not establish how the hosted environment retains those files between sessions.

He also proposes externalizing context during a long-running session. If another feature needs attention, the agent can write the relevant information and a handoff into a file, then pick it up later. The file gives deferred work an explicit representation outside the immediate exchange, allowing the session to continue without relying solely on conversational recall.

Schmid closes by recommending less micromanagement of execution paths: provide general tools and let the model explore, reason, and choose a solution. Developer effort should concentrate on domain instructions, workflows, evaluations, clean tools, and verifying outcomes. That final responsibility matters because granting the model more freedom changes how it reaches a result; it does not by itself establish that the result meets the application’s requirements.

His instruction to build with deletion in mind means allowing better models to replace behavior previously encoded in the harness. He ends by inviting attendees to try the hosted harness through a studio interface or an API key and to start building files and skills. At the time of the talk, he says an API free tier is being worked on, rather than presenting it as already available.

16:3016:33
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

16:30 · section reference included

Read the complete timestamped transcript
  1. 0:12

    Hi everyone. Uh thank you for coming. I

  2. 0:14

    know it's the fourth day, last session

  3. 0:16

    before the keynote starts again and we

  4. 0:18

    are going to do something fun. Uh we're

  5. 0:20

    going to look into how files are

  6. 0:22

    basically replacing Python. And before

  7. 0:25

    we begin, I would like to start with my

  8. 0:26

    favorite definition of what is an agent

  9. 0:29

    from Simon. An LLM agent runs tools uh

  10. 0:32

    in a loop until it achieves a goal. And

  11. 0:34

    what we are going to do is we are going

  12. 0:36

    to build uh the same agent, the same

  13. 0:38

    GitHub PR review agent in three

  14. 0:40

    different ways. And we are going to

  15. 0:42

    delete code on the way. Each new

  16. 0:44

    version, less code, more files

  17. 0:46

    basically. Um before we begin, I would

  18. 0:49

    like to quickly introduce you to the

  19. 0:51

    interactions API, which is our new

  20. 0:53

    Gemini API. It's a unified interface for

  21. 0:56

    um running models and agents. So you can

  22. 0:58

    use the interactions API to call the

  23. 1:00

    Gemini models directly or to call our

  24. 1:03

    new agents, which also comes with

  25. 1:05

    sandbox. It supports serverside state

  26. 1:07

    management, background execution. So

  27. 1:09

    it's perfectly suited for all that's

  28. 1:11

    coming in the next years. and um the

  29. 1:15

    capabilities it's the same API for tool

  30. 1:18

    call multimodality understanding

  31. 1:20

    multimodality generation so you always

  32. 1:22

    have the same interface might look very

  33. 1:25

    familiar if you're using other LLM

  34. 1:27

    applications we really try to build

  35. 1:29

    something for developers which you like

  36. 1:30

    to use uh to build and that's something

  37. 1:32

    we are going to do so something little

  38. 1:36

    bit different in the interactions API to

  39. 1:38

    other LLM applications or APIs is that

  40. 1:41

    we moved away from this term based based

  41. 1:44

    uh conversation history to steps. So

  42. 1:46

    until I would say a few months ago, most

  43. 1:49

    of the applications were really

  44. 1:50

    turnbased. Normally you had a user in

  45. 1:52

    input and then a model output, a user

  46. 1:54

    input, a model output, which definitely

  47. 1:56

    works for normal chat application. But

  48. 1:58

    as soon as you start to build agents,

  49. 2:00

    use reasoning model. We have more than

  50. 2:02

    just a user role and a model role,

  51. 2:04

    right? So we have like different inputs,

  52. 2:06

    we have different types, we have

  53. 2:08

    reasoning. So we decided to like make a

  54. 2:11

    cut, make a change and build something

  55. 2:13

    really for agents and that's what you

  56. 2:15

    see on the flat steps timeline on the

  57. 2:16

    right where you have a user input then

  58. 2:18

    you have reasoning you have a function

  59. 2:20

    call you have a function result and you

  60. 2:22

    no longer need to like abuse the user

  61. 2:24

    role for passing back data from an

  62. 2:27

    environment. So

  63. 2:29

    roughly a year one and a half years ago

  64. 2:32

    writing agents mostly meant writing a

  65. 2:34

    loop in Python. You needed to define a

  66. 2:36

    JSON schema. You needed to define Python

  67. 2:39

    functions. You needed to look at the

  68. 2:41

    output from the LLM. Need to check if it

  69. 2:43

    was a function call or if it was a text

  70. 2:45

    response. And then needed to match it

  71. 2:47

    against um the type and then like call

  72. 2:49

    the tool

  73. 2:51

    look of if you get an error and then

  74. 2:53

    like go back and forth and let's look at

  75. 2:56

    some some code example on how this would

  76. 2:58

    look and also run it and hope that uh

  77. 3:01

    the demo gods are great to us. So I

  78. 3:04

    built or I let Gemini build a basic

  79. 3:06

    implementation of this Python loop. So

  80. 3:09

    we have our uh class. We have a run

  81. 3:12

    function which uses the interactions

  82. 3:14

    API. We have all of the weird complex

  83. 3:17

    passing with function calling with uh

  84. 3:19

    appending the errors checking if we get

  85. 3:21

    an error and then we have uh the result

  86. 3:23

    again. And what we need of course for an

  87. 3:25

    agent is we also need a system

  88. 3:27

    instruction. So there's a separate file

  89. 3:29

    for the system instruction. Very basic.

  90. 3:31

    QR GitHub PR reviewer and then of course

  91. 3:34

    we need tools and for tools we needed to

  92. 3:36

    write those um JSON schemas

  93. 3:39

    specifications of description exactly

  94. 3:42

    define which uh actions the agent can

  95. 3:44

    take and then of course we need the

  96. 3:46

    implementation in this case using the

  97. 3:48

    the basic uh GitHub API just sending

  98. 3:51

    some some requests. So we can run this

  99. 3:55

    um in

  100. 3:58

    and basically the main main

  101. 3:59

    implementation is a very simple uh input

  102. 4:02

    interface and we can say something like

  103. 4:04

    hello

  104. 4:06

    and

  105. 4:08

    yes we get back hey I'm an agent and

  106. 4:10

    then we yes ask it to review a pull

  107. 4:13

    request on the Gemini skills repository

  108. 4:15

    and what we should see is like the agent

  109. 4:18

    should hopefully start soon sending

  110. 4:20

    function calls function results function

  111. 4:22

    calls function results but it's very

  112. 4:24

    limited to yes uh great it works very

  113. 4:28

    limited to the tools we define so if we

  114. 4:30

    ask the agent to do something which it

  115. 4:32

    does not have the capabilities to it

  116. 4:34

    just says hey I cannot do this um which

  117. 4:37

    is unfortunate but that's how we were

  118. 4:39

    building agents um raw Python code a lot

  119. 4:42

    of files a lot of things which can go

  120. 4:44

    wrong a lot of code to manage so what

  121. 4:47

    happened afterwards

  122. 4:49

    um or what we we need to do we have like

  123. 4:51

    a token generation We have the native

  124. 4:53

    function calling and we must execute the

  125. 4:56

    loop. We must handle the tool routing.

  126. 4:57

    We must create a JSON schemas. We must

  127. 5:00

    write the Python code. We need to

  128. 5:02

    execute the Python code. We need to

  129. 5:03

    manage the state. So there's a lot of

  130. 5:04

    things we need to do to get an agent

  131. 5:06

    running. And then we got agent

  132. 5:09

    frameworks. There were many different

  133. 5:10

    agent frameworks which abstracted away

  134. 5:12

    some of that complexity. One example

  135. 5:15

    here is the ADK framework um where you

  136. 5:17

    have an agent class now which handles

  137. 5:19

    all of the tool loops, the function

  138. 5:21

    calling, the retries, the error handling

  139. 5:24

    and it made it a little bit easier. We

  140. 5:27

    basically removed all of the boiler

  141. 5:29

    plate code which we always needed to

  142. 5:31

    write for agents put it into a framework

  143. 5:34

    and help people build with it. So back

  144. 5:37

    to the demo and

  145. 5:40

    um same example. So we go into the CR2

  146. 5:43

    and what is very interesting if you let

  147. 5:46

    me open both. So we still have our we

  148. 5:50

    don't have our agent file anymore. So

  149. 5:51

    the agent went away. We still have our

  150. 5:54

    prompt same system prompt. We still have

  151. 5:57

    our tools in this case also no JSON

  152. 5:59

    definitions anymore because those agent

  153. 6:01

    frameworks now use the uh signature of

  154. 6:05

    our functions to create those JSON

  155. 6:07

    schemas on the fly to provide the model.

  156. 6:10

    So let's stop our um agent. Now let's

  157. 6:14

    run our second agent.

  158. 6:17

    Similar interface,

  159. 6:19

    similar prompt and we should see a

  160. 6:22

    similar expected behavior where we have

  161. 6:24

    function calls. We try to get the PR

  162. 6:26

    data. We try to get the diff, we try to

  163. 6:29

    get all of the code we need and it works

  164. 6:33

    and we wait for for the agent to yes

  165. 6:36

    continue. But similar difficulty here.

  166. 6:38

    If I ask it like what's the weather in

  167. 6:42

    San Francisco

  168. 6:44

    um

  169. 6:46

    we should get back hopefully a result

  170. 6:48

    like hey I cannot do this I don't have

  171. 6:50

    access to the weather API which

  172. 6:51

    obviously makes sense because we did not

  173. 6:53

    define any tool still very unfortunate

  174. 6:55

    because we need to be very explicit on

  175. 6:57

    what our agent can do and we all know

  176. 6:59

    nowadays that we just want to prompt

  177. 7:01

    something and we wanted the agent to do

  178. 7:03

    whatever it takes to to achieve that

  179. 7:05

    goal. So what is left for us to do? What

  180. 7:08

    does the framework solve? The framework

  181. 7:10

    solves the turn taking loops, the

  182. 7:12

    routing, the execution mapping, the JSON

  183. 7:14

    schema creation for like the different

  184. 7:16

    function calls, but we still own the

  185. 7:18

    Python plumping. So we still need to

  186. 7:20

    write those tools with Python code. We

  187. 7:23

    still need to add specific rules or

  188. 7:26

    requirements to like make sure whatever

  189. 7:28

    we want the agent to do and we need to

  190. 7:30

    provide the environment where all of the

  191. 7:32

    tools are running, where we want to host

  192. 7:34

    it. So what comes afterwards? Afterwards

  193. 7:38

    hopefully comes remote agents and at

  194. 7:40

    Google IO we launched the anti-gravity

  195. 7:42

    remote agent on the Gemini API. The

  196. 7:45

    anti-gravity agent uh is powered by the

  197. 7:48

    same agent harness which powers the

  198. 7:50

    anti-gravity IDE. Here the same harness

  199. 7:52

    very important does not mean the same

  200. 7:54

    agent because the anti-gravity agent is

  201. 7:56

    a coding agent at the moment and the uh

  202. 7:58

    agent available in the Gemini API is a

  203. 8:00

    general purpose agent. So there might be

  204. 8:02

    different system instruction, there

  205. 8:04

    might be slightly different tools

  206. 8:05

    because the Gemini API already has a

  207. 8:07

    Google search tool. So we use that what

  208. 8:08

    we have built and but very importantly

  209. 8:11

    it comes with this new environment

  210. 8:13

    parameter and this environment parameter

  211. 8:15

    here allows the agent to get access to a

  212. 8:18

    hosted isolated cloud sandbox where it

  213. 8:21

    can run tools, where it can run bash

  214. 8:22

    commands and where it can save files.

  215. 8:25

    And those environments can be um

  216. 8:28

    configured. So you can provide sources

  217. 8:30

    and sources can be a GitHub repository,

  218. 8:32

    it can be a GCS bucket, it can be inline

  219. 8:35

    files and of course very important we

  220. 8:37

    want to make sure that those agents are

  221. 8:39

    secured and cannot use our credentials

  222. 8:42

    in any way possible. So we created a

  223. 8:44

    network proxy around the um agent

  224. 8:46

    sandbox which basically injects the

  225. 8:49

    credentials when the agent makes a

  226. 8:51

    request from inside the sandbox to

  227. 8:53

    outside the sandbox. So the agent never

  228. 8:55

    really sees your credential. It just

  229. 8:56

    knows hey I can call the GitHub API and

  230. 8:59

    then on the fly we make sure that it

  231. 9:01

    received the correct token which you

  232. 9:03

    define and you can also limit which

  233. 9:05

    domains the agent has access to. So if

  234. 9:06

    you want to restrict the agent

  235. 9:08

    completely on which network access it

  236. 9:10

    can or which website it can access you

  237. 9:12

    just leave it blank. By default the

  238. 9:14

    agent can access all because I mean it's

  239. 9:16

    a hassle if you first need to define

  240. 9:18

    where to go. So we tried to stay simple

  241. 9:20

    and of course making an API call is nice

  242. 9:23

    but we thought hey people want to reuse

  243. 9:25

    their configuration want to reuse their

  244. 9:28

    agents. So we added the agents API where

  245. 9:30

    you can define your own custom ID you

  246. 9:32

    the same system instruction the same

  247. 9:33

    base agent the same base environment and

  248. 9:36

    then you can create that agent and then

  249. 9:38

    you can use that agent in the same exact

  250. 9:40

    way as you use Gemini models or as you

  251. 9:42

    use the anti-gravity agent by providing

  252. 9:44

    the ID. So all of the existing code can

  253. 9:46

    be reused with your own custom agent,

  254. 9:48

    with your own custom tools, with your

  255. 9:49

    own custom uh credentials, environments,

  256. 9:52

    whatever you need for it to to run. So

  257. 9:55

    let's look at how this will look for SS

  258. 9:58

    code and as a demo. And

  259. 10:01

    okay, now 03. And what might be very

  260. 10:06

    obvious is that we no longer have a

  261. 10:07

    source directory. So the code went away.

  262. 10:11

    We have now an agents M uh folder with

  263. 10:14

    an agents MD file with system

  264. 10:16

    instructions. So very similar system

  265. 10:19

    instruction. The only difference here is

  266. 10:20

    that we tell the agent, hey, you have

  267. 10:22

    access to the GitHub CLI. So we no

  268. 10:26

    longer create specific tools for reading

  269. 10:29

    files from a GitHub pull request, for

  270. 10:31

    accessing a GitHub pull request. We just

  271. 10:33

    tell the agent, hey, you have a GitHub

  272. 10:34

    CLI, you have a bash tool, you have file

  273. 10:37

    systems. try to use it whenever you

  274. 10:39

    think it's important. And since we don't

  275. 10:42

    have the CLI installed, we have a very

  276. 10:44

    basic bash script in this case which

  277. 10:45

    checks, hey, if the GitHub CLI is

  278. 10:47

    installed, please use it. If not,

  279. 10:49

    download it and install it on the first

  280. 10:50

    turn. So, we go into our terminal and we

  281. 10:54

    run our agent here. In this case, maybe

  282. 10:57

    important I use a stream version because

  283. 10:59

    otherwise we would wait like a few

  284. 11:01

    seconds and we not get back any we would

  285. 11:03

    not get back any anything back. So same

  286. 11:06

    prompt

  287. 11:07

    and we should soon see um our function

  288. 11:11

    calls and function results coming in.

  289. 11:13

    Yes. So in this case since we run inside

  290. 11:15

    a sandbox the agent first like explores

  291. 11:17

    the sandbox to really make sure hey do

  292. 11:19

    we have this GitHub CLI installed and

  293. 11:22

    then tries to run it. It did not find it

  294. 11:24

    on the first turn. So it installs it and

  295. 11:26

    then we can see the agent doing its

  296. 11:28

    work. And in this case it's not using

  297. 11:30

    the predefined function calls. It's

  298. 11:31

    using the GitHub CLI and it's already

  299. 11:34

    existing knowledge about how it works. I

  300. 11:36

    have a bash tool. I have like access to

  301. 11:38

    the file system and I do all of that

  302. 11:40

    work to see or to like review the the

  303. 11:43

    pull request. Let's wait a little bit.

  304. 11:47

    Okay. And I think the the amazing part

  305. 11:50

    here is like if we ask the same question

  306. 11:52

    as before, what's the weather in San

  307. 11:57

    Francisco?

  308. 11:59

    We should hopefully see that the agent

  309. 12:02

    tries to use ah it uses Google search in

  310. 12:04

    this case on 2nd of July. Let me quickly

  311. 12:07

    check. Yeah, that's today. And we have

  312. 12:09

    around 20° Celsius and it works. So the

  313. 12:13

    agent became more of a general purpose

  314. 12:15

    agent and we don't need to like specify

  315. 12:17

    all of the tools. We basically trust the

  316. 12:19

    model on understanding hey I have a

  317. 12:21

    specific set of very atomic general

  318. 12:23

    purpose tools to solve my task or the

  319. 12:26

    task for the user. And if we look at the

  320. 12:28

    the code uh for like the the input or

  321. 12:32

    like the the sorry the the interface we

  322. 12:35

    have our sources here. So we have the

  323. 12:38

    the bash script which install the GitHub

  324. 12:40

    CLI. We have the agents MD file and then

  325. 12:42

    we say hey you can use the GitHub API

  326. 12:45

    with credentials. So I want to access or

  327. 12:48

    use GitHub credentials in a secure way.

  328. 12:50

    So I created a token for the API and

  329. 12:53

    also for github.com since you need both

  330. 12:55

    URLs. one uses is used for the git uh

  331. 12:57

    commands. The other one is used for HTT

  332. 12:59

    commands and then domain all is

  333. 13:00

    basically hey in addition to the GitHub

  334. 13:02

    URLs you can use all of the web but you

  335. 13:05

    don't have credentials for it and then

  336. 13:07

    it's a it's a simple single API call to

  337. 13:10

    the anti-gravity agent with your or user

  338. 13:12

    input with the environment and then also

  339. 13:14

    with the previous interaction ID that we

  340. 13:16

    keep the multi-turn going and that

  341. 13:18

    that's all it takes and it's a single

  342. 13:20

    API call on the backend side we start

  343. 13:22

    that cloud sandbox we load the agents MD

  344. 13:25

    file and the skills from the environment

  345. 13:27

    provided to the model and then the model

  346. 13:30

    between the API and the sandbox does all

  347. 13:32

    of the the looping calling the function

  348. 13:34

    returning the function results calling

  349. 13:36

    the function returning the function

  350. 13:37

    results and that is all it takes. So

  351. 13:40

    where does it leave us? We no longer

  352. 13:43

    need to execute loops. We no longer need

  353. 13:46

    to do two routing. We have a serverside

  354. 13:48

    conversation and session state. So we

  355. 13:50

    only need to provide new inputs. The

  356. 13:52

    context window and the compaction is

  357. 13:54

    also automatically managed by the agent.

  358. 13:56

    So if we continue our conversation at a

  359. 13:58

    certain point the context is compacted

  360. 14:00

    and we can continue without the need to

  361. 14:02

    manage anything and we also get an

  362. 14:04

    isolated remote Linux sandbox which we

  363. 14:06

    can use to run our code. So what is

  364. 14:09

    still left for us? We need to define

  365. 14:11

    instructions. We need to define rules

  366. 14:14

    behaviors in an agent MD file. We need

  367. 14:16

    to provide capabilities or context and

  368. 14:18

    skills MD and we need to own the evils.

  369. 14:20

    So all of the heavy lifting, the

  370. 14:23

    infrastructure management, all of the

  371. 14:24

    same code which probably every one of us

  372. 14:26

    has written of us here like 20 times is

  373. 14:29

    no longer needed. And you can start

  374. 14:30

    really building your product instead of

  375. 14:32

    like needing to rewrite the same code

  376. 14:34

    over and over again. And very important

  377. 14:37

    is like, hey, that's great, but what

  378. 14:39

    about extending? And I think looking

  379. 14:41

    into how extending previous agents to

  380. 14:44

    like those new agents work. It's very

  381. 14:47

    obvious that previously if we want to do

  382. 14:50

    like some kind of security scanning on a

  383. 14:52

    pull request, we would need to define or

  384. 14:53

    write a Python function. We would need

  385. 14:55

    to understand okay which CLI tools do we

  386. 14:57

    need to use? We need to define a new

  387. 14:59

    function schema and then we needed to

  388. 15:01

    add it to our tools need to run it and

  389. 15:03

    then so there's a lot of things we need

  390. 15:05

    to do on on agents powered by files. We

  391. 15:08

    write a skills MD file maybe with some

  392. 15:10

    additional information on which CLI tool

  393. 15:11

    to use or maybe provide the CLI tool

  394. 15:13

    inside the environment and then we

  395. 15:15

    extended the capabilities. we don't need

  396. 15:16

    to change our code. We just provide more

  397. 15:18

    files to the agent and the agent decides

  398. 15:20

    on what we want to do. And I like to

  399. 15:23

    bring up some very good examples. So at

  400. 15:25

    a engineer in Europe, Cursor did a great

  401. 15:27

    talk on how they replaced uh roughly

  402. 15:30

    12,000 lines of TypeScript code with a

  403. 15:32

    200 lines agent files to create

  404. 15:35

    something similar. So they had a very

  405. 15:37

    hard-coded code um orchestration for

  406. 15:40

    doing git work trees and they were m

  407. 15:42

    able to replace it with just a skill and

  408. 15:44

    markdown files and there are more I

  409. 15:47

    would say bitter lessons of ancient

  410. 15:48

    engineering manos has refactored their

  411. 15:51

    harness five times in six months last

  412. 15:53

    year langen has rearchitected their open

  413. 15:56

    deep research three times a year and

  414. 15:57

    then also worsel has removed 80% of

  415. 16:00

    their tools to achieve fewer steps

  416. 16:02

    faster responses and better accuracy so

  417. 16:04

    there's an obvious trend that with

  418. 16:07

    better model capabilities, we can remove

  419. 16:09

    orchestration code. But if your harness

  420. 16:12

    is getting more complex as the model

  421. 16:14

    improves, you are most likely

  422. 16:16

    overengineering your harness. So if you

  423. 16:18

    struggle with model improvements and

  424. 16:20

    adding new capabilities which lead to

  425. 16:22

    more complexity and more code, you might

  426. 16:24

    need to rethink a little bit on how your

  427. 16:26

    agent harness looks. And so where does

  428. 16:30

    it end up? Agents are just files. We

  429. 16:33

    write markdown files to extend

  430. 16:34

    capabilities. Agents can learn from

  431. 16:37

    those um can create their own files. So

  432. 16:40

    if you have a session and tell the agent

  433. 16:42

    to remember something to take notes of

  434. 16:44

    rules of preferences, the agent just

  435. 16:46

    writes it to this and then can reuse it

  436. 16:48

    in the later session and you can also

  437. 16:51

    externalize context. So if you have a

  438. 16:52

    very long running session and during

  439. 16:54

    that session you notice hey maybe I want

  440. 16:56

    to additionally work on another feature

  441. 16:58

    you can like just write that information

  442. 17:00

    that hand off to a file and like tell

  443. 17:02

    the agent to later pick it up. Uh so

  444. 17:05

    what are the takeaways? We should not

  445. 17:07

    fight the model like we should stop

  446. 17:09

    micromanaging the execution paths

  447. 17:11

    provide general tools to the agent and

  448. 17:12

    let the model explore reason and

  449. 17:14

    discover the right solution. Own what is

  450. 17:17

    yours meaning focus on your domain

  451. 17:19

    instructions. Focus on the workflows.

  452. 17:21

    Focus especially on the evals, define

  453. 17:24

    clean tools and verify the outcomes and

  454. 17:26

    really build to delete. Like we have

  455. 17:28

    seen in the past many many times, the

  456. 17:30

    better the model get, the more code we

  457. 17:32

    can remove and the more things we need

  458. 17:33

    to change and obviously we all want to

  459. 17:35

    benefit from better models. So what the

  460. 17:39

    things for you to get to do on Monday,

  461. 17:41

    you can scan that QR code which brings

  462. 17:43

    you directly to EI studio where you can

  463. 17:45

    immediately try out the anti-gravity

  464. 17:47

    harness. So you can already start

  465. 17:49

    prompting it. it will start your own

  466. 17:51

    custom sandbox. If not, um, start or

  467. 17:54

    create your API key. We are currently

  468. 17:56

    working on a free tier for the API. So

  469. 17:59

    hopefully you can start exploring faster

  470. 18:01

    soon and then definitely start building

  471. 18:03

    files and skills. And that's it. Thank

  472. 18:06

    you for for coming.

  473. 18:09

    [applause]

  474. 18:24

    >> [music]