Inspiration

DOLET came from something I kept running into while building projects: I didn't just want AI to tell me how to do something. I wanted it to actually work on it with me.

I wanted something that could remember what we were building, keep track of unfinished work, use tools when needed, create actual files, and continue from where it stopped instead of starting fresh every time.

That idea became DOLET.

The way I think about it is simple: the model can think for DOLET, but the model is not DOLET.

What it does

DOLET is a persistent software robot that can take a goal and actually work through it.

You can ask it to do something like create a browser game. DOLET can plan what needs to be done, create the project files, write the code, use its tools, keep track of the results and preserve the project in its workspace.

It can also work with files and documents, execute controlled Python tasks, access approved public-network tools and handle longer tasks that take several steps.

The important part is that DOLET remembers.

Its identity, memory, plans, tasks, permissions and results are stored by DOLET Core. If work is interrupted or the application restarts, DOLET doesn't have to forget everything and begin again.

How we built it

DOLET is built in Python.

Gemini 3.5 Flash is used for reasoning through the Google Gen AI SDK, with support for both the Gemini Developer API and Vertex AI.

But Gemini doesn't directly control DOLET's tools.

When Gemini thinks an action should happen, it proposes that action. DOLET Core checks whether the action is allowed, checks the owner's permissions and then executes the tool itself. The real result is recorded and can be used when deciding what happens next.

So the flow looks roughly like this:

Goal → Memory → Plan → Gemini reasoning → Action request → Permission check → Tool execution → Result → Persistent state

DOLET also has controlled tools for working with files, running Python, accessing public-network resources and handling document workflows. Nutrient DWS is integrated for document operations such as PDF conversion and redaction.

A web interface gives access to the conversation, tasks, plans, results and other parts of DOLET's state.

Challenges we ran into

Persistence was one of the hardest parts.

It is easy to make something that responds to one prompt. It is much harder to make something that can start a task, perform several actions, stop somewhere in the middle and still understand what is happening when it comes back.

Resuming work also caused problems. There were cases where DOLET had saved a task but didn't correctly recognize that it was waiting for the owner to continue.

Tool permissions were another challenge. I didn't want the reasoning model to automatically get access to everything DOLET could do. That meant separating reasoning from execution and making Core responsible for deciding what can actually happen.

There were also the normal integration problems: provider failures, retries, output limits and making sure real tool results were preserved instead of assuming something worked.

Accomplishments that we're proud of

I'm proud that DOLET can actually produce things.

It isn't limited to having a conversation about how to build a project. It can create project files and carry out the steps needed to work on them. One example is giving DOLET a goal to create a browser game and having it build the files for that project.

I'm also proud of the persistence system. DOLET can keep memory, plans, tasks, permissions, results and audit information instead of treating every interaction as a completely new conversation.

Another important milestone was separating DOLET itself from the model reasoning for it. Gemini can be replaced without replacing DOLET's identity, memory or control system.

The current AI Builders version passes 102 automated tests.

What we learned

One of the biggest things I learned is that giving an AI model more tools isn't the same thing as building something that can reliably use them.

Memory matters. State matters. Permissions matter. Knowing whether an action really happened matters.

I also learned why I wanted DOLET Core to remain separate from Gemini. Models will keep changing. I don't want DOLET to become a completely different system every time the reasoning model changes.

The model should be able to change while DOLET remains DOLET.

What's next for DOLET

I want DOLET to become capable of handling much larger projects and more real-world work.

That means expanding its tools and integrations, improving how it handles long-running projects and making it easier to move between different kinds of work without losing context.

I also want to keep improving the project-building side of DOLET. Creating a browser game is one example, but the bigger goal is for someone to be able to describe what they want to make and have DOLET stay with that project from the first idea through the actual work.

Eventually, I want DOLET to feel less like opening an AI chat and more like having a software robot that remembers what you're building and keeps helping you move it forward.

Built With

Share this project:

Updates

Submission history