Changelog

What changed in NoClick: the SDK, the API and the app, newest first.

NewAgentsSDKAPINext SDK release

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])
Read more in Memory and files
ImprovedSDKNext SDK release

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.

Read more in Spend and limits
NewAPISDKNext SDK release

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 it
Read more in Undo and the trash
NewAppsSDKNext SDK release

Check 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)
Read more in Apps and deployments

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.

NewAppsSDKNext SDK release

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']
Read more in Email, payments and sign-in

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.test
Read more in Inboxes
NewAPISDKNext SDK release

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)
Read more in Workflows

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)
Read more in Phone numbers
NewSDKSDK 0.2.0

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
Read more in Getting started

Approval rules on every connected account

Every connected account now carries its own approval rules, and they apply to everything that uses it: your agents, your coordinator, and any MCP client. Open Settings → Credentials and click the shield on a connection to reach its Tool permissions page.

A locked action runs nothing until you say so. The call waits, the exact arguments it would send are shown to you, and you approve or decline it.

  • The Use without approval row sets everything at once. Read-only lets reading actions run and locks the rest, All lets every action run, and None locks everything, including actions the service adds later. Search the list to lock one action on its own.
  • Requests arrive under Needs you on the Dashboard, where you can read the arguments and decide without leaving the page.
  • Approving admits one call with exactly those arguments, and it has 30 minutes to run. Different arguments, a second attempt, or a change to the rules each need a fresh approval. An untouched request expires after 24 hours.
  • Agents and MCP clients can add restrictions but never remove one. Unlocking happens only on the permissions page, signed in as the connection's owner.
  • Operations you allowlist on a tool provider node now carry a lock in the node settings, so you can see and change what needs approval without leaving the workflow.

Live calls on your own Twilio number

The Twilio node gained two call operations, so a number you already own can carry a voice agent.

  • On Incoming Call is a trigger. Pick the Phone Number that should ring, write a Greeting, and NoClick points that number's voice webhook at your workflow. The agent wired to the trigger answers and holds the conversation live.
  • Place an Agent Call is a tool an agent calls itself. Give it a From Number, a To number, and a Goal in plain words. It returns straight away while the call runs.
  • A finished call comes back as a message in the agent's chat, with the transcript and how long the call lasted. An outbound call reports back to the agent that placed it, in the conversation it was placed from, so a workflow no longer needs an On Incoming Call node to hear about a call it made.
  • Both operations need an Account SID and Auth Token credential, because an API key cannot verify the webhooks Twilio signs. One number rings one agent, and a second workflow that tries to claim it is told which workflow holds it.

A coordinator for your whole account

Every account now has a coordinator: one assistant that sees the whole account rather than a single workflow. It reads your workflows and runs, hands builds and fixes to the AI builder, passes work to agents you already have, and connects accounts for you.

  • It watches failed runs. When a workflow fails, the coordinator looks into it: it asks the builder to diagnose and fix, pauses a workflow that is clearly finished with, or tells you when only you can fix it. A run that failed for want of credits never wakes it, because the credits alert already covers that.
  • Memories is a new card on the Dashboard. It holds what the coordinator has learned about you and your work, as entries you can read, edit, write yourself, and delete. Each one is filed as About you, Preferences, Project context, or Reference.
  • Preferences live there too, rather than in a settings page. Tell the coordinator to stop triaging a workflow, or which channel to reach you on, and it keeps that as a memory.
  • It reaches you where you last wrote to it, on WhatsApp or by email. It has its own inbound address on noclick.app, so you can mail it and it answers on the same thread.
  • It makes images and video on request. Video generation is available on the Plus and Pro plans.
  • Your agents can message it as well, so an agent that hits something it cannot fix has somewhere to send it.
Improvements and fixes4
  • Signing in with a phone number from the site navigation now lands you on the Dashboard instead of reloading the page you started from. The code step counts down with Resend code in 0:30 and then offers Resend code, and a send the provider refuses as too soon says how long to wait instead of showing a generic error.

  • Accounts with no email address, which is what a first WhatsApp message creates, now work end to end. Connection links sent to them open, organization invites and shares behave correctly, checkout and top-ups work, and names show in the navigation bar, the organization switcher, and the chat sidebar rather than appearing blank. Tools that need an email address, such as agent email updates, are no longer offered on an account that has none, and the Send Email node explains how to connect an address instead of failing with an internal error.

  • Workflows holding an HTTP Request, RSS, or MCP Server node that runs without a credential no longer refuse to activate with "connect an account". Those nodes support an optional credential, and readiness now treats them as ready without one. Nodes that genuinely require an account, such as an Instagram OAuth connection, are still enforced.

  • The WhatsApp message that tells you the builder is waiting now names what it needs, for example "2 account connections and one answer", instead of repeating the question as a label.

