Client Methods
SkillWeb & browsingThis skill guides your AI to wire browser code to your app's actions and state using named client methods instead of raw fetch calls. Once added, it shapes how the agent connects client code to app APIs, framework routes, uploads, auth, and settings, keeping that wiring consistent across your web project.
Available today. Use it from your connected AI after setup.
No other account needed.
Add the skill, then ask your agent to wire a feature's browser code to its actions or state. It will apply the client method rules wherever raw fetch calls would normally appear.
Then ask your AI: use the Client Methods skill
What your AI can do with it
- Wire browser code to app actions using named client methods
- Connect client code to application state
- Replace raw fetch calls with named methods
- Hook up uploads, auth, and settings through a consistent method surface
- Follow framework routes and app APIs when wiring client code
What this skill tells your AI
The instructions your AI receives, as published by builderio/agent-native in .agents/skills/client-methods/SKILL.md and read by ahel’s review.
Rule
Browser/client code imports named methods, hooks, or client modules instead of hand-writing REST calls to framework or app routes.
Why
Route shapes are transport details. If components and docs call
fetch("/_agent-native/...") or template /api/* routes directly, every caller
has to rediscover auth, base paths, request-source headers, JSON parsing, error
handling, optimistic updates, sync invalidation, and route quirks. A named client
method gives the UI, docs, and future agents one stable contract.
How
-
Look for an existing client API first.
Need Use App action reads/writes useActionQuery/useActionMutationfrom@agent-native/core/client/hooksImperative action calls callActionfrom@agent-native/core/client/hooksBrowser application state readClientAppState,writeClientAppState,setClientAppState,deleteClientAppStatefrom@agent-native/core/client/hooksNavigation/app-state sync useAgentRouteState/useSemanticNavigationStatefrom@agent-native/core/client/navigationAgent chat context Agent chat helpers from @agent-native/core/client/agent-chatAsk the user a multiple-choice question from app code askUserQuestionfrom@agent-native/core/client/agent-chat(renders inline in the agent panel; answer goes to the agent — do not build a custom modal)Live sync useDbSync,useChangeVersion,useChangeVersionsfrom@agent-native/core/client/hooksExtension iframe calls appAction,appFetch,extensionFetchfrom the extension runtimeAction fetch behavior: every
useActionQuery/useActionMutation/callActionrequest is bounded by a 60s timeout, and timeouts surface as errors instead of retrying silently.useActionQuerycancels superseded requests automatically via React Query's abort signal. For imperative calls,callAction(name, params, { method, signal, timeoutMs })accepts anAbortSignaland atimeoutMsoverride for legitimately long operations. -
If no client API exists, add the narrowest helper at the boundary.
- Put shared framework helpers in
packages/core/src/client/*. - Put template-local helpers in
templates/<app>/app/hooks/*,templates/<app>/app/lib/*, or an existing local client module. - Export reusable core helpers from the focused
@agent-native/core/client/*entry for their domain. Never recommend the deprecated broad@agent-native/core/clientbarrel in new code. - Keep raw
fetch,agentNativePath, and route paths inside that helper, not scattered through components or docs. - Add focused tests for URL construction, headers, response parsing, error shape, and any sync invalidation.
- Put shared framework helpers in
-
Teach the helper, not the route.
Docs, skills, examples, and generated code should show:
await setClientAppState("selection", selection, { keepalive: true });not:
await fetch("/_agent-native/application-state/selection", { method: "PUT", body: JSON.stringify(selection), });
Exceptions
Raw route calls are acceptable only inside low-level client helpers or for route-shaped protocols that cannot be hidden cleanly:
- multipart uploads
- streaming/SSE/WebSocket transports
- OAuth redirects and callback URL construction
- webhooks and external provider callbacks
- extension sandbox
appFetch/extensionFetch, which are themselves exposed client methods - tests that assert route construction
Even for exceptions, prefer a named helper as soon as more than one caller needs the behavior.
Don't
- Don't put
fetch("/_agent-native/..."),fetch(agentNativePath(...)), or template/api/*calls directly in React components for normal app data, actions, settings, or application state. - Don't document route calls as the way client code should do work.
- Don't add pass-through
/api/*routes just to make client fetches look simpler; expose an action and call it with action hooks. - Don't duplicate auth/session/base-path/request-source/error parsing logic in every component.
Related Skills
actions— app operations shared by UI and agent.context-awareness— application-state navigation and selection helpers.real-time-sync— keeping helper-backed UI reads fresh.server-plugins— when a new route is actually warranted.
References
references/legacy-client-fetch-audit-2026-06-03.md— known legacy cleanup targets found when this rule was added.
Signals
- GitHub stars
- 5k
- Forks
- 440
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
client-methods- Source
- github.com/builderio/agent-native