2024-06 Release Notes

June 7, 2024

2024-06 Release Notes

Nolita 2.0 is now available for developers on GitHub or just by running npx nolita@latest.

What's new?

Forgive the silence. After presenting at Betaworks' Agent Camp Demo Day, we worked closely with other developers in agentic navigation and began redesigning the Nolita APIs for broader purpose.

We had several takeaways:

  • objective-oriented, agentic navigation isn't always the ideal for quick tasks and composability;
  • meeting Python developers where they are is important, even if our codebase is in TypeScript;
  • finally, operating as simply as a drop-in replacement is important for developer ergonomics

With all these in mind, we started to consider how Nolita might operate as a more natural language drop-in for Puppeteer. By organising our API around Page instances, we found that you didn't have to wait for one tab to complete, or even one Browser window to finish its task: you can begin to map over the typed responses from previous objectives.

We've updated our example code for an idea of the ergonomics available for developers.

const browser = await Browser.launch(false, agent);
const page = await browser.newPage();
await page.goto("https://hdr.is");
await page.do("click on the company link");
const answer = await page.get(
"Find all the email addresses on the page",
z.object({
emails: z
.array(z.string())
.describe("The email addresses found on the page"),
})
);

Page.do provides a single, action-oriented command to an agent; Page.get poses an objective to accomplish. Passing an expected, typed response from your agent is as easy as passing a parameter of the shape.

We hope it is evident with use how much this enables for developers to construct applications using the same browser session -- not just one-off objective sessions.

Increasing our documentation

In addition, we've begun expanding our inline source code documentation for all our exported classes. Our goal is to be as legible as possible in your IDE and in our documentation. With our new Nolita documentation, you can see the exact location of all exported definitions and parameters, and of course, find example usage. We're still expanding our guides for common use cases, especially in the wake of our new API.

Since we never mentioned it on the company blog: we named @hdr/browser Nolita! It's named after our favourite neighbourhood in Manhattan. It's also important to mention that we increased the scope of the Nolita API itself to also include a server and bootstrapping full-stack applications built on Nolita.

You can see examples of all interfaces in real-life, moving GIF on GitHub.

Going forward

So what's next for us?

  • It would be powerful to control Page objects as an abstraction over remote instances of Chrome, so we intend to facilitate this functionality soon.
  • Of course, even with all this Nolita work, we're still working on the Memory Index! You may have seen the documentation deployed for the API endpoint. We have a lot of work to do on increasing the scope of our Memory Index documentation, and signups are still closed, but we intend to softly onboard over the following month. The waitlist is still available here on hdr.is.
  • Finally, we intend to provide a Python SDK as part of our short-term efforts as well.

Thank you for being with us as we tirelessly hone our vision for open-source, web-first agents. Whether you want to just dictate, step by step, how you want to navigate the web programmatically -- or whether you want to quickly pipe an answer into your bash terminal, based on nothing more than a question and a single command -- we want to help you do it.