Sign in with your phone number

The sign-in page and the in-app sign-in panel now offer Continue with phone. Type your number, tap Text me a code, and enter the code to sign in. A number NoClick has not seen before makes an account, so the same form covers signing up. The number field has a searchable country picker, adds the calling code to digits typed without one, and formats the number as you type.

The number you message NoClick from on WhatsApp signs you in to the same account, so a chat you started on your phone and the workflows you open in the browser are one account rather than two.

  • Phone is now a section in Settings for every account. Add a number, prove it with the code we text you, and WhatsApp messages and calls from it reach your account. Codes expire after ten minutes. Each row says whether the number was Verified with a code or Linked on WhatsApp.
  • An account can link up to five numbers, and a number belongs to one account at a time. Unlink frees a number for another account to claim, and a number that is the only way into an account cannot be unlinked until the account has an email address.
  • A chat that started on WhatsApp with no account behind it can be connected to an account you already have, from inside the chat. Ask to connect the email you sign in with, and NoClick emails that address a six digit code for you to send back. The code expires after fifteen minutes and is spent after five wrong tries, and nothing moves until it matches, so naming an address you do not hold reaches nothing. On a match, your workflows, connected accounts, and the chat itself move to the account with that email. Where no account has that address, the phone account takes the email so you can sign in with it too.
Improvements and fixes1
  • The agent model lists picked up their latest releases. Codex offers OpenAI's newest model ids, and Claude Code's opus alias now points at the newer Opus release, which an agent set to opus follows on its next run.

Posting to TikTok, with the account's own rules applied

Pick Direct Post Video or Direct Post Photo and the node settings now show a Post to TikTok panel: the connected creator's name, a preview of the media and caption, and the posting options TikTok currently allows on that account. Visibility is never filled in for you, comments, Duet and Stitch stay off until you turn them on, and an interaction the creator has turned off in TikTok cannot be enabled from here.

Every run re-checks those options against the account before it posts, so a visibility or an interaction the account no longer allows fails the run instead of publishing something more widely visible than you chose.

  • Commercial content has its own controls. Disclose commercial content reveals Promote your own brand and Paid partnership with another brand, at least one of which has to be chosen, and a paid partnership cannot be posted privately. The workflow will not run while those settings contradict each other, and the panel links the TikTok policies you are agreeing to. AI-generated content marks a post as AI generated.
  • The node output now carries published and publish_status alongside status, because TikTok accepts a post before it finishes processing it. If it is still processing, pass the returned publish_id to Check Video Publish Status rather than running Direct Post again, which posts a second time.
  • Video you attach to the node is uploaded to TikTok directly, so it no longer needs a public address. Hosted video and photo URLs still have to be HTTPS on a domain verified for your TikTok developer app.
  • Connecting another TikTok account now always shows TikTok's own consent screen. An already signed-in session used to be approved silently, which could reconnect the same creator when you meant to add a different one.
Improvements and fixes4
  • An agent listening on a WhatsApp QR connection is now told who wrote each message, not just the chat ID. The turn carries the sender's WhatsApp display name and, where it differs from the chat ID, their phone number, so a standing instruction about a particular person matches. The reply address is unchanged.

  • A node the AI builder removed could come back on the canvas and in the saved workflow, and then ride into the next prompt. Builder removals are now remembered the same way your own deletions are, so a save that arrives out of order cannot restore them.

  • New agents and the AI builder now run on the latest Luna model, which follows OpenAI's releases without a change on your side. Agents you have already configured are unchanged.

  • Taking a published app down now finishes the job before the app leaves your list: the API key is revoked, the files are deleted, and the CDN cache is cleared. If any of that does not complete, the app stays listed so you can try again instead of vanishing while the page is still reachable.

Keys are checked when you save them

Pasting an API key used to save whatever you typed. A key with a stray line break, a web address pasted into a token field, or a key the service does not accept all saved looking connected, and you found out at the first run. NoClick now tidies the value and asks the provider about it before storing anything.

