Agents Without Code: Skills, YAML, and Filesystems Replaced Python — Philipp Schmid, Google DeepMind
Read the talk
Agents Without Code: Skills, YAML, and Filesystems Replaced Python
Philipp Schmid rebuilds a GitHub pull request reviewer three times, moving from a handwritten Python loop to a hosted agent with Bash, files, and search. The progression shows which code can disappear, where execution moves, and why instructions and evaluations remain your responsibility.
From a talk by Philipp Schmid
At a glance
Ideas worth remembering
Frameworks can remove handwritten loops and schemas while leaving the developer responsible for tool implementations and hosting.
The remote reviewer uses Bash, a filesystem, and the GitHub CLI to discover and satisfy an execution prerequisite before continuing its task.
A network proxy injects credentials outside the sandbox. Keeping the token hidden and limiting authenticated actions are distinct concerns.
Managed execution moves loops, routing, session state, and compaction server side; instructions, capabilities, evaluations, and outcome verification remain product work.
Skills and saved files can extend capabilities or carry preferences and handoffs. Improved models should create opportunities to delete orchestration that no longer earns its place.
The same reviewer, with less code each time
A GitHub pull request reviewer needs to retrieve changes, inspect code, and decide what deserves attention. Philipp Schmid of Google DeepMind builds that same agent three ways, deleting implementation code between versions. The working definition is deliberately small: an agent runs tools in a loop until it achieves its goal. The experiment changes who implements that loop and how the agent obtains its capabilities.
The common interface is the Gemini Interactions API, presented here as an API for both models and agents. It supports server-side state and background execution, alongside tool calls and multimodal inputs and outputs. Selecting a model or a managed agent can therefore preserve the application's basic request interface while changing how much execution the service handles.
Agent activity also needs a richer history than alternating user and model messages. A user request can lead to reasoning, a function call, a function result, and more reasoning before an answer appears. Interactions represents those events as a flat timeline of steps. A tool result can retain its own type instead of being squeezed into the user role merely to return environmental data to the model.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Version one: Python connects each tool call to its result
The first implementation makes the developer responsible for the complete execution cycle. A Python run function calls the model, inspects its response, distinguishes a function call from text, matches the requested function to an implementation, and executes it. Results—and errors when something goes wrong—must return to the conversation so the model can choose its next action. That repeated request, dispatch, and return is the agent loop.
Three pieces define the reviewer:
- System instructions: A separate prompt file establishes the role of GitHub PR reviewer.
- Tool declarations: Handwritten JSON schemas describe the available actions and the arguments the model must generate.
- Tool implementations: Python functions send requests to the GitHub API and return the data needed for review.
The declaration tells the model what it may request. The implementation performs the request outside the model.
The demo asks for a review of a pull request in the Gemini Skills repository. Function calls and results begin appearing, showing that the loop reaches the supplied GitHub capabilities. But a request outside that tool set receives a refusal. The model's ability to understand a question does not supply an implementation for answering it: this reviewer can act only through the tools the application defines.
The maintenance cost extends beyond GitHub logic. The application also owns routing, schemas, execution, error handling, and state. Each part is ordinary software, but each adds another place for the agent's execution to break. This is the boilerplate the second version removes.
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 the loop, while capabilities stay explicit
ADK replaces the custom agent implementation with an agent class that handles tool loops, function calling, retries, and errors. The reviewer keeps the same prompt and Python tools. Its handwritten JSON declarations disappear too: the framework derives the schemas from function signatures and supplies them to the model. Schemas still exist in the execution path; the developer no longer maintains them separately.
The second reviewer retrieves PR data, the diff, and the code needed for inspection. Then comes the revealing question: what is the weather in San Francisco? There is no weather tool, so the expected response remains that the agent cannot obtain it. Packaging the loop in a framework reduces implementation work without expanding the agent's available actions.
The framework owns turn-taking, routing, execution mapping, and schema creation. The application still owns Python tool implementations, domain rules, and the environment that runs them. Extending the reviewer still means adding application code and arranging somewhere for that code to execute.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
A remote agent gets a sandbox—and credentials through a proxy
The third approach uses the Antigravity remote agent on the Gemini API. It shares the harness—the machinery around the model—with the Antigravity IDE, but sharing a harness does not make the agents identical. The IDE agent is described as a coding agent; the API agent is general purpose, with potentially different instructions and tools. In particular, the Gemini API already supplies Google Search.
An environment parameter supplies a hosted, isolated cloud sandbox. The agent can run Bash commands, use tools, and save files there. Sources can come from a GitHub repository, a GCS bucket, or inline files. Instead of implementing every GitHub operation as a Python function, the application can provide an environment in which the agent uses existing software.
Authenticated requests pass through a network proxy around the sandbox. The agent initiates an outbound request, and the proxy injects the configured credential on the way to the external service. The agent can use GitHub without receiving the token itself. This separates access to the secret value from the ability to perform authenticated operations; it does not, by itself, limit what those operations may do.
Which component holds the credential, and which component sends the request? The diagram traces that separation. Network access has another control: permitted domains can be restricted, while the default described in the talk allows access to all domains for convenience. The demo later combines credentials for GitHub destinations with general web access that carries no GitHub credentials.
For reuse, the Agents API lets the developer register a configuration under a custom ID. That configuration includes the system instructions, base agent, and environment. Subsequent calls select the ID through the same style of interface used to select a model or the base remote agent. The configuration becomes a reusable agent definition rather than something rebuilt for every request.
Runs commands and initiates outbound requests without seeing the credential.
The sandbox originates the request. The proxy adds the configured credential before it reaches GitHub; network reach and authenticated reach are separate configuration choices.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Version three: the reviewer discovers and installs its CLI
In the third demo, the source directory is gone. An AGENTS.md file carries the review instructions and tells the agent that it has a GitHub CLI, Bash, and a filesystem. Dedicated functions for accessing a PR or reading its files have disappeared. The model chooses commands using its existing knowledge of the CLI.
There is still one small executable dependency: a Bash script that checks whether the GitHub CLI is installed and downloads and installs it if necessary. This matters immediately. When the review starts, the agent explores the sandbox, tries the CLI, discovers that it is missing, installs it, and proceeds with the review. The environment visibly changes from lacking the required program to containing a usable tool. The model handles that prerequisite through general commands rather than a developer-written branch in the PR-review loop.
The client streams the interaction so calls and results appear while the remote work continues. The same San Francisco weather question now produces a Google Search call and an answer of around 20°C, for July 2 in the demonstration. That is a concrete change from refusal to retrieval through an available general tool. It demonstrates broader task reach, rather than establishing weather accuracy or PR-review quality across repeated runs.
The weather answer also explains the architectural difference. No weather-specific Python wrapper was added. The API agent already had Search, and the model chose it for a question the GitHub CLI could not answer. General tools let the model compose a route to a task without the application naming every task-specific action in advance.
The client still makes an API call. It supplies user input, the environment, and the previous interaction ID to continue a multi-turn conversation. The environment sources include the installer script and AGENTS.md; credentials cover both GitHub API access and github.com, serving HTTP and Git commands. The backend starts the sandbox, loads the instructions and skills, and runs the repeated tool-call and tool-result cycle.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
The loop moves server side; domain behavior stays yours
Where did the deleted Python work go? The following diagram shows the remaining client request beside the execution cycle now handled by the service. One client call can contain many model–tool exchanges. The loop remains essential; its implementation has moved out of the application.
The managed agent also handles conversation and session state, tool routing, and context compaction. The client sends new input instead of rebuilding the entire history or implementing its own compaction step. A remote Linux sandbox supplies the execution environment. These are the infrastructure responsibilities removed from the developer's reviewer.
Three responsibilities remain:
- Instructions and rules: Define the desired behavior and domain requirements in
AGENTS.md. - Capabilities and context: Supply the files, skills, and software the agent needs to accomplish the work.
- Evaluations: Decide what successful behavior means and verify the outcomes.
Reducing orchestration code leaves more attention for these product-specific decisions. A hosted loop cannot decide whether a review meets your standards.
Sends input, environment, and previous interaction ID.
The client supplies the new input and continuation ID. The service loads the environment, then repeats model decisions and sandbox actions while managing session state and context.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Extend the reviewer with a skill, then reconsider the harness
Security scanning makes the extension cost concrete. In the earlier design, adding a scan requires choosing a scanning CLI, wrapping it in a Python function, defining a function schema, registering the tool, and running the updated implementation. In the file-based design, the developer provides skill instructions describing the scanner and, when needed, places the CLI in the environment. The agent can use those additions through its existing execution tools.
A skill does not make the scanning software unnecessary. It removes the need for a new application wrapper when Bash and the supplied program already provide the required action. The extension changes the agent's available knowledge and environment, while its client-side orchestration stays the same.
The talk points to a Git-worktree example that replaced roughly 12,000 lines of TypeScript orchestration with about 200 lines of agent files, skills, and Markdown. It also cites Manus refactoring its harness five times in six months during the previous year. These examples motivate revisiting orchestration as model capabilities change: a workflow that once required hardcoded coordination may become something a model can carry out from instructions.
The closing heuristic is pointed: if the harness grows more complex as the model improves, it is probably being overengineered. New capability should prompt a question about what can be removed. The aim is to benefit from improved model judgment rather than keep adding execution paths that reproduce decisions the model can now make.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Files carry preferences and handoffs beyond one conversation
Files can hold more than capabilities. An agent asked to remember a preference can write a note to disk and reuse it in a later session. A long-running session can also externalize a new feature request as a handoff file, leaving it available for later work. The mechanism is explicit storage followed by retrieval: later work benefits when the relevant file is available and read.
That brings the practical advice back to ownership. Give the agent general tools and room to explore, reason, and find a solution. Keep domain instructions and workflows clear, define useful tools, own the evals, and verify the results. “Build to delete” is the phrase that lands: preserve the behavior the product needs while allowing improved models to retire unnecessary implementation.
The final invitation is to try the harness in AI Studio, where prompting it starts a custom sandbox, then begin building files and skills. API-key setup is offered as another route. A free tier for the API is described as work in progress at the time of the recording, so the invitation does not establish free API availability.
Suggest correction
This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.
Resources
Further reading
A practical follow-up focused on the talk's GitHub integration and credential-handling example.
Further reading on the managed execution machinery that replaces the application's custom loop.
Authoring guidance for turning domain workflows into useful skill instructions.
Installable examples of coding-agent skills for Gemini development, including the Interactions API.
Related talks
- Replacing 12K LoC with a 200 LoC Skill
Develops the orchestration-removal example explicitly mentioned near the end of this recording.
- Don't Ship Skills Without Evals
Expands the responsibility left with the developer: testing skill behavior, detecting regressions, and deciding when guidance can retire.
- Building Conversational Agents
Provides a longer hands-on treatment of Interactions state, file tools, and the client-managed execution loop.
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]