Flint SDK
对任何应用程序进行LLM结构化控制。Android、React Native或web。
Flint是一个SDK,它允许应用程序开发人员注释他们的代码,以便AI代理可以直接与应用程序交互:调用命名工具、读取结构化屏幕数据、按名称调用操作。没有截图解析,没有坐标猜测,没有DOM抓取。AI获取屏幕上内容的平面文本快照,调用具有键入参数的工具,并按名称对元素进行操作。
在具有三个传输层的三个平台上工作,所有平台都产生相同的输出格式。
三种连接方式
1.亚行直销(安卓,推荐)
最适合AI代理构建或测试Android应用程序。没有Hub应用程序,没有MCP服务器,没有额外的基础设施。就 adb shell content read 返回干净JSON的命令。该应用程序的ContentProvider处理一切。
adb shell content read --uri content://com.example.myapp.flint/read_screen返回结构化JSON。调用工具、阅读屏幕、调用操作。全部通过亚行。
看 docs/adb-mode.md 以获取完整的命令参考。
2.SDK本地服务器(React Native和Web)
对于React Native应用程序,Flint公开了 globalThis.__flint__ 通过Metro的CDP(Chrome DevTools协议)。对于web应用程序,同样的界面仍然存在 window.__flint__.AI代理评估JS表达式以读取屏幕和调用工具。
React Native:
npx flint-cdp read # read current screen
npx flint-cdp call search --params '{"query":"jazz"}'Web(浏览器控制台、剧作家、木偶师):
window.__flint__.readScreen()
window.__flint__.callTool("search", { query: "jazz" })看 docs/react-active-agent-guide.md 和 docs/web-agent-guide.md.
3.MCP Hub(安卓,生产/无线)
Flint Hub是一款在设备上运行MCP服务器的Android应用程序。显示25多种内置设备工具(点击、滑动、短信、通话、通知等)以及任何Flint SDK应用程序工具。MCP客户端通过WiFi连接。没有笔记本电脑,没有USB,没有ADB。
这是生产设备自动化、多应用程序工作流或需要单个应用程序之外的通用设备控制的正确选择。
AI看到了什么
无论平台或运输方式如何,输出都是一样的:
screen: home
heading: Sample Store
cartSummary: 0 item(s) in cart
products:
[0] name: Wireless Headphones | price: $79.99 | actions: view, add_to_cart
[1] name: Running Shoes | price: $129.99 | actions: view, add_to_cart
tools: view_product, go_to_cart一种格式。一个协议。人工智能不知道也不在乎它是通过ADB与Compose应用程序、通过CDP与React Native应用程序还是通过浏览器控制台与web应用程序进行通信。
为什么存在
LLM可以对UI进行推理,但他们不能触摸手机或与应用程序进行本地交互。现有的工具(剧作家MCP、计算机使用、移动MCP)通过抓取可访问性树或屏幕截图来工作。它们是通用的,但价格昂贵:每个会话约27K-114K代币,大量往返,基于坐标的脆弱交互。
弗林特采取了相反的方法。该应用程序声明了每个屏幕上的内容。AI会得到一个微小的结构化响应(约50-200个令牌),调用命名工具,并按名称调用操作。每次互动一次往返。
用例
QA和测试。 AI代理构建您的应用程序,通过ADB安装,查询Flint ContentProvider以验证屏幕内容和测试工作流程。没有嘲笑,没有浓缩咖啡,没有Appium。测试在真实设备上针对真实UI运行。
设备自动化。 MCP Hub为任何AI助手提供了完整的设备控制:发送消息、管理联系人、调整设置、启动应用程序。用户和代理通过自然语言自动化多应用程序工作流程。
AI原生应用程序。 集成SDK的应用程序可供任何AI助手直接访问。命名工具出现在助手的工具列表中。该应用程序使用人工智能的语言。
快速开始
安卓系统(Kotlin/Compose)
1.添加SDK:
// build.gradle.kts (app module)
plugins {
id("com.google.devtools.ksp")
}
dependencies {
implementation("com.flintsdk:runtime:1.0.0")
ksp("com.flintsdk:compiler:1.0.0")
}2.使用ADB模式初始化:
class MyApp : Application() {
override fun onCreate() {
super.onCreate()
Flint.init(this, adbMode = BuildConfig.DEBUG)
}
}3.通过ADB查询:
./gradlew :app:installDebug
adb shell content read --uri content://com.example.myapp.flint/get_schema
adb shell content read --uri content://com.example.myapp.flint/read_screenReact Native
1.安装:
{ "dependencies": { "flint-react-native": "file:../../flint-react-native" } }2.包装你的应用程序:
import { FlintProvider, FlintNavigationContainer } from "flint-react-native";
function App() {
return (
{/* ... */}
);
}3.通过CDP查询:
npx flint-cdp read
npx flint-cdp schema
npx flint-cdp call search --params '{"query":"jazz"}'Web(React)
1.安装:
{ "dependencies": { "flint-web": "file:../../flint-web" } }2.包装你的应用程序:
import { FlintProvider, FlintRouter } from "flint-web";
import { BrowserRouter } from "react-router-dom";
function App() {
return (
{/* ... */}
);
}3.通过浏览器控制台或Playwright查询:
window.__flint__.readScreen()
window.__flint__.getSchema()
window.__flint__.callTool("view_product", { id: "1" })为屏幕添加注释
所有平台都有相同的概念。命名屏幕、注册工具、标记内容、定义操作。
// React Native / Web (import from "flint-react-native" or "flint-web")
import { useFlintScreen, useFlintTools, useFlintList, FlintText, FlintItem, FlintAction } from "flint-web";
function CartScreen() {
useFlintScreen("cart");
useFlintList("items", "Items in the cart");
useFlintTools([
{ name: "checkout", description: "Proceed to checkout", action: () => startCheckout() },
]);
return (
{`$${total}`}
{items.map((item, i) => (
{item.name}
removeItem(item.id)}>
Remove
))}
);
}AI看到:
screen: cart
total: $94.98
items:
[0] name: Wireless Headphones | actions: remove
[1] name: Coffee Maker | actions: remove
tools: checkout有关Kotlin/Compose注释,请参阅 完整规格.
渐进式整合
应用程序不需要完整的注释。每个级别都增加了更多功能:
| 级别 | 你添加了什么 | 人工智能得到了什么 |
|---|---|---|
| 0 | 无(每个应用程序) | 辅助功能树+屏幕截图(缓慢、非结构化) |
| 1 | @FlintTool + Flint.screen() | 命名工具、屏幕跟踪 |
| 2 | flintContent("title") | 结构化键/值数据,而不是原始文本 |
| 3 | flintAction("play") | 在布局更改后仍然有效的命名操作 |
| 4 | 完整注释 | 完整结构化表示 |
模块
| 模块 | 它做什么 |
|---|---|
sdk/annotations | Kotlin注释: @FlintTool, @FlintScreen, @FlintAction, @FlintSemanticTree |
sdk/compiler | KSP处理器,用于生成 flint-manifest.json 在构建时 |
sdk/runtime | Android库:内容提供者、动作调用器、树漫游器、数据模型 |
hub/app | 带有嵌入式MCP服务器的Android应用程序,25+内置工具,Flint应用程序发现 |
flint-core | 共享TypeScript库:注册表、钩子、桥、模式、渲染器 |
flint-web | Web SDK: `, `,React Router v6屏幕跟踪 |
flint-react-native | React Native SDK: `, |
| `,React导航屏幕跟踪,CDP CLI | |
integrations/openclaw | OpenClaw插件:将Flint Hub工具作为原生代理工具公开 |
sample/musicapp | Kotlin/Compose示例,带有完整的Flint注释 |
sample/webapp | React示例商店应用 |
sample/musicapp-rn | React Native示例音乐应用 |
建筑
AI Agent
|
|-- ADB shell ---------> Android App (ContentProvider) [direct, recommended]
|-- CDP WebSocket -----> React Native App (Metro runtime) [dev mode]
|-- JS evaluate -------> Web App (browser runtime) [dev mode]
|-- HTTP/SSE ----------> Flint Hub (MCP server on device) [production, wireless]
|
|-- Accessibility Service (any app)
|-- ContentProvider (Flint SDK apps)
|-- System APIs (SMS, calls, etc.)文档
| 文档 | 用于 |
|---|---|
| ADB模式 | AI代理通过ADB测试Android应用程序 |
| React原生代理指南 | AI代理通过CDP测试RN应用程序 |
| Web代理指南 | AI代理通过浏览器/Playwright测试web应用程序 |
| MCP集线器指南 | 通过MCP实现生产设备自动化 |
| SDK参考 | 适用于所有平台(挂钩、组件、类型)的开发人员API |
| 完整规格 | 完整的协议规范(Android SDK、清单、内容提供者、安全) |
许可证
Apache许可证2.0。看 许可证.