When the provider answers, the form shows what it said about your account rather than a tick: your own boards, sites, or workbooks, or Connected as and the account name. When the provider refuses, nothing is saved, and you get its own words along with what that usually means, such as an address serving a sign-in page instead of an API, or a key that reads as truncated or revoked. When NoClick cannot reach the provider at all, the credential saves and says Saved, not verified rather than claiming to be working.

  • Problems are reported under the field they belong to. A web address pasted into a key field, placeholder text left in, and a value the service's own rules reject each name the field, and clear as you edit it.
  • Credential forms now show the setup instructions and the per-field help for the service. Both were already written for each service and neither was displayed.
  • A credential that proved itself when you connected it is remembered as Verified, with the account it connected as, so a node's Credentials tab says more than that something is attached.
  • Tableau accepts your site address as it appears in your browser. Paste the whole URL into Server URL and NoClick fills in Site Content URL from it. The Cloud Manager console address is refused when you save, because it never serves the API, and the message names what to use instead.
  • The same check runs wherever a key is entered: on a node, in Settings → Credentials, during Setup, and on a link someone sent you to connect an account for their workflow.
Improvements and fixes1
  • Scanning a WhatsApp QR code no longer warns that the connection you just made is missing. The node's Credentials tab judged the new connection against the credential list it had loaded before the scan, so for the moment it took the refreshed list to arrive it reported the attached credential as one that no longer exists or is not accessible. Nothing was wrong with the connection, and the warning cleared on its own.

Improvements and fixes2
  • An Instagram On Mention trigger reports who wrote the comment. When Meta's notification carried only IDs, NoClick read the comment back to fill in the rest but did not ask for its author, so data.author came back empty and author_available was false even when the commenter's username was there to be read. Mentions in captions were unaffected, and a mention Meta supplies no author for still reports author_available as false.

  • A link for answering the builder's questions stays valid on every step. When one link asked for two connections of the same service, the second question's connection request replaced the first one's, so going back to Step 1 of 2 reported Credential request not found. Questions for the same service now share one request, so a single sign-in answers all of them, and links sent before this repair themselves the next time they are opened.

Start a workflow when Instagram mentions you

Instagram has a new On Mention trigger. It runs your workflow when your connected account is @mentioned in a comment or in the caption of a public post or Reel, including on someone else's post. Both kinds are included by default, and nothing is polled: Instagram pushes each event as it happens.

The event arrives with the text, the author, and links to the media, so you can wire it straight into an HTTP Request step and send it to your own backend. It tells you which kind of mention it was, and marks an author or a media link as unavailable when Meta does not supply one, rather than leaving you to guess. Each event carries an event_id you can use to skip duplicates. Private posts and Story mentions are not covered.

  • On Mention uses the Facebook login connection, which is offered again when you connect Instagram. Mentions on other people's posts reach NoClick through the Facebook Page linked to your Instagram account, so that trigger needs the Page where On Comment and On Message still use the Login connection. An existing mention trigger on a Login connection keeps working for mentions on your own posts, and its Status field now tells you to reconnect it for mentions elsewhere.
  • Connecting Instagram through Facebook finds Pages that belong to a business portfolio. NoClick now asks for the business permissions those Pages require, so an account with full portfolio access is no longer told that no Instagram business account was found. You are asked to approve the extra permissions the next time you connect.
  • Connecting through Facebook reads your whole list of Pages. Accounts with enough Pages to span more than one page of results used to be told nothing was found when the Instagram account sat further down the list.
  • A failed Instagram connection says which of three things went wrong: Facebook granted no Pages at all, it returned a Page with no Instagram account linked, or a Page could not be read. Each message names what to change and which Pages were involved, so you can fix the grant instead of retrying the same sign-in.

Agents read the voice notes and files that arrive with a message

A voice note sent to an agent on WhatsApp, Telegram, or Discord used to arrive as a link the agent could not listen to, so the best it could do was ask the sender to type it out. Audio that arrives with a message is now transcribed, and the transcript becomes part of the turn the agent reads, so it answers what was actually said. A document that arrives the same way has its text pulled out at no cost, and photos and videos keep their link.

  • This covers WhatsApp, Telegram, Discord, attachments on an inbound email, and files you upload in the agent chat. Telegram attachments are also saved to the workflow's resources as the message arrives, so a voice note plays in the run and chat views instead of showing an ID you cannot open.
  • Files shared in a Slack message reach the agent too, up to three per message and 25 MB each. Slack keeps its file links private to the workspace, so NoClick saves a copy to the workflow's resources and gives the agent a link it can fetch.
  • The transcript appears under the audio player in the agent's chat and in the run view, so you can check what the agent heard.
  • Transcription is on by default and can be turned off per agent: Transcribe Voice Messages under Advanced in the node's settings, or Voice transcription under Capabilities in the agent chat's Settings. With it off, the agent is told that a voice message arrived and can ask the sender for text.
  • Transcription costs credits like other AI usage. Audio is transcribed up to 20 MB and 10 minutes, at most three audio files per message. Anything larger, longer, or in a format the transcriber does not accept becomes a note telling the agent to ask the sender for text instead. A Test Run transcribes nothing, because the media it stages is made up.
Improvements and fixes3
  • API keys work again under Settings → Developer. Creating, listing, and revoking a key failed with an authorization error, because the app and the API sit on different domains and the request was not carrying your sign-in. The page also shows the error when a request fails, rather than appearing to do nothing.

  • Opening NoClick from a Shopify store that has not finished installing now shows a Connect your Shopify store page with a Continue Shopify setup button, which opens Shopify's approval step in the same browser tab. It used to start that step inside the frame in your Shopify admin, which Shopify blocks.

  • Requests to NoClick's API are faster, and a request that takes longer than five seconds no longer fails with a proxy error. That includes the fallback connection your browser uses when it cannot open a websocket, which was being cut off after about ten seconds.

Setup says what has actually arrived

The Setup tab now ends with a check on the workflow itself. It reports one of six states: setup unfinished, configured but unverified, registered and waiting for a real input, a reporting deadline armed, a real input received, or nothing automatic wired at all. When an input has arrived it names the node, when it arrived, and what the run did with it, and a Refresh button rechecks without reloading the page. It also says outright that a Test Run is simulated and that a send the provider accepted is not proof it was delivered.

  • A trigger registers only once the path it starts can run. A trigger whose workflow is still missing an account, an agent's instructions, or a required field no longer shows as live while nothing could have run. Fix what is missing and the trigger registers itself the next time the workflow saves.
  • A WhatsApp trigger that could not register says why, for example that the saved phone link is disconnected and needs reconnecting, and the message clears once a later attempt succeeds.
  • A trigger run that carried no event stops there. A push trigger you run by hand reports that it is waiting for a message and no longer hands an agent an empty turn to spend credits on. Branches that do not depend on that trigger still run.

An agent fed by a trigger does not need a Message

Message is where you write an agent's standing instructions, and it is still required when nothing feeds the agent. When a trigger is wired into the agent, the event that arrives is the turn, so Message can be left empty and the node is no longer marked incomplete for it. Running such an agent by hand, with no event and no standing instructions, fails with an error saying so rather than running on nothing.

Improvements and fixes9
  • An agent can hold a named deadline per thing it watches. schedule_alarm takes a watch_key for the site or report being monitored and an observed_at for the real time of the update it just saw. Reusing the key replaces that watch's deadline, so a late or duplicate copy of an older update cannot postpone an alert or wake the agent twice. Setup shows each armed deadline, and says when a missing-update check has none yet.

  • A value already saved in a resource field on a tool-provider node now limits the agent to that value. An account, chat, or channel pinned on the node is enforced when the agent calls the tool, not just offered as a default it could replace. Changing it applies on the agent's next turn.

  • You can reconnect a saved Claude account in place. With the connection selected, the button reads Reconnect selected Claude account and the sign-in refreshes that connection instead of adding another. Where one saved connection exists and none is selected, Use saved connection attaches it in a click. If your plan's credential limit is already reached, NoClick says so before sending you to claude.ai, rather than after you have spent a one-time authorization code.

  • The AI builder can see which accounts are already connected when you ask it to edit or autofill. The snapshot it works from used to leave out each node's attached account, along with whether the node was disabled or holding a test output, so it could ask you to connect something you had already connected.

  • Fields that do not apply to the account you connected are hidden. A WhatsApp trigger on a QR connection no longer shows Verify Token (Optional), which only the Cloud API uses, and the trigger's Webhook URL is read-only, since NoClick fills it in.

  • A WhatsApp disconnection email waits for the link to stay down. A restart at the provider flaps every connection for well under a minute, and you used to be told to re-scan a link that was about to come back, which adds a second device link to the phone. NoClick now waits out a short blip before it checks, and if the connection recovers after an email went out, a follow-up tells you it healed itself and not to re-scan.

  • Several messages arriving at once no longer disturb an agent whose sandbox is still starting. A burst delivered while the agent was cold could stop the sandbox mid-start and lose the turns attached to it.

  • A turn lost because its sandbox was replaced is now recorded as a failed run with the reason, instead of sitting in history looking delivered.

  • A CLI agent with no account connected says which credential it needs. It used to fail with a message about model and tool limits, which pointed at the wrong thing.

