Agents Without Code: Skills, YAML, and Filesystems Replaced Python — Philipp Schmid, Google DeepMind
Read the talk
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
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.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
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.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
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.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
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.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
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.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
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.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
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.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
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.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Read the complete timestamped transcript
- 0:12
Hi everyone. Uh thank you for coming. I
- 0:14
know it's the fourth day, last session
- 0:16
before the keynote starts again and we
- 0:18
are going to do something fun. Uh we're
- 0:20
going to look into how files are
- 0:22
basically replacing Python. And before
- 0:25
we begin, I would like to start with my
- 0:26
favorite definition of what is an agent
- 0:29
from Simon. An LLM agent runs tools uh
- 0:32
in a loop until it achieves a goal. And
- 0:34
what we are going to do is we are going
- 0:36
to build uh the same agent, the same
- 0:38
GitHub PR review agent in three
- 0:40
different ways. And we are going to
- 0:42
delete code on the way. Each new
- 0:44
version, less code, more files
- 0:46
basically. Um before we begin, I would
- 0:49
like to quickly introduce you to the
- 0:51
interactions API, which is our new
- 0:53
Gemini API. It's a unified interface for
- 0:56
um running models and agents. So you can
- 0:58
use the interactions API to call the
- 1:00
Gemini models directly or to call our
- 1:03
new agents, which also comes with
- 1:05
sandbox. It supports serverside state
- 1:07
management, background execution. So
- 1:09
it's perfectly suited for all that's
- 1:11
coming in the next years. and um the
- 1:15
capabilities it's the same API for tool
- 1:18
call multimodality understanding
- 1:20
multimodality generation so you always
- 1:22
have the same interface might look very
- 1:25
familiar if you're using other LLM
- 1:27
applications we really try to build
- 1:29
something for developers which you like
- 1:30
to use uh to build and that's something
- 1:32
we are going to do so something little
- 1:36
bit different in the interactions API to
- 1:38
other LLM applications or APIs is that
- 1:41
we moved away from this term based based
- 1:44
uh conversation history to steps. So
- 1:46
until I would say a few months ago, most
- 1:49
of the applications were really
- 1:50
turnbased. Normally you had a user in
- 1:52
input and then a model output, a user
- 1:54
input, a model output, which definitely
- 1:56
works for normal chat application. But
- 1:58
as soon as you start to build agents,
- 2:00
use reasoning model. We have more than
- 2:02
just a user role and a model role,
- 2:04
right? So we have like different inputs,
- 2:06
we have different types, we have
- 2:08
reasoning. So we decided to like make a
- 2:11
cut, make a change and build something
- 2:13
really for agents and that's what you
- 2:15
see on the flat steps timeline on the
- 2:16
right where you have a user input then
- 2:18
you have reasoning you have a function
- 2:20
call you have a function result and you
- 2:22
no longer need to like abuse the user
- 2:24
role for passing back data from an
- 2:27
environment. So
- 2:29
roughly a year one and a half years ago
- 2:32
writing agents mostly meant writing a
- 2:34
loop in Python. You needed to define a
- 2:36
JSON schema. You needed to define Python
- 2:39
functions. You needed to look at the
- 2:41
output from the LLM. Need to check if it
- 2:43
was a function call or if it was a text
- 2:45
response. And then needed to match it
- 2:47
against um the type and then like call
- 2:49
the tool
- 2:51
look of if you get an error and then
- 2:53
like go back and forth and let's look at
- 2:56
some some code example on how this would
- 2:58
look and also run it and hope that uh
- 3:01
the demo gods are great to us. So I
- 3:04
built or I let Gemini build a basic
- 3:06
implementation of this Python loop. So
- 3:09
we have our uh class. We have a run
- 3:12
function which uses the interactions
- 3:14
API. We have all of the weird complex
- 3:17
passing with function calling with uh
- 3:19
appending the errors checking if we get
- 3:21
an error and then we have uh the result
- 3:23
again. And what we need of course for an
- 3:25
agent is we also need a system
- 3:27
instruction. So there's a separate file
- 3:29
for the system instruction. Very basic.
- 3:31
QR GitHub PR reviewer and then of course
- 3:34
we need tools and for tools we needed to
- 3:36
write those um JSON schemas
- 3:39
specifications of description exactly
- 3:42
define which uh actions the agent can
- 3:44
take and then of course we need the
- 3:46
implementation in this case using the
- 3:48
the basic uh GitHub API just sending
- 3:51
some some requests. So we can run this
- 3:55
um in
- 3:58
and basically the main main
- 3:59
implementation is a very simple uh input
- 4:02
interface and we can say something like
- 4:04
hello
- 4:06
and
- 4:08
yes we get back hey I'm an agent and
- 4:10
then we yes ask it to review a pull
- 4:13
request on the Gemini skills repository
- 4:15
and what we should see is like the agent
- 4:18
should hopefully start soon sending
- 4:20
function calls function results function
- 4:22
calls function results but it's very
- 4:24
limited to yes uh great it works very
- 4:28
limited to the tools we define so if we
- 4:30
ask the agent to do something which it
- 4:32
does not have the capabilities to it
- 4:34
just says hey I cannot do this um which
- 4:37
is unfortunate but that's how we were
- 4:39
building agents um raw Python code a lot
- 4:42
of files a lot of things which can go
- 4:44
wrong a lot of code to manage so what
- 4:47
happened afterwards
- 4:49
um or what we we need to do we have like
- 4:51
a token generation We have the native
- 4:53
function calling and we must execute the
- 4:56
loop. We must handle the tool routing.
- 4:57
We must create a JSON schemas. We must
- 5:00
write the Python code. We need to
- 5:02
execute the Python code. We need to
- 5:03
manage the state. So there's a lot of
- 5:04
things we need to do to get an agent
- 5:06
running. And then we got agent
- 5:09
frameworks. There were many different
- 5:10
agent frameworks which abstracted away
- 5:12
some of that complexity. One example
- 5:15
here is the ADK framework um where you
- 5:17
have an agent class now which handles
- 5:19
all of the tool loops, the function
- 5:21
calling, the retries, the error handling
- 5:24
and it made it a little bit easier. We
- 5:27
basically removed all of the boiler
- 5:29
plate code which we always needed to
- 5:31
write for agents put it into a framework
- 5:34
and help people build with it. So back
- 5:37
to the demo and
- 5:40
um same example. So we go into the CR2
- 5:43
and what is very interesting if you let
- 5:46
me open both. So we still have our we
- 5:50
don't have our agent file anymore. So
- 5:51
the agent went away. We still have our
- 5:54
prompt same system prompt. We still have
- 5:57
our tools in this case also no JSON
- 5:59
definitions anymore because those agent
- 6:01
frameworks now use the uh signature of
- 6:05
our functions to create those JSON
- 6:07
schemas on the fly to provide the model.
- 6:10
So let's stop our um agent. Now let's
- 6:14
run our second agent.
- 6:17
Similar interface,
- 6:19
similar prompt and we should see a
- 6:22
similar expected behavior where we have
- 6:24
function calls. We try to get the PR
- 6:26
data. We try to get the diff, we try to
- 6:29
get all of the code we need and it works
- 6:33
and we wait for for the agent to yes
- 6:36
continue. But similar difficulty here.
- 6:38
If I ask it like what's the weather in
- 6:42
San Francisco
- 6:44
um
- 6:46
we should get back hopefully a result
- 6:48
like hey I cannot do this I don't have
- 6:50
access to the weather API which
- 6:51
obviously makes sense because we did not
- 6:53
define any tool still very unfortunate
- 6:55
because we need to be very explicit on
- 6:57
what our agent can do and we all know
- 6:59
nowadays that we just want to prompt
- 7:01
something and we wanted the agent to do
- 7:03
whatever it takes to to achieve that
- 7:05
goal. So what is left for us to do? What
- 7:08
does the framework solve? The framework
- 7:10
solves the turn taking loops, the
- 7:12
routing, the execution mapping, the JSON
- 7:14
schema creation for like the different
- 7:16
function calls, but we still own the
- 7:18
Python plumping. So we still need to
- 7:20
write those tools with Python code. We
- 7:23
still need to add specific rules or
- 7:26
requirements to like make sure whatever
- 7:28
we want the agent to do and we need to
- 7:30
provide the environment where all of the
- 7:32
tools are running, where we want to host
- 7:34
it. So what comes afterwards? Afterwards
- 7:38
hopefully comes remote agents and at
- 7:40
Google IO we launched the anti-gravity
- 7:42
remote agent on the Gemini API. The
- 7:45
anti-gravity agent uh is powered by the
- 7:48
same agent harness which powers the
- 7:50
anti-gravity IDE. Here the same harness
- 7:52
very important does not mean the same
- 7:54
agent because the anti-gravity agent is
- 7:56
a coding agent at the moment and the uh
- 7:58
agent available in the Gemini API is a
- 8:00
general purpose agent. So there might be
- 8:02
different system instruction, there
- 8:04
might be slightly different tools
- 8:05
because the Gemini API already has a
- 8:07
Google search tool. So we use that what
- 8:08
we have built and but very importantly
- 8:11
it comes with this new environment
- 8:13
parameter and this environment parameter
- 8:15
here allows the agent to get access to a
- 8:18
hosted isolated cloud sandbox where it
- 8:21
can run tools, where it can run bash
- 8:22
commands and where it can save files.
- 8:25
And those environments can be um
- 8:28
configured. So you can provide sources
- 8:30
and sources can be a GitHub repository,
- 8:32
it can be a GCS bucket, it can be inline
- 8:35
files and of course very important we
- 8:37
want to make sure that those agents are
- 8:39
secured and cannot use our credentials
- 8:42
in any way possible. So we created a
- 8:44
network proxy around the um agent
- 8:46
sandbox which basically injects the
- 8:49
credentials when the agent makes a
- 8:51
request from inside the sandbox to
- 8:53
outside the sandbox. So the agent never
- 8:55
really sees your credential. It just
- 8:56
knows hey I can call the GitHub API and
- 8:59
then on the fly we make sure that it
- 9:01
received the correct token which you
- 9:03
define and you can also limit which
- 9:05
domains the agent has access to. So if
- 9:06
you want to restrict the agent
- 9:08
completely on which network access it
- 9:10
can or which website it can access you
- 9:12
just leave it blank. By default the
- 9:14
agent can access all because I mean it's
- 9:16
a hassle if you first need to define
- 9:18
where to go. So we tried to stay simple
- 9:20
and of course making an API call is nice
- 9:23
but we thought hey people want to reuse
- 9:25
their configuration want to reuse their
- 9:28
agents. So we added the agents API where
- 9:30
you can define your own custom ID you
- 9:32
the same system instruction the same
- 9:33
base agent the same base environment and
- 9:36
then you can create that agent and then
- 9:38
you can use that agent in the same exact
- 9:40
way as you use Gemini models or as you
- 9:42
use the anti-gravity agent by providing
- 9:44
the ID. So all of the existing code can
- 9:46
be reused with your own custom agent,
- 9:48
with your own custom tools, with your
- 9:49
own custom uh credentials, environments,
- 9:52
whatever you need for it to to run. So
- 9:55
let's look at how this will look for SS
- 9:58
code and as a demo. And
- 10:01
okay, now 03. And what might be very
- 10:06
obvious is that we no longer have a
- 10:07
source directory. So the code went away.
- 10:11
We have now an agents M uh folder with
- 10:14
an agents MD file with system
- 10:16
instructions. So very similar system
- 10:19
instruction. The only difference here is
- 10:20
that we tell the agent, hey, you have
- 10:22
access to the GitHub CLI. So we no
- 10:26
longer create specific tools for reading
- 10:29
files from a GitHub pull request, for
- 10:31
accessing a GitHub pull request. We just
- 10:33
tell the agent, hey, you have a GitHub
- 10:34
CLI, you have a bash tool, you have file
- 10:37
systems. try to use it whenever you
- 10:39
think it's important. And since we don't
- 10:42
have the CLI installed, we have a very
- 10:44
basic bash script in this case which
- 10:45
checks, hey, if the GitHub CLI is
- 10:47
installed, please use it. If not,
- 10:49
download it and install it on the first
- 10:50
turn. So, we go into our terminal and we
- 10:54
run our agent here. In this case, maybe
- 10:57
important I use a stream version because
- 10:59
otherwise we would wait like a few
- 11:01
seconds and we not get back any we would
- 11:03
not get back any anything back. So same
- 11:06
prompt
- 11:07
and we should soon see um our function
- 11:11
calls and function results coming in.
- 11:13
Yes. So in this case since we run inside
- 11:15
a sandbox the agent first like explores
- 11:17
the sandbox to really make sure hey do
- 11:19
we have this GitHub CLI installed and
- 11:22
then tries to run it. It did not find it
- 11:24
on the first turn. So it installs it and
- 11:26
then we can see the agent doing its
- 11:28
work. And in this case it's not using
- 11:30
the predefined function calls. It's
- 11:31
using the GitHub CLI and it's already
- 11:34
existing knowledge about how it works. I
- 11:36
have a bash tool. I have like access to
- 11:38
the file system and I do all of that
- 11:40
work to see or to like review the the
- 11:43
pull request. Let's wait a little bit.
- 11:47
Okay. And I think the the amazing part
- 11:50
here is like if we ask the same question
- 11:52
as before, what's the weather in San
- 11:57
Francisco?
- 11:59
We should hopefully see that the agent
- 12:02
tries to use ah it uses Google search in
- 12:04
this case on 2nd of July. Let me quickly
- 12:07
check. Yeah, that's today. And we have
- 12:09
around 20° Celsius and it works. So the
- 12:13
agent became more of a general purpose
- 12:15
agent and we don't need to like specify
- 12:17
all of the tools. We basically trust the
- 12:19
model on understanding hey I have a
- 12:21
specific set of very atomic general
- 12:23
purpose tools to solve my task or the
- 12:26
task for the user. And if we look at the
- 12:28
the code uh for like the the input or
- 12:32
like the the sorry the the interface we
- 12:35
have our sources here. So we have the
- 12:38
the bash script which install the GitHub
- 12:40
CLI. We have the agents MD file and then
- 12:42
we say hey you can use the GitHub API
- 12:45
with credentials. So I want to access or
- 12:48
use GitHub credentials in a secure way.
- 12:50
So I created a token for the API and
- 12:53
also for github.com since you need both
- 12:55
URLs. one uses is used for the git uh
- 12:57
commands. The other one is used for HTT
- 12:59
commands and then domain all is
- 13:00
basically hey in addition to the GitHub
- 13:02
URLs you can use all of the web but you
- 13:05
don't have credentials for it and then
- 13:07
it's a it's a simple single API call to
- 13:10
the anti-gravity agent with your or user
- 13:12
input with the environment and then also
- 13:14
with the previous interaction ID that we
- 13:16
keep the multi-turn going and that
- 13:18
that's all it takes and it's a single
- 13:20
API call on the backend side we start
- 13:22
that cloud sandbox we load the agents MD
- 13:25
file and the skills from the environment
- 13:27
provided to the model and then the model
- 13:30
between the API and the sandbox does all
- 13:32
of the the looping calling the function
- 13:34
returning the function results calling
- 13:36
the function returning the function
- 13:37
results and that is all it takes. So
- 13:40
where does it leave us? We no longer
- 13:43
need to execute loops. We no longer need
- 13:46
to do two routing. We have a serverside
- 13:48
conversation and session state. So we
- 13:50
only need to provide new inputs. The
- 13:52
context window and the compaction is
- 13:54
also automatically managed by the agent.
- 13:56
So if we continue our conversation at a
- 13:58
certain point the context is compacted
- 14:00
and we can continue without the need to
- 14:02
manage anything and we also get an
- 14:04
isolated remote Linux sandbox which we
- 14:06
can use to run our code. So what is
- 14:09
still left for us? We need to define
- 14:11
instructions. We need to define rules
- 14:14
behaviors in an agent MD file. We need
- 14:16
to provide capabilities or context and
- 14:18
skills MD and we need to own the evils.
- 14:20
So all of the heavy lifting, the
- 14:23
infrastructure management, all of the
- 14:24
same code which probably every one of us
- 14:26
has written of us here like 20 times is
- 14:29
no longer needed. And you can start
- 14:30
really building your product instead of
- 14:32
like needing to rewrite the same code
- 14:34
over and over again. And very important
- 14:37
is like, hey, that's great, but what
- 14:39
about extending? And I think looking
- 14:41
into how extending previous agents to
- 14:44
like those new agents work. It's very
- 14:47
obvious that previously if we want to do
- 14:50
like some kind of security scanning on a
- 14:52
pull request, we would need to define or
- 14:53
write a Python function. We would need
- 14:55
to understand okay which CLI tools do we
- 14:57
need to use? We need to define a new
- 14:59
function schema and then we needed to
- 15:01
add it to our tools need to run it and
- 15:03
then so there's a lot of things we need
- 15:05
to do on on agents powered by files. We
- 15:08
write a skills MD file maybe with some
- 15:10
additional information on which CLI tool
- 15:11
to use or maybe provide the CLI tool
- 15:13
inside the environment and then we
- 15:15
extended the capabilities. we don't need
- 15:16
to change our code. We just provide more
- 15:18
files to the agent and the agent decides
- 15:20
on what we want to do. And I like to
- 15:23
bring up some very good examples. So at
- 15:25
a engineer in Europe, Cursor did a great
- 15:27
talk on how they replaced uh roughly
- 15:30
12,000 lines of TypeScript code with a
- 15:32
200 lines agent files to create
- 15:35
something similar. So they had a very
- 15:37
hard-coded code um orchestration for
- 15:40
doing git work trees and they were m
- 15:42
able to replace it with just a skill and
- 15:44
markdown files and there are more I
- 15:47
would say bitter lessons of ancient
- 15:48
engineering manos has refactored their
- 15:51
harness five times in six months last
- 15:53
year langen has rearchitected their open
- 15:56
deep research three times a year and
- 15:57
then also worsel has removed 80% of
- 16:00
their tools to achieve fewer steps
- 16:02
faster responses and better accuracy so
- 16:04
there's an obvious trend that with
- 16:07
better model capabilities, we can remove
- 16:09
orchestration code. But if your harness
- 16:12
is getting more complex as the model
- 16:14
improves, you are most likely
- 16:16
overengineering your harness. So if you
- 16:18
struggle with model improvements and
- 16:20
adding new capabilities which lead to
- 16:22
more complexity and more code, you might
- 16:24
need to rethink a little bit on how your
- 16:26
agent harness looks. And so where does
- 16:30
it end up? Agents are just files. We
- 16:33
write markdown files to extend
- 16:34
capabilities. Agents can learn from
- 16:37
those um can create their own files. So
- 16:40
if you have a session and tell the agent
- 16:42
to remember something to take notes of
- 16:44
rules of preferences, the agent just
- 16:46
writes it to this and then can reuse it
- 16:48
in the later session and you can also
- 16:51
externalize context. So if you have a
- 16:52
very long running session and during
- 16:54
that session you notice hey maybe I want
- 16:56
to additionally work on another feature
- 16:58
you can like just write that information
- 17:00
that hand off to a file and like tell
- 17:02
the agent to later pick it up. Uh so
- 17:05
what are the takeaways? We should not
- 17:07
fight the model like we should stop
- 17:09
micromanaging the execution paths
- 17:11
provide general tools to the agent and
- 17:12
let the model explore reason and
- 17:14
discover the right solution. Own what is
- 17:17
yours meaning focus on your domain
- 17:19
instructions. Focus on the workflows.
- 17:21
Focus especially on the evals, define
- 17:24
clean tools and verify the outcomes and
- 17:26
really build to delete. Like we have
- 17:28
seen in the past many many times, the
- 17:30
better the model get, the more code we
- 17:32
can remove and the more things we need
- 17:33
to change and obviously we all want to
- 17:35
benefit from better models. So what the
- 17:39
things for you to get to do on Monday,
- 17:41
you can scan that QR code which brings
- 17:43
you directly to EI studio where you can
- 17:45
immediately try out the anti-gravity
- 17:47
harness. So you can already start
- 17:49
prompting it. it will start your own
- 17:51
custom sandbox. If not, um, start or
- 17:54
create your API key. We are currently
- 17:56
working on a free tier for the API. So
- 17:59
hopefully you can start exploring faster
- 18:01
soon and then definitely start building
- 18:03
files and skills. And that's it. Thank
- 18:06
you for for coming.
- 18:09
[applause]
- 18:24
>> [music]