浏览器相关功能需额外安装 browser 扩展并执行 playwright install chromium;MCP 方式需运行 python -m core.mcp_server 单独启动服务;操作物理设备需可信主机批准,且不同设备栈要另装对应 pack。
flyto-core
flytohubApache-2.0活跃维护面向 AI Agent 的浏览器自动化工作流引擎,通过 MCP Server 录制并回放执行过程,为 Agent 声称完成的任务提供可验证的证据。
AI said it finished. Flyto2 shows the proof.
pip install "flyto-core[browser]"
playwright install chromium
flyto recipe competitor-intel --url https://github.com/pricingREADME 未说明 CPU、内存或显存要求;机器人部分需真实 TurtleBot3 与 ROS 2/Nav2 环境,且整体硬件尚未完成端到端验收。
Flyto2 的 Python 执行引擎,把浏览器、API、文件等步骤串成可追溯的工作流
面向 AI Agent 的浏览器自动化工作流引擎,通过 MCP Server 录制并回放执行过程,为 Agent 声称完成的任务提供可验证的证据。
核心能力
- 用 YAML 定义工作流并逐步执行
- 内置 482 个模块与 41 个配方可直接调用
- 记录每步执行结果,支持检查点与安全重放
- 通过 MCP 把工具接入 AI 客户端
- 用 ROS 2 适配器连接真实 TurtleBot3
容易踩的坑
- v2.28.1flyto-core 2.28.1最新正式版2026-08-14 · 2026-08-14 08:33 UTC
Security patch release closing four High-severity reports:
- GHSA-jpmx-7xh3-vq6v: confine local image reads in vision modules.
- GHSA-675h-j4qg-m52x: enforce dangerous permissions in nested Warroom/test steps.
- GHSA-r3jp-qf98-23v8: make browser SSRF policy operator-controlled.
- GHSA-x2qh-79wh-6w7j: confine email attachments and guard SMTP/IMAP hosts.
Also expands registry-wide filesystem and outbound boundary coverage to beta and experimental modules.
- v2.28.0flyto-core v2.28.0 — IPv6 SSRF hardening and extension management2026-08-13 · 2026-08-13 01:19 UTC
查看更新说明
Security
- Fixes an SSRF guard bypass in which the IPv6 unspecified address
::could reach services listening on IPv6 loopback. IPv4 and IPv6 unspecified addresses, including expanded IPv6 spellings, are now rejected by the shared address classifier and URL guard. - Affected versions:
<= 2.27.0. - Patched version:
2.28.0. - Advisory: GHSA-gc4h-hj7x-gp5p.
Highlights
- Adds generic management for
flyto-modules-*andflyto-plugin-*extensions, with authenticated install/uninstall routes, entry-point verification, rollback for failed new installs, and explicit restart requirements. - Strengthens plugin policy checks, lifecycle synchronization, registry snapshot consistency, and capability-manifest refresh behavior.
- Keeps the generated tool catalog independent of locally installed third-party extensions.
Upgrade with:
python -m pip install --upgrade flyto-core==2.28.0See the changelog for the full release details.
- Fixes an SSRF guard bypass in which the IPv6 unspecified address
- v2.27.0flyto-core v2.27.0 — boundary coverage enforcement2026-08-08 · 2026-08-08 01:57 UTC
查看更新说明
Registry-wide filesystem and outbound boundary coverage, enforced by tests rather than convention.
This is a minor, not a patch. Two changes refuse inputs earlier releases accepted:
- Paths outside
FLYTO_SANDBOX_DIR(default: the process working directory) are refused by every module taking a caller-supplied path. - Connections to private or link-local hosts require
FLYTO_ALLOWED_HOSTSorFLYTO_ALLOW_PRIVATE_NETWORK=true. Loopback is unaffected, so self-hosted Redis/MySQL/SMTP onlocalhostkeeps working.
See SECURITY_STATUS.md for every published advisory with the regression test covering it, and SECURITY.md for the environment variables that define both boundaries.
Minor rather than patch: the two boundary changes below refuse inputs that previous releases accepted, so this is not a drop-in upgrade for every caller. Read the Changed section before upgrading.
Security
- Closed the filesystem sandbox boundary across the whole module registry
rather than one report at a time. A registry-wide audit found every
remaining module that took a caller-supplied path to a filesystem sink
without
validate_path_with_env_config, and confined all of them:testing.visual.compare(diff_path, and theexpected/actualread paths — this module declares norequired_permissions, so the write was unauthenticated),data.xml.parse(file_path, the sibling GHSA-wc94-386q-5478 missed),browser.uploadandaws.s3.upload(file_path— host files shipped to a remote origin),ssh.sftp_uploadandssh.sftp_download(local_path, the SFTP counterpart of GHSA-hmq9-xw4w-7ppc),file.delete(file_path— arbitrary file deletion),file.exists(path— filesystem oracle),git.clone(destination),git.commit/git.diff(repo_path),llm.code_fix(source_files, where the previous'..'substring check let absolute paths through),verify.spec(ruleset_path), plusdocker.build,process.startandsandbox.execute_shellas hardening. None of these were reported; they are the same CWE-22 shape as the published advisories. - Closed the outbound network boundary across the registry on the same basis.
Added
enforce_outbound_hostandenforce_outbound_service_urltocore/utils.py— the raw-TCP and non-HTTP-scheme counterparts ofenforce_outbound_url, which only understands http(s) — and routed every module that reaches the network from a caller-supplied target through one of them:verify.run,verify.captureandverify.visual_diff(raw Playwrightpage.gotobypassingBrowserDriver._guard_navigation, and invisual_diff's case a bare playwright browser with no egress guard in any mode),browser.connect(ws_endpoint— CDP is remote code execution by design),browser.launch(proxy— the egress guard inspects request URLs, not where the proxy points),git.clone(url— the existing validator bounded the transport but never the destination),cache.*andqueue.*(redis_url),db.mysql.query,db.redis.get/set,notification.email.send(smtp_server, which also carries SMTP credentials to whatever answers),ssh.exec/ssh.sftp_upload/ssh.sftp_download(host),network.ping,network.port_scan,network.traceroute,port.wait, andbrowser.emulate. - Deduplicated the host resolver that GHSA-v7q9-pr72-5fmv was about.
port.checkcarried the only correct implementation (IP literals range-checked directly so IPv6 transition forms cannot skip the check, and fail-closed on resolution failure); it now lives incore/utils.pyasresolve_guard_ipand backs every host-taking module. - Added
tests/core/test_write_sink_coverage.pyandtests/core/test_outbound_guard_coverage.py, which walk the module registry and fail the build if any module declares a p
- Paths outside
- v2.26.11flyto-core v2.26.112026-08-02 · 2026-08-02 17:09 UTC
查看更新说明
- v2.26.10Flyto2 Core v2.26.102026-07-23 · 2026-07-23 04:51 UTC
查看更新说明
What's Changed
- Update README.md by @ChesterHsu in https://github.com/flytohub/flyto-core/pull/55
Full Changelog: https://github.com/flytohub/flyto-core/compare/v2.26.9...v2.26.10
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
Try something.
Say you want to check a website, grab screenshots, collect some data, and save a report.
Run this:
pip install "flyto-core[browser]"
playwright install chromium
flyto recipe competitor-intel --url https://github.com/pricing
That's a real workflow. No agent prompt needed. It opens a browser, runs the steps, and saves the results.
Want to poke around?
flyto recipes # see the built-in workflows
flyto modules # browse the tools
flyto run your-workflow.yaml # run your own
There are 482 registered modules and 41 built-in recipes in the current Core inventory. Browser stuff, APIs, files, data, tests, and plenty more. Use what you need.
And about that robot…
We're already connecting Flyto2 to a real TurtleBot3 using ROS 2.
The robot runs its normal ROS 2 / Nav2 stack. A separate adapter talks to it. Flyto2 handles the software steps and their execution records.
No custom Flyto2 firmware on the robot. No motor drivers crammed into this repo.
This isn't a claim that every robot is plug-and-play. The current combined setup still needs its full end-to-end hardware sign-off. But the ROS 2 adapter and real-robot development are already here.
So what's in this repo?
This is flyto-core, the Python execution engine behind Flyto2.
You can call it from Python, run YAML workflows, use its local HTTP API, or hook it into an AI client through MCP.
pip install flyto-core
python -m core.mcp_server
Your agent gets access to Core's tools. Moving a physical device still requires a trusted host to approve the action.
Different device software stack? Different pack. That's how ROS 2 and other integrations stay separate without turning Core into a giant pile of device drivers.
How do I know what actually happened?
This part matters.
When a workflow runs, Flyto2 keeps a record of each step. If something fails, you can inspect the run and use checkpoints or replay where it's safe to do so.
And if a tool says “done”? Core can check the evidence it reports against the action's contract. It doesn't just throw away the trail once the command returns.
That's it. Run something, see what happened, build the next thing.
Website · Documentation · PyPI · YouTube · Issues
Flyto2 is the product. flyto-core is the Python package. Licensed under Apache 2.0. Security reports: GitHub advisories.