Switch models and keep the conversation

Moving an agent between Claude Code, Codex, OpenCode, OpenClaw, and Hermes used to end the thread it was on. Your next message started a new conversation with the recent turns pasted in as background. The conversation now moves into the harness you picked and carries on: the same thread, with each tool call still paired to what it returned, so the agent resumes where it left off rather than reading a summary of it.

  • Any of the five CLI agents can hand a conversation to any of the others. The built-in LLM agent keeps its history in NoClick rather than in a session store of its own, so switching between it and a CLI agent still carries the recent turns across as context, about 4,000 characters of them, trimmed from the oldest end.
  • Picking a thread in History now only opens it. It used to set the agent's Model to whatever that thread last ran on, changing the model you were about to run without telling you. The model stays the one you picked, and your next message runs it on the thread you opened.
  • History rows no longer carry a tag naming the harness a thread ran on.
  • The first message after a harness switch starts a new sandbox, so it takes longer than a follow-up. Messages after it are back to warm-sandbox speed.

Agents read the event, not the envelope

A trigger wired into an agent used to hand it everything the service sent. A Slack message arrived as the whole delivery around it: verification tokens, authorization blocks, and a second copy of the text in Slack's own block format. The agent now reads a short account of what happened instead: the service and the kind of event, who it came from and where, the content itself, and the IDs it needs to reply in the right place.

  • The triggers agents are usually wired to each write their own account of an event: Slack, Discord, Telegram, WhatsApp, inbound email, Gmail, Outlook, GitHub, GitLab, Linear, Jira, Notion, Trello, Asana, ClickUp, monday, Google Calendar, Forms, Sheets and Drive, Typeform, HubSpot, Shopify, Zendesk, Intercom, Stripe, Calendly, PagerDuty, Sentry, PostHog, Datadog, Honeycomb, Mailgun, Resend, Loops, schedules, and plain webhooks. Any other trigger gets the general shaping: the delivery wrapper opened, empty and internal fields dropped, and the rest held to a readable size.
  • In the agent's chat, a turn that a trigger started is shown as the message that started it, laid out the way that app lays it out, under a caption naming the app, the node's label if you gave it one, and the trigger, for example Slack · Support channel · On app mention. Where a message view does not fit, such as a schedule tick, the account the agent read is shown with the event itself behind an Event payload toggle.
  • The thread takes its name from the event, so the history list reads as the channel or the sender the message came from. Your standing instructions stay in the Message field, rather than appearing in the chat as a message you never sent.
Improvements and fixes1
  • Facebook triggers check every delivery. Verify Token and App Secret are both required now: Meta's subscription handshake completes only when the token matches, and an event is accepted only when its signature checks out against the app secret. Fill in both on any Facebook trigger that is missing one, or it stops receiving events. Verify Token is masked like a password.

A missing value stops the step

A required field holding a reference like {{ $('trigger').chat_id }} used to be passed on as an empty value when the referenced output had no such key. The step reported success and nothing arrived. That field now fails the step, and the error names the field, the reference, and the keys the referenced node's output actually has, so you can fix it without opening the run.

  • The error reads Required field 'to' is empty, followed by what went wrong: the referenced node has no key by that name, and the list of keys it does have. A key that exists but holds null is reported as null, which reads differently and usually means a different fix.
  • A reference read during a manual run of a trigger that waits for events says there is no live event in this run, and that firing the workflow for real is how to test that path.
  • Optional fields are unchanged. A reference that resolves to nothing there leaves the field at its default, as before.
  • Sending a WhatsApp message to an empty recipient stops with a message naming the chat id to reference instead, rather than being accepted and never delivered.
Improvements and fixes4
  • Fields that take a yes or no answer are a dropdown. They used to be an open text box that accepted any wording and then failed the run on wording the step could not read. The dropdown offers Yes, No, and the field's own default, and a field holding a {{ }} reference keeps the text box.

  • The AI builder checks references against your real data as it writes them. When it fills a field with a reference to a key that node's output does not carry, it is told so along with the keys the output does have, both as it writes the field and before it finishes, so a workflow it hands you is less likely to fail on its first run.

  • Ask the builder what a step returned on a run that failed at that step, and it reports the error the run recorded instead of asking you to run the node first.

  • The builder can add an Alarm or Filesystem node when you ask for one. Neither was in the list of nodes it could see, so asking it to let an agent schedule its own wake-ups used to get the answer that no such node exists.

