October 2026
Everything that changed in NoClick in October 2026.
Memories that agents share
A memory is now an object of its own, with a name, that any number of agents can read: what every agent of your company should know, or what one agent learned that another needs. Attach it with memories=; it's read-only unless attached with writable(). Each agent still keeps a memory of its own.
company = noclick.Memory.from_name("company", create_if_missing=True)
company.save("tone", "Warm, brief, no jargon.", description="How we write")
support = noclick.Agent.from_name("support", create_if_missing=True,
instructions="Answer billing questions.", memories=[company])The TypeScript SDK offers what the Python SDK offers
The noclick npm package now covers everything the Python package does, reading the same responses: an agent's A2A card, a channel's budget and halt reason, ExecResult.ok, ToolResult.approveUrl, usage(), and more. Methods take Python's names in camelCase, so an example from either guide reads the same.
One language menu for the docs
Every code block in the guide now comes in both languages. Choose Python or TypeScript in the menu in the top bar, or in a block's header, and every block on every page follows, install commands included. The reference reads in either language too, with the same pages and anchors: Python or TypeScript.
Anyone can email your assistant
Your assistant's email address used to take only your own mail. It now takes anyone's, so people and other agents can write to it. Mail from someone else never lands in your own thread with it: each sender's mail gets a conversation of its own.
A monthly spending cap for your whole account
Set what your account may spend in each billing period in Settings → Plan and billing. Once the period's spend reaches it, every call that costs money fails with noclick.SpendCapExceeded, its scope "account", until the period resets. What you already have keeps renewing (numbers, domains, storage), and apps keep serving pages until the period reaches twice the cap. Only the account's owner sets or raises it.
Invite a friend, get $2
Every account has its own invite link, under your balance in the sidebar. When someone you invite starts using NoClick, $2 is added to your balance.
A site's backend gets the full SDK
Code in an app's backend can now call the whole SDK and message your agents, signed in as its deployment, with no key to keep. It reads and writes only what it made itself, never another app's resources. Each app has a monthly budget, budget_usd_per_month ($10 unless you set another): once it's used, the app keeps serving pages and reading its data, while its paid calls fail with noclick.SpendCapExceeded.
Usage shows every charge
Settings → Usage lists what your account was actually charged, in dollars, with a plain name for each charge, and drills down to what used it: which agent, app, number or automation.
Reversible by default: the trash and undo
Deleting an app, database, bucket, dict, queue, repo, volume, inbox or agent now moves it to the trash, where it stays restorable for 30 days. A write that can be taken back records how, so its operation can be undone. Only purging is permanent.
item = noclick.Database.from_name("orders").delete()
print(item.kind, item.name, item.purge_after) # database orders 2026-11-14 ...
item.restore() # back under its name, every table and row with itCheck a deployment before it's live
Deployment.check loads pages of a deployment in a browser and reports each one's status, load time, console errors and a screenshot. Give an app check_paths and a promote is checked where it serves before production switches: a failed check leaves production as it was. Every promote bookmarks the app's databases first, so undoing it restores them too.
checked = preview.check(["/", "/book"]).wait()
for page in checked.paths:
print(page.path, page.status, page.problem)Each preview branch gets its own data
An app whose preview_resources is branch gives each preview branch its own copy of the databases, buckets, dicts and queues its code names, made at the branch's first write. Until then its reads reach production, read-only, so a branch that only reads makes nothing. Inside an app, Database.from_name finds the app's own database for the environment it runs in.
Edge or container, decided per commit
An app's runtime is auto by default: each deployment reads the commit it builds and runs where it says. A wrangler config, a JavaScript framework or plain files run on the edge; a Dockerfile, or a server in another language, runs in a container. Set edge or container to pin it.
Agents can't force-push your default branch
An agent's push is checked before it lands: the default branch only fast-forwards and can't be deleted. A branch an agent rewrites or deletes is kept for 30 days; list them with Repo.backups and make one a branch again with Repo.restore_backup.
Sign in with Google, Apple and Microsoft, with nothing to set up
app.sign_in commits sign-in code into an app's repo, with its users in the app's own database. Google, Apple and Microsoft now sign people in through NoClick, so they work as soon as the operation ends, with no client to register at the provider. GitHub still uses your own client.
app = noclick.Project.from_name("booking")
setup = app.sign_in.enable(providers=["email", "google", "apple"]).wait()
print(setup.managed_providers) # ['google', 'apple']Email addresses on domains you bought
Make an inbox at a domain you bought through NoClick and its mail records are set up at once; on a domain you connected, the inbox goes on a subdomain. Mail to the address reaches the agent you name.
support = noclick.Agent.from_name("support-bot")
inbox = noclick.Inbox.create(local_part="help", domain="mail.acme.test", agent=support)
print(inbox.address) # help@mail.acme.testYour own texts and calls, answered by your agent
What you text NoClick's WhatsApp and iMessage numbers, or say when you call, goes to NoClick's assistant. answer_with sends it to an agent of yours instead: a text's reply goes back on the app you texted on, and on a call the reply is read aloud.
owner = noclick.Human.owner()
owner.answer_with(assistant)A repo's commit history
Repo.commits lists a branch's history, newest first, and each commit's page in Resources shows its changes, file by file.
Put a website on a domain you hold
From a domain's page in Resources, pick one of your websites to serve there. Each name says where it stands: registering, DNS, certificate, then live. A purchase that fails frees the names it was going to serve.
Build automations from a description
Workflow.create with instructions has NoClick's builder make the automation, as it does in the app. Change it the same way, by describing the change, and run, pause and publish it from your code.
brief = noclick.Workflow.create(
"Morning brief",
instructions="Every weekday at 8, email me today's calendar and the unread emails that need a reply.",
)
result = brief.latest_build.wait(timeout=900)
print(result.summary)Browse numbers on any balance; buy with $5 in it
Searching for phone numbers is open to every account. Buying one, like anything paid up front, needs $5 in your balance on any plan, in place of the Member plan. A quote, a purchase's first step, says so before anything is bought, with an offer of funds to add.
Phone numbers in more countries
Numbers are sold in every country our carrier covers, each priced by its own search. A country that asks who holds a number takes the holder's address with the purchase. One that asks for documents takes them as uploads, and the carrier's review can take a few days, so buy returns a PhoneNumberOrder rather than the number.
holder = noclick.NumberHolder(name="Dana Ruiz", street="Keizersgracht 1", city="Amsterdam",
postal_code="1015 CJ", country="NL", phone="+31612345670")
noclick.PhoneNumber.buy(pick, max_monthly_usd=5, address=holder)The API is open to every account
Every account, on every plan, can now make keys and call the API, the SDKs and the MCP server. Start with Getting started.
One noclick package
The SDK is one package in each language, noclick on PyPI and npm, for the whole platform. The bridge custom components use in NoClick interfaces is part of it, as noclick/embed; components inside an interface keep importing @noclick/sdk.
pip install noclick