複数のアプリやMCPホストからブランド画像・動画を生成、調整、書き出し、挿入する作業を支援します。ライブラリ選択や修正依頼も扱います。
- スライド用のブランド画像を作りたいとき
- 既存素材をフィードバックに合わせて直したいとき
- 動画素材を生成して書き出したいとき
新機能をUI・エージェント用アクション・説明資料・画面状態の4領域でそろえ、利用者とエージェントのどちらからも一貫して使えるようにするチェックリストです。
The four-area checklist every new feature must complete. Use when adding any feature, integration, or capability to ensure the agent and UI stay in parity.
実行スコア 未検証
インストール方法を見るアプリに新しいデータや機能を加える際、UI、エージェントが呼び出すアクション、エージェント向けの説明、アプリ状態の同期という4領域を順に確認できます。画面だけ、またはスクリプトだけに機能が閉じないよう、利用者とエージェントの双方が同じ操作を行える構成を案内します。既存アクションの再利用、画面更新との同期、ナビゲーション状態の共有、認証情報や添付ファイルの扱いなど、実装時に検討する事項も含まれます。見た目の変更だけで新しいデータや操作がない場合は、関係する領域に絞る判断基準も示します。
新しい画面や連携機能を追加するとき、エージェントからの操作をUIへ反映させたいとき、アクションを追加したのにエージェントが使えない・画面から操作できないといった抜けを防ぎたいときに役立ちます。
機能に応じて@agent-native/coreのAPIや既存の共有機能を使います。認証情報はハードコードせず、既存の接続や保管機能を確認します。サーバー依存関係や認証方式などの選択は、関連するスキルやテンプレートの指示も参照します。
この紹介文は、公開されている SKILL.md をもとに AI(OpenAI Codex)が作成しました。正確な仕様は下の原文を確認してください。
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Every new feature MUST update all four areas. Skipping any one breaks the agent-native contract — the agent and UI must always be equal partners.
Scope check first: this is the checklist for a feature that adds app data or a new capability. A restyle, a copy change, or a screen with no new data model and no new agent-visible operation only needs the areas it actually touches — do not manufacture actions, state keys, or a skill for it.
Agent-Native apps are defined by parity: everything the UI can do, the agent can do, and vice versa. A feature that only has UI is invisible to the agent. A feature that only has scripts is invisible to the user. A feature without app-state sync means the agent is blind to what the user is doing.
When you add a new feature, work through these four areas in order:
Build the user-facing interface — a page, component, dialog, or route. Use useActionQuery and useActionMutation from @agent-native/core/client to call actions for data fetching and mutations. Do not create a custom REST endpoint just so React can call action-backed data; the action endpoint already exists.
Auto-refresh on agent writes is non-negotiable — when the agent mutates data, the UI must reflect the change without a manual refresh. There are two paths, and you must pick the right one:
useActionQuery / useActionMutation — covered automatically. The framework's useDbSync invalidates ["action"] on every change event, so every useActionQuery hook refetches on agent activity. No extra wiring required. Prefer this path.
Raw useQuery with custom keys — needs explicit wiring. Fold useChangeVersions([<source>, "action"]) from @agent-native/core/client into the queryKey and set placeholderData: (prev) => prev. The action source is the reliable signal (the agent runner emits it after every successful tool call); the resource-specific source ("dashboards", "analyses", "settings", etc.) is bonus when emitted. Without this wiring, agent writes will be invisible until manual refresh — that breaks the framework's #1 promise.
import { useChangeVersions } from "@agent-native/core/client/hooks";
import { useQuery } from "@tanstack/react-query";
const v = useChangeVersions(["dashboards", "action"]);
useQuery({
queryKey: ["dashboard", id, v],
queryFn: () => fetchDashboard(id),
placeholderData: (prev) => prev, // no flicker on refetch
});
See the real-time-sync skill for the full pattern and source catalog.
Create an action in actions/ using defineAction. This serves double duty: the agent calls it as a tool, and the UI calls it through useActionQuery / useActionMutation while the framework owns the HTTP transport. Set http: { method: "GET" } for read actions, leave default for writes, or set http: false for agent-only actions like navigate and view-screen.
Before adding a new route or endpoint, inspect the existing actions. Reuse an
action if it already covers the business operation, extend it if the shared
contract is incomplete, or create a new defineAction if the agent and UI both
need the capability. Do not add pass-through /api/* routes that re-export
actions. If client code needs a new framework/app route, expose a named helper
or hook first and use that helper from components and docs.
For provider-backed analysis/query/reporting integrations, do not turn every
provider endpoint or filter into a rigid action. Prefer the shared
provider-api-catalog / provider-api-docs / provider-api-request pattern
from @agent-native/core/provider-api, then add narrow convenience actions only
for workflows that truly deserve a first-class shortcut. Treat this as a
capability requirement, not a nice-to-have: convenience actions must not become
the ceiling of what the agent can ask the provider to do. Pair broad provider
access with staging or sandboxed code execution when responses may be too large
for chat context. If provider credentials live on resource/share rows, add the
scoped resolver first so broad access preserves the same ownership boundary as
the app UI.
If the feature needs credentials, design the credential path in the same change. Never hardcode API keys, tokens, webhook URLs, signing secrets, private Builder/internal data, or customer data in the action, UI, seed data, fixtures, docs, prompts, or generated extension/app content. Register required secrets, use OAuth helpers, or read scoped values from the vault/credential store.
Before writing custom setup or credential UI, perform the shared-primitive
preflight from agent-native-toolkit: inspect the workspace/provider connection
catalog first, then settings, secrets/vault, OAuth, onboarding, and provider API
support. Reuse an existing connection's app grant and scoped credential
resolver; only use app-local vault or OAuth primitives when no reusable
connection exists. Keep any wizard thin and provider-specific - it may explain
prerequisites, ordering, or readiness, but must not become a second vault or
custom credential transport. Do not mark each field required by reflex;
model onboarding around the logical connection outcome.
If the feature involves attachments, images, recordings, screenshots, exports,
or other file-like payloads, design the upload path in the same change:
provider upload first, then URL/id/blob handle in SQL. Do not add base64/binary
columns or stuff files into application_state.
If the feature adds a server-side dependency carrying a native binary or heavy
runtime — headless browser, ffmpeg, image/video processing, ML runtime — read
the performance skill §9 before adding it. A deployed app has one /* page
function that every visitor's cache miss wakes, and it ships whatever the server
bundle depends on. Run that work from a background function or a job so the page
function never carries the weight.
If the action produces or lists a navigable resource, add a link builder that returns { url: buildDeepLink({ app, view, params }), label }. External coding agents and MCP hosts (Claude / ChatGPT / Claude Code / Cowork / Codex, over MCP/A2A) then surface an "Open in … →" deep link that drops the user back into the running UI focused on the record — for free. If a compatible MCP host should render an inline review/edit surface, also add mcpApp with embedApp() so the action embeds the real React app route instead of a one-off HTML UI. The link builder and mcpApp metadata must be pure and synchronous (no I/O). Any external-agent read/ingest action must be http: { method: "GET" } + readOnly: true + publicAgent: { expose: true, readOnly: true, requiresAuth: true }. See the external-agents skill.
Scaffolding a new app of a known type (slides, design, content, forms)? Start from that template's AGENTS.md and .agents/skills/, not a blank app.
Update AGENTS.md and/or create a skill in .agents/skills/ if the feature introduces patterns the agent needs to know. At minimum, add the new actions to the action table in the template's AGENTS.md.
Reusable actions are part of the app contract, not just implementation detail. When an action is useful outside one screen, update agent instructions in the same change so app agents know when to call it, which arguments matter, and what output to preserve. If the capability is workflow-heavy, cross-app, provider-backed, or has a non-obvious sequence of actions, add or update a skill instead of burying the behavior in one long AGENTS.md paragraph.
Instruction examples may name secret keys like SLACK_WEBHOOK, but must use
placeholders such as ${keys.SLACK_WEBHOOK} or <SLACK_WEBHOOK>. Do not paste
real keys, internal data, or customer data into instructions as examples.
If the feature adds or changes visible UI copy, prompts, toasts, labels, empty
states, or formatting, update the English source copy. Read the optional
internationalization skill and update additional catalogs only when
translations.locales in agent-native.config.ts includes them.
For app-backed skills, declare skill visibility in the app-skill manifest:
internal — only the app's own agents should use it.exported — marketplace installs receive it, but the app does not need it loaded internally.both — shared between the app's internal agents and exported marketplace bundles.Expose navigation and selection state so the agent knows what the user is looking at. Write to the navigation app-state key on route changes. Update the view-screen action to fetch relevant data for the new feature. Add a navigate command if the agent needs to open the new view.
| Area | What to build |
|---|---|
| UI | Compose panel with tabs, to/cc/bcc fields, body editor. Use useActionQuery/useActionMutation for data. |
| Action | manage-draft action (create/update/delete drafts), send-email action |
| Skills/AGENTS | Document compose state shape, draft lifecycle, action args in AGENTS.md |
| App-state sync | compose-{id} keys for each draft tab, navigation includes compose state |
| Area | What to build |
|---|---|
| UI | Form builder page with drag-and-drop fields, preview, settings. Use useActionQuery for lists. |
| Action | create-form action, update-form action, list-forms action (GET) |
| Skills/AGENTS | Document form schema shape, field types, validation rules in AGENTS.md |
| App-state sync | navigation includes { view: "form-builder", formId: "..." }, view-screen fetches form data |
| Area | What to build |
|---|---|
| UI | New chart component, chart type selector in dashboard |
| Action | create-chart or update-dashboard action that sets chart type and config |
| Skills/AGENTS | Document supported chart types, config options, data requirements |
| App-state sync | navigation includes selected chart/dashboard, view-screen returns chart config |
Templates are single-page apps with client-side routing. The app shell (AgentSidebar + top-level nav) MUST persist across navigation — it is mounted once, either in root.tsx around <Outlet /> or via a pathless _app.tsx layout route that all authed routes nest under.
Never wrap each new route in its own <AppLayout> / <Layout>. That causes React to unmount the entire app shell on every navigation, reloading the agent sidebar and destroying in-progress work.
<AppLayout> in root.tsx — just render page content in your new route file, nothing else.app/routes/_app.tsx (pathless layout) — name your new route _app.<segment>.tsx to inherit the shell, or bare <segment>.tsx for public routes that should NOT have the shell.useParams() / useLocation(). Don't pass it as a prop through every route file.See the "Client-Side Routing" section in the root CLAUDE.md for full details.
<AppLayout> wrappers — Every route file wraps its content in <AppLayout> or <Layout>. React sees a different component at the outlet on each nav and unmounts the whole shell, causing the agent sidebar to reload on every click. Mount the shell once above <Outlet /> (root.tsx or _app.tsx pathless layout)./api/ routes for operations that actions already handle, including pass-through routes that just call or repackage an action. Use useActionQuery/useActionMutation instead.fetch("/_agent-native/..."),
fetch(agentNativePath(...)), or template /api/* calls in components for
normal app work. Add a named client helper/hook and call that instead.After completing all four areas, verify:
pnpm action view-screen show the relevant state when the user is using the feature?navigate action?If the feature stores user-authored resources (documents, dashboards, forms, decks, etc.), make them ownable so they get private-by-default semantics and a share dialog for free. See the sharing skill.
TL;DR: spread ownableColumns() into the resource table, pair it with createSharesTable(...), call registerShareableResource(...), wrap list/read queries with accessFilter, guard writes with assertAccess, and drop <ShareButton> in the resource header. The share-resource, unshare-resource, list-resource-shares, and set-resource-visibility actions are auto-mounted framework-wide.
If the feature is one only some teammates should be able to perform inside this app (an admin-only import, a settings reset), that is a per-app role — not a new organization, and not a share grant. See the authentication skill.
TL;DR: declare the vocabulary once with defineAppRoles({ appId, roles, defaultRole }), guard the action with authorize: appAccess.requireAny("..."), and render the picker with <TeamPage appRoles={descriptor} />. defaultRole is display only — it never satisfies a guard — and authorize gates the operation while accessFilter / assertAccess still scope the rows.
defineAppRoles) when only some teammates may use a featuredefineAction and the http option (area 2 in detail)link builder so external agents (MCP/A2A) get an "Open in … →" deep linkまだレビューはありません。使ってみた感想をお寄せください。
ログインなしで書き込めます。使ってみた感想、質問、動かなかった環境などを気軽にどうぞ。
まだコメントはありません。最初のコメントを書いてみませんか。
複数のアプリやMCPホストからブランド画像・動画を生成、調整、書き出し、挿入する作業を支援します。ライブラリ選択や修正依頼も扱います。
特定の顧客企業について、契約と製品利用の数値を照らし合わせ、根拠や不足情報を明記した健全性レポートをまとめます。
アプリの操作をエージェントと画面の両方から呼び出せるアクションとして実装し、API連携や画面のデータ取得を一貫した形で追加するスキルです。
複数のデータソースを照合して、傾向や指標、根拠をまとめた分析結果を作成します。必要に応じて、再実行できるダッシュボードとして保存できます。
Analyticsの管理画面で、機能フラグの状態確認と切り替え、ダッシュボード利用状況の調査、接続先アプリのデータベース管理を行います。
エージェントが使うAIモデルやプロバイダーを確認・切り替え、接続テストや独自エンジンの登録を行うための設定を支援します。