A Slack trigger tells you when it cannot hear the channel

Slack sends channel events only to apps that are members of the channel. A trigger on a channel NoClick was never invited to used to read Active and never fire. Registration now checks, and the trigger's Status field carries the verdict. When the app is not in the channel, the status turns amber and says so, with a Join #channel button next to it on a public channel. A private channel names the invite to run instead, since only a person can add an app to one.

  • The node is marked incomplete on the canvas, counted by the incomplete pill at the bottom left, and named in the Setup tab. It never holds up a run you start yourself, because a manual run does not wait for Slack to deliver anything.
  • Your Dashboard lists it under Needs you as not receiving events, with that same fix as the button on the row and Open trigger next to it. Open trigger now opens the workflow with the trigger selected and its settings showing.
  • Ask the AI builder why a workflow is not running and it reads the same verdict, so it answers that the trigger is registered but not receiving events rather than calling it active.
  • A check that cannot reach Slack changes nothing. A trigger is never called broken on a failed check.
Improvements and fixes5
  • A Discord message trigger can watch a whole category. Pick one in Channel and messages in every channel under it, and in the threads opened in those channels, start runs. Categories now read as Name (category) in the picker and are ordered the way Discord's sidebar orders them, so a category is no longer mistaken for a channel and left silent.

  • A Slack message that started a run is shown as a Slack message in the run results What came in frame: the channel it was posted in, who posted it, the time, and the text with mentions, channel links, and link labels written the way you read them in Slack. A bot post's attachments and the names of shared files are part of what came in, a reply is marked as being in a thread, and a channel notice such as someone joining reads as that notice instead of an empty message.

  • Connecting Instagram completes again. The connect window now reports success only once the connection is saved, an authorization that Instagram cut off from the page that opened it still lands, and cancelling and clicking Connect again starts a fresh attempt. New connections use Instagram's own sign-in, and Instagram accounts you connected through Facebook keep working as they are.

  • Create Comment Thread and Create Reply on Canva designs post your text again. Both were stopping with an error about a missing message field.

  • A new PostHog connection asks for everything the node uses: reading groups, reading and writing organization members, and writing session recordings. PostHog was dropping those permissions because NoClick declared them under a name PostHog does not read. Reconnect a PostHog credential you connected earlier to pick them up.

Reddit posts come back whole

Get Subreddit Posts reads Reddit directly now. Each post comes back with its full text and HTML, permalink, creation and edit times, score, total comment count, flair, media links, and the community's URL, description, and member count. It still needs no connected Reddit account, and it still runs on your credits.

  • Set Fetch Comments to Yes for a sample of comments and their nested replies, sized by Comments per Post (1 to 100, 10 by default). num_comments stays the total Reddit reports for the post, and comment_count counts what actually came back.
  • Time Period applies to top and controversial sorting on every read. Content Detail and Proxy Mode are gone, and steps you already saved keep running on the new reader.
  • A read that fails or comes back incomplete fails the step, instead of reporting success with nothing in it.
Improvements and fixes3
  • The Instagram and LinkedIn scraping steps fail the same way. A scrape that fails, is cut short, or returns records the node cannot read stops the run and names the reason, rather than handing an empty list to the next step.

  • A message that arrived with a photo, video, voice note, or document keeps it in the run results What came in frame. Pictures and video show in the bubble, a voice note gets a player you can listen to, and a document shows as a chip with its filename. A shared location or contact card reads as one line naming the place or the person, and a WhatsApp sender's phone number is shown in place of an opaque id.

  • The AI builder can read what earlier runs stored. Ask what a trigger received or what a step returned, and it lists that node's recent outputs newest first, then opens the run it needs. A trigger with nothing stored says no delivery has been recorded, and an output left behind by a manual run of a waiting trigger is marked as such.

A failing schedule pauses itself

