{"id":50555869,"url":"https://github.com/mobigent/mobigent","last_synced_at":"2026-06-04T07:00:43.683Z","repository":{"id":360256574,"uuid":"1249347289","full_name":"mobigent/mobigent","owner":"mobigent","description":"Make mobile apps agent-ready with safe, typed AI capabilities.","archived":false,"fork":false,"pushed_at":"2026-06-02T12:38:35.000Z","size":840,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-02T13:25:24.757Z","etag":null,"topics":["ai-agents","mcp","mobile","openapi","react-native","sdk","typescript"],"latest_commit_sha":null,"homepage":"https://mobigent.github.io/mobigent/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mobigent.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-25T15:51:40.000Z","updated_at":"2026-06-02T12:38:48.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/mobigent/mobigent","commit_stats":null,"previous_names":["mobigent/mobigent"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mobigent/mobigent","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mobigent%2Fmobigent","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mobigent%2Fmobigent/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mobigent%2Fmobigent/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mobigent%2Fmobigent/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mobigent","download_url":"https://codeload.github.com/mobigent/mobigent/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mobigent%2Fmobigent/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33893323,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-04T02:00:06.755Z","response_time":64,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-agents","mcp","mobile","openapi","react-native","sdk","typescript"],"created_at":"2026-06-04T07:00:40.556Z","updated_at":"2026-06-04T07:00:43.634Z","avatar_url":"https://github.com/mobigent.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Mobigent\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/brand/mobigent-mark.svg\" alt=\"Mobigent logo\" width=\"96\" height=\"96\"\u003e\n\u003c/p\u003e\n\n**Make mobile apps agent-ready.**\n\nMobigent is an open-source SDK that lets AI agents use mobile app functions the same way your backend uses Firebase Cloud Messaging: install a client package, install a backend package, pass typed data, and let the SDK handle the bridge.\n\nYour app exposes normal functions agents are allowed to use:\n\n- plain functions such as `expense.list()` and `expense.create()`\n- optional `read()` and `write()` wrappers when you want schemas, descriptions, or approval text\n- `screen()` functions for focusing important UI\n- `mobigent.emit()` for app activity\n- confirmation callbacks for sensitive writes\n\nThe result: agents get a clean interface, users stay in control, and your app decides exactly what is possible.\n\n## The Simple Model\n\nMobigent has two normal packages:\n\n- **App package**: `@mobigent/app` lives inside the mobile app and exposes app functions.\n- **Backend package**: `@mobigent/backend` lets your backend call those app functions and handles the agent-facing service.\n\nThe app side does not need a setup command. Install the package and expose the functions your app already owns. No `npx mobigent-init` is needed for a real app. That command is only a sample-file generator.\n\nUse the same app id on both sides, like a normal mobile/backend integration:\n\n```bash\nnpm install @mobigent/app\nnpm install @mobigent/backend\n```\n\nThe app developer writes ordinary app functions and creates one app SDK object:\n\n```txt\nconst mobigent = createApp({\n  appId: \"com.acme.expenses\",\n  functions: {\n    expense: {\n      list: async () =\u003e listExpenses(),\n      create: async (input) =\u003e createExpense(input)\n    }\n  }\n})\n\nexport default mobigent.with(App)\n```\n\nThe backend developer starts Mobigent like backend plumbing and calls app functions from a small object:\n\n```ts\nimport { startMobigent } from \"@mobigent/backend\";\n\nconst backend = await startMobigent({\n  appId: \"com.acme.expenses\",\n  appName: \"Acme Expenses\"\n});\n\nawait backend.functions.expense.create({ merchant: \"Coffee\", amount: 8 });\n```\n\nFor local development, Mobigent can infer starter values when you leave the app id out, but real apps should pass the same stable `appId` in the app and backend.\n\nFor a non-React host or local demo, use the same app SDK object:\n\n```ts\nconst backend = await startMobigent({\n  appId: \"com.acme.expenses\"\n});\n\nawait mobigent.connect(backend);\n```\n\nEverything else, connection URLs, sockets, tokens, registration loops, provider mapping, confirmations, retries, audit events, agent setup, and inspector wiring, is SDK plumbing.\n\n## Quick Start\n\nAfter npm publishing is enabled, the first run is:\n\n```bash\nnpm create mobigent-app@latest my-demo -- --install\ncd my-demo\nnpm run dev\n```\n\nCurrent public fallback until npmjs publishing is connected:\n\n```bash\nnpm exec --yes \\\n  --package https://github.com/mobigent/mobigent/releases/download/v0.1.15/create-mobigent-app-0.1.15.tgz \\\n  -- create-mobigent-app my-demo --package-source github-release --install\ncd my-demo\nnpm run dev\n```\n\nThat opens a visible app beside an agent playground. Click **Run agent request** and Mobigent calls the app's `expense.create` function, asks for approval in the app host, and adds a new row to the app state. In another terminal, run `npm run doctor` to confirm everything is healthy, then `npm run agent:local`, `npm run agent:openapi`, or `npm run agent:chatgpt` for copy-paste agent setup.\n\nWhen you are ready to adapt it, start with `src/capabilities.ts`. That is the small file that owns the sample app functions.\n\nWorking from this repo? Create the same starter locally:\n\n```bash\nnpm run starter:new -- my-demo --install\ncd my-demo\nnpm run dev\n```\n\nWorking from this repo? Run the local demo:\n\n```bash\nnpm install\nnpm run demo:app\n```\n\nThat first run is the whole idea: agents do not tap screens or guess UI. Your app exposes safe functions, and Mobigent lets agents call them.\n\n## The Boring Integration Path\n\nIn the app:\n\n```bash\nnpm install @mobigent/app\n```\n\nThen create one Mobigent file and wire it once:\n\n```ts\nimport { createApp } from \"@mobigent/app\";\n\nexport const mobigent = createApp({\n  appId: \"com.acme.expenses\",\n  functions: {\n    expense: {\n      list: async () =\u003e ({ items: await listExpenses() }),\n      create: async (input) =\u003e createExpense(input)\n    }\n  }\n});\n```\n\nMobigent treats `list`/`get`/`read`/`fetch`/`search`/`load` functions as reads. Other plain functions are writes and require confirmation by default. When you want validation or custom approval copy, wrap that one function:\n\n```ts\nimport { write } from \"@mobigent/app\";\n\ncreate: write(createExpense, {\n  input: { merchant: \"string\", amount: \"number\" },\n  confirm: \"Create expense?\"\n})\n```\n\n```tsx\nimport { mobigent } from \"./mobigent\";\nimport App from \"./App\";\n\nexport default mobigent.with(App);\n```\n\nIn the backend:\n\n```bash\nnpm install @mobigent/backend\n```\n\nThen backend code can call app functions like ordinary functions:\n\n```ts\nimport { startMobigent } from \"@mobigent/backend\";\n\nconst mobigent = await startMobigent({\n  appId: \"com.acme.expenses\",\n  appName: \"Acme Expenses\"\n});\n\nawait mobigent.functions.expense.create({ merchant: \"Coffee\", amount: 8 });\n```\n\nSee [docs/simple-integration.md](./docs/simple-integration.md) for the clean path before reading advanced docs.\n\nFor an existing React Native app, the intended npm path is:\n\n```bash\nnpm install @mobigent/app\n```\n\nCurrent public fallback:\n\n```bash\nnpm install \\\n  https://github.com/mobigent/mobigent/releases/download/v0.1.15/mobigent-core-0.1.15.tgz \\\n  https://github.com/mobigent/mobigent/releases/download/v0.1.15/mobigent-react-native-0.1.15.tgz \\\n  https://github.com/mobigent/mobigent/releases/download/v0.1.15/mobigent-app-0.1.15.tgz\n```\n\nFor a backend/server app, the intended npm path is:\n\n```bash\nnpm install @mobigent/backend\n```\n\nCurrent public fallback:\n\n```bash\nnpm install \\\n  https://github.com/mobigent/mobigent/releases/download/v0.1.15/mobigent-core-0.1.15.tgz \\\n  https://github.com/mobigent/mobigent/releases/download/v0.1.15/mobigent-providers-0.1.15.tgz \\\n  https://github.com/mobigent/mobigent/releases/download/v0.1.15/mobigent-gateway-0.1.15.tgz \\\n  https://github.com/mobigent/mobigent/releases/download/v0.1.15/mobigent-backend-0.1.15.tgz\n```\n\nPrefer generated sample files? Use `mobigent new my-demo --install`. The app-side init command is demo scaffolding, not required integration.\n\n## Install Packages\n\nUntil npmjs.com publishing is connected with an `NPM_TOKEN`, packages are published from tagged releases to GitHub Packages and attached to GitHub Releases.\n\nInstall the app SDK directly from public release tarballs:\n\n```bash\nnpm install \\\n  https://github.com/mobigent/mobigent/releases/download/v0.1.15/mobigent-core-0.1.15.tgz \\\n  https://github.com/mobigent/mobigent/releases/download/v0.1.15/mobigent-react-native-0.1.15.tgz \\\n  https://github.com/mobigent/mobigent/releases/download/v0.1.15/mobigent-app-0.1.15.tgz\n```\n\nOr install from npmjs after npm publishing is connected:\n\n```bash\nnpm install @mobigent/app\nnpm install @mobigent/backend\nnpm install -D mobigent\n```\n\nMaintainer note: npmjs publishing is tracked in [docs/npm-publishing.md](./docs/npm-publishing.md). The release workflow supports either `NPM_TOKEN` or npm Trusted Publishing through GitHub Actions OIDC.\n\n## Add It To An Existing React Native App\n\nInstall the app package:\n\n```bash\nnpm install @mobigent/app\n```\n\nUse one stable app id and reuse it in the backend. For quick local experiments, the app SDK can use safe local defaults.\n\nCreate one Mobigent file and one app SDK object:\n\n```ts\nimport { createApp } from \"@mobigent/app\";\n\nexport const mobigent = createApp({\n  appId: \"com.acme.expenses\",\n  functions: {\n    expense: {\n      list: async () =\u003e ({ items: await listExpenses() }),\n      create: async (input) =\u003e createExpense(input)\n    }\n  }\n});\n```\n\nWrap the app once:\n\n```tsx\nimport { mobigent } from \"./mobigent\";\nimport App from \"./App\";\n\nexport default mobigent.with(App);\n```\n\nMobigent handles names, validation, confirmation, connection lifecycle, backend communication, and event queueing.\n\nNeed another app area later? Add another namespace inside `functions`.\n\nNo app-side init command is required. Starter generation is only for demos.\n\nFor production, pass the same `appId` in the app and backend. If `mobigent.app.json` exists, the app package can still use it, but a generated config file is not required.\n\nIf you are wiring a Node demo, test host, or another non-React runtime, use the same app SDK object:\n\n```ts\nimport { startMobigent } from \"@mobigent/backend\";\nimport { mobigent } from \"./mobigent\";\n\nconst backend = await startMobigent({\n  appId: \"com.acme.expenses\"\n});\n\nawait mobigent.connect(backend);\n```\n\n## Add It To A Backend\n\nInstall the backend SDK:\n\n```bash\nnpm install @mobigent/backend\n```\n\nStart Mobigent from your server code:\n\n```ts\nimport { startMobigent } from \"@mobigent/backend\";\n\nconst mobigent = await startMobigent({\n  appId: \"com.acme.expenses\",\n  appName: \"Acme Expenses\"\n});\n\nconsole.log(mobigent.inspectorUrl);\nconsole.log(mobigent.openApiUrl);\n```\n\nThe app and backend pair by `appId`. For local experiments, `startMobigent()` can infer a starter app id from the project name, but a real app should pass a stable id.\n\nOptional local helper: pass `appDir: \"../mobile-app\"` only when you want the backend to write `mobigent.app.json` and `src/mobigent-config.ts` into an existing app project. The normal path does not need generated config files.\n\nPrefer a generated backend entrypoint? `npx mobigent-backend --app com.acme.expenses --app-name \"Acme Expenses\"` is still available as an optional scaffold.\n\nFor the fastest first run, this also works:\n\n```ts\nconst mobigent = await startMobigent();\n```\n\nThat one function starts Mobigent, routes app function calls, infers a local app id for demos, and exposes the local inspector for debugging.\n\nCall app-owned functions through a normal backend object. Mobigent waits for the app connection when the function is called:\n\n```ts\nawait mobigent.functions.expense.create({ merchant: \"Airport Taxi\", amount: 42.25 });\nawait mobigent.functions.expense.list();\n```\n\nUse `waitForApp()` only when you want an explicit startup health gate:\n\n```ts\nawait mobigent.waitForApp();\n```\n\nFor quick one-off calls, use `mobigent.call(\"expense.create\", input)`. For reusable single-function aliases, use `mobigent.fn(\"expense.create\")`.\n\nIt also gives you agent setup from the same backend object:\n\n```ts\nconsole.log(mobigent.agent(\"chatgpt\").endpoints.openApi);\nconsole.log(mobigent.agent(\"claude\").guide);\n```\n\n## Connect An Agent\n\nStart the backend:\n\n```bash\nnpm run dev\n```\n\nThen inspect the app functions:\n\n```bash\nopen http://localhost:8788/inspect\n```\n\nFor the friendliest local loop, use the visible demo instead:\n\n```bash\nnpm run demo:app\n```\n\nThat single page includes the app UI, an agent request box, the function result, and a link to the inspector.\n\nUse `mobigent.agent(\"chatgpt\")` for ChatGPT Actions setup, `mobigent.agent(\"claude\")` for Claude Desktop setup, or `mobigent.agent(\"openai\")` for server-side OpenAI Responses setup.\n\nAdvanced local agent clients can still use MCP:\n\n```bash\nnpm run dev:mcp\n```\n\n## Packages\n\nMost apps start with two packages:\n\n- `@mobigent/app`: app SDK for `createApp()`, app functions, app events, and React Native wrapping\n- `@mobigent/backend`: backend SDK for `startMobigent()`, `mobigent.functions.expense.create(...)`, inspector, agent HTTP, and app connections\n\nUseful extras:\n\n- `mobigent`: optional CLI for creating starters and printing agent setup\n- `create-mobigent-app`: one-command starter app with backend, inspector, visible app, and agent playground\n- `packages/ios`: native Swift Package for iOS apps\n- `packages/android`: native Kotlin/Android SDK\n\nAdvanced internals:\n\n- `@mobigent/core`: protocol and shared types\n- `@mobigent/gateway`: lower-level internal bridge package for custom hosting, HTTP/OpenAPI, and MCP\n- `@mobigent/providers`: provider setup helpers behind `mobigent.agent(...)`\n\n## Examples\n\n- `examples/expense-app`: sample mobile app capabilities\n- `examples/ios-expense`: native Swift example\n- `examples/android-expense`: native Kotlin/Android example\n- `examples/agent-server`: OpenAI, Anthropic, Gemini, Bedrock, Vercel AI SDK, and mock agent examples\n\n## Documentation\n\n- Website: https://mobigent.github.io/mobigent/\n- Docs: https://mobigent.github.io/mobigent/docs.html\n- Flagship demo: [docs/flagship-demo.md](./docs/flagship-demo.md)\n- First run: [docs/quickstart.md](./docs/quickstart.md)\n- MCP setup: [docs/mcp.md](./docs/mcp.md)\n- ChatGPT Actions: [docs/chatgpt-actions.md](./docs/chatgpt-actions.md)\n- React Native guide: [docs/react-native.md](./docs/react-native.md)\n- iOS guide: [docs/ios.md](./docs/ios.md)\n- Android guide: [docs/android.md](./docs/android.md)\n- Capability design: [docs/capability-design.md](./docs/capability-design.md)\n- Security model: [docs/security.md](./docs/security.md)\n- Production gateway: [docs/production-gateway.md](./docs/production-gateway.md)\n- Hosted gateway and tunnels: [docs/hosted-gateway.md](./docs/hosted-gateway.md)\n- Native publishing plan: [docs/native-publishing.md](./docs/native-publishing.md)\n- npm publishing: [docs/npm-publishing.md](./docs/npm-publishing.md)\n- Developer workflow: [docs/developer-workflow.md](./docs/developer-workflow.md)\n\n## Developer Workflow Highlights\n\n- Open `http://localhost:8788/inspect` to see apps, functions, metrics, audit events, and backend snapshot data.\n- Run `npx mobigent app --security-doctor ...` before exposing a hosted gateway.\n- Use `fromZod()` or `fromTypeBox()` when you already have schemas.\n- Run `npx mobigent app --platform-actions json ...` to generate optional iOS App Intents and Android App Actions bridge plans.\n\n## Why Mobigent Exists\n\nMobile apps were not designed for agents. Today, most agent workflows depend on fragile UI automation, screenshots, and guessing.\n\nMobigent gives apps a real agent interface:\n\n1. Apps define functions.\n2. Agents discover the allowed functions.\n3. Calls are validated before they run.\n4. Risky actions require user confirmation.\n5. Every important event can be audited.\n\nIt is MCP-inspired, but built for mobile app control, app state, user approval, and native product workflows.\n\n## Project Status\n\nMobigent is an early developer preview. The proof of concept already includes:\n\n- React Native SDK APIs\n- Native iOS SDK\n- Native Android SDK\n- Local app/backend bridge\n- HTTP and OpenAPI support\n- MCP server support\n- User confirmation flow\n- Capability validation\n- Audit events\n- Provider examples\n- GitHub Pages docs site\n- Native CI workflow\n- Docker production gateway path\n\nThe goal is simple: make Mobigent the easiest way to build agentic mobile apps.\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmobigent%2Fmobigent","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmobigent%2Fmobigent","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmobigent%2Fmobigent/lists"}