A scheduled workflow that kept failing the same way used to mint another failed run on every tick, for as long as the schedule ran. NoClick now pauses it: when the last five runs from that schedule have all failed with an identical error, spread over at least 30 minutes, the trigger node is switched off and the schedule stops.

  • You get one email naming the workflow, the paused trigger, the error, and when it was paused. Paused schedules is its own toggle in Settings → Notifications, and you get at most one of these per trigger per day.
  • The paused trigger appears on your Dashboard under Needs you and on the Triggers card, named and marked as paused with the error next to it. A trigger you switched off yourself stays hidden, as before.
  • Fix what the error names, then enable the trigger node again to resume the schedule. If the same failure comes back, the schedule pauses again on the first repeat.
  • Running out of credits never pauses a schedule. Topping up resumes the runs on its own.
  • A short provider outage does not reach the bar: the failures have to be identical and sustained for half an hour.
Improvements and fixes5
  • Pressing Run on an integration node that is wired as a tool provider no longer fails with an error about a missing action. The button is off, and says the node provides tools and its actions run when the agent or your MCP client calls them. Run the agent instead. Asking NoClick to run that node from an MCP client gets the same explanation back.

  • A step inside a loop that fails is recorded as failed. Some failures were read as successes, so the loop carried on with the failed step's output and stored it as that item's result.

  • A loop stops when your credits run out, including loops nested inside another loop, instead of working through the rest of the items and failing each one.

  • The nodes on a loop's After Loop handle run once. A loop nested inside another loop could run them a second time.

  • Agents that run on a saved model credential work again. Since the previous release, an agent using an OpenRouter key or a Codex, Claude Code, or OpenCode sign-in failed at the start of every run with an error about its credential type.

Instagram comments and messages start runs

The Instagram node has two new triggers, On Comment and On Message. A comment someone leaves on the connected account's posts, or a direct message they send it, starts a run as it arrives. Both need the Login connection, and Instagram pushes each event to NoClick signed, so nothing is polled.

Leave the filters blank to listen across the whole account, set Media ID on On Comment to watch one post, or Sender ID on On Message to hear one sender. Comments the account wrote itself and echoes of messages it sent are skipped, so a reply your workflow posts cannot start it again. Running either step by hand reports that no event was delivered, because events reach the workflow through the trigger.

Improvements and fixes6
  • Instagram's new Get Comment operation reads one comment by its ID, with the author and the post it sits on. Reading a single comment used to mean listing every comment on the post and picking it out.

  • List Conversations in Instagram takes a Participant ID, the Instagram-scoped ID of one person, and returns the direct message conversation with them instead of the whole list.

  • Publish Photo Post waits for Instagram to finish fetching your image before it publishes. Publishing could fail with a message saying the media was not available, because a photo container is not ready the moment Instagram hands back its ID. Reels already waited this way.

  • Signing in with Instagram's Login option finishes and saves the connection, and NoClick can refresh it later. Connecting could stop with nothing saved.

  • An Instagram Login connection is treated as one everywhere it is used, including when an AI agent calls an Instagram operation as a tool. Its token could be sent to Facebook's API instead, which rejects it.

  • Sending an agent a second message while it is still working no longer leaves it stuck as working. When the agent takes several messages into one turn, the reply is matched to the messages it actually read, and Inputs consumed in the run's results lists them.

Improvements and fixes3
  • The Codex model dropdown lists the models the pinned Codex CLI's own picker serves, in the order Codex ranks them. Models OpenAI has hidden or retired are no longer offered, and an agent already saved on a retired model keeps running.

  • The Claude Code model dropdown lists every alias the CLI publishes, with the one it recommends first, so fable is offered alongside opus, sonnet, and haiku. New agents start on sonnet.

  • Both CLI dropdowns show plain model ids again. The Codex labels had picked up Codex's one-line model descriptions, which the picker printed a second time under each row and the closed field repeated as a sentence.

Improvements and fixes3
  • A Discord Bot Install credential whose bot is still in your server reads as connected again. Working Discord connections were being labeled Disconnected in the credential picker and flagged on the node's Credentials tab, with WhatsApp re-scan instructions under them. A Discord connection the bot really has been removed from is still reported.

  • When a connection really has dropped, the message on the node's Credentials tab now says how to repair that connection: re-scan the QR code for a WhatsApp credential, or add NoClick's bot back to the server for a Discord one. It used to give WhatsApp instructions whatever the connection was.

  • The Codex model list offers OpenAI's newest models. The list comes from the Codex CLI that runs in the sandbox and picks up new model ids as OpenAI ships them, so nothing to change on your side.

Improvements and fixes2
  • A Discord On Channel Message or On Bot Mention trigger scoped to one channel now fires for messages posted in the threads opened in that channel. Discord delivers a thread message under the thread's own id, so a reply inside a thread the agent had started was measured against the channel id and dropped. Leaving Channel empty was the only way to hear those replies.

  • A message from a thread names the thread and the channel it sits under, and tells the agent where to read the thread's earlier messages before it answers. The thread stays its own conversation, as it did before.

The Feed is now a Dashboard

The Feed tab in the top navigation becomes Dashboard: one page for what is happening across your workspace, with a card for each area and a full page behind every card. Needs you replaces the approvals queue and now also carries questions the AI builder parked, edits an agent proposed to its own workflow, accounts someone still has to connect, connections that stopped working, and triggers that failed to register. You answer each one where it sits, with the same fields and pickers the workflow itself would show you.

The other cards are Runs, Agents, Upcoming, Files, Credentials, Triggers, Credits, and Notifications. Press G then D to open the Dashboard, or G then I to land on Needs you.

  • Runs charts the last 14 days and lists your workflows by run count, with failures called out. Click a row to open that workflow, or a single run to see its results.
  • Files gathers workflow uploads, agent workspaces, and the builder's scratch folder in one place, previews images, video, audio, and datasets without leaving the page, and lets you upload or delete wherever you have write access.
  • Agents shows sandboxes that are up now and each agent's latest turns, with the message that came in, the messages the agent sent, and every tool call it made.
  • The section you drilled into is remembered while you visit other tabs. The back button, browser Back, or Esc leaves it.

Discord messages can start an agent

The Discord node has two new triggers, On Channel Message and On Bot Mention, and a message reaches your workflow within seconds of being posted. Connect Discord with the Discord Bot Install credential so NoClick's bot is in your server, then leave Channel empty to listen to the whole server or pick one channel. Ignore bot messages is on by default, so posts from other bots and webhooks do not wake the agent. Each channel and thread is its own conversation.

  • A Discord message in run results reads as a message: who wrote it, the channel and server by name, mentions as names, and attachments by filename. A slash command reads as its invocation.
  • A Test Run on a Discord-triggered agent ships a written Channel question situation, so the rehearsal looks like a real Discord message instead of a generic sample.
  • An On Slash Command trigger fires only for the server its connection was installed into. A connection made with your own bot token still covers every server that bot is in.
  • A Discord connection reads as disconnected once the bot is removed from its server, in the credential picker, in workflow validation, and to an agent asking about its own workflow, with reconnecting named as the fix.
Improvements and fixes4
  • A Microsoft work or school account in an organization that does not let people approve apps for themselves can now be connected. Under the Connect button on any Microsoft node, an admin clicks approve NoClick for your organization, and Microsoft grants the permissions once for the whole directory. Everyone else connects normally afterwards, and the Need admin approval error now points at that button.

  • The disconnection email covers every connection type NoClick can check, not just WhatsApp, and names what to reconnect. A Discord server that removed the bot gets its own email, once per connection per day at most.

  • Uninstalling NoClick from a Shopify store marks that store's connection as disconnected instead of leaving it looking healthy. Installing again from the Shopify App Store reconnects the same connection, and the permissions NoClick records are the ones Shopify actually granted.

  • The After Cursor field on Shopify's GraphQL product, order, customer, and collection queries works. Those queries also return the page information Shopify sends back, so you can page through more results than one call returns.

Improvements and fixes4
  • The What came in section of a run's results shows the message the agent turn actually took in. A turn from a chat agent could show something else there: a note left behind by an earlier manual run, or a message from a different conversation. When several messages feed one turn, the section marks the one it shows as the latest of them, and Inputs consumed carries the rest.

  • A manual run of a trigger that waits for an incoming event now reads as one line saying nothing was delivered. The explanation used to appear as a message, as though someone had sent it.

  • Also ran counts only the nodes that ran. A node the run read data from without running it, such as a file upload left disconnected on the canvas, no longer appears there.

  • An agent turn that never comes back shows in your run history as a failed run, with an error saying the turn was lost and that sending another message retries it. Those turns used to leave no run behind at all.

Improvements and fixes2
  • A Slack or WhatsApp agent that stopped reacting to messages works again. NoClick caps how many runs one channel or chat can start in a five minute window, so a reply loop with another bot cannot run away, and that counter could stop resetting. Once it did, every later message in that conversation was accepted and then dropped, with no run in Logs to show for it. The counter now rolls over as intended, and one that is already stuck clears itself on the next message.

  • The working indicator in an agent chat stops when the answer does. A finished turn could keep the agent showing as working under a reply that had already arrived in full, and it stayed that way until you reloaded the page.

Earlier