saygo-agent-control 0.4.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. saygo_agent_control-0.4.3/LICENSE +21 -0
  2. saygo_agent_control-0.4.3/MANIFEST.in +16 -0
  3. saygo_agent_control-0.4.3/PKG-INFO +318 -0
  4. saygo_agent_control-0.4.3/README.md +256 -0
  5. saygo_agent_control-0.4.3/distribution/PRIVACY.md +28 -0
  6. saygo_agent_control-0.4.3/distribution/PYPI.md +64 -0
  7. saygo_agent_control-0.4.3/distribution/README.md +230 -0
  8. saygo_agent_control-0.4.3/distribution/RELEASE_NOTES.md +83 -0
  9. saygo_agent_control-0.4.3/distribution/STORE_LISTING.md +40 -0
  10. saygo_agent_control-0.4.3/distribution/release.json +6 -0
  11. saygo_agent_control-0.4.3/docs/desktop.md +106 -0
  12. saygo_agent_control-0.4.3/extensions/saygo-browser/LICENSE +21 -0
  13. saygo_agent_control-0.4.3/extensions/saygo-browser/background.js +288 -0
  14. saygo_agent_control-0.4.3/extensions/saygo-browser/icons/128.png +0 -0
  15. saygo_agent_control-0.4.3/extensions/saygo-browser/icons/16.png +0 -0
  16. saygo_agent_control-0.4.3/extensions/saygo-browser/icons/32.png +0 -0
  17. saygo_agent_control-0.4.3/extensions/saygo-browser/icons/48.png +0 -0
  18. saygo_agent_control-0.4.3/extensions/saygo-browser/manifest.json +28 -0
  19. saygo_agent_control-0.4.3/extensions/saygo-browser/network.js +144 -0
  20. saygo_agent_control-0.4.3/extensions/saygo-browser/popup.html +9 -0
  21. saygo_agent_control-0.4.3/extensions/saygo-browser/popup.js +11 -0
  22. saygo_agent_control-0.4.3/plugins/saygo-device/.claude-plugin/plugin.json +38 -0
  23. saygo_agent_control-0.4.3/plugins/saygo-device/.codex-plugin/plugin.json +17 -0
  24. saygo_agent_control-0.4.3/plugins/saygo-device/.mcp.json +9 -0
  25. saygo_agent_control-0.4.3/plugins/saygo-device/README.md +43 -0
  26. saygo_agent_control-0.4.3/plugins/saygo-device/commands/doctor.md +15 -0
  27. saygo_agent_control-0.4.3/plugins/saygo-device/skills/device/SKILL.md +47 -0
  28. saygo_agent_control-0.4.3/pyproject.toml +50 -0
  29. saygo_agent_control-0.4.3/saygo/__init__.py +0 -0
  30. saygo_agent_control-0.4.3/saygo/browser_bridge.py +11 -0
  31. saygo_agent_control-0.4.3/saygo/cli.py +52 -0
  32. saygo_agent_control-0.4.3/saygo/commands/__init__.py +1 -0
  33. saygo_agent_control-0.4.3/saygo/commands/background.py +289 -0
  34. saygo_agent_control-0.4.3/saygo/commands/device.py +109 -0
  35. saygo_agent_control-0.4.3/saygo/commands/doctor.py +71 -0
  36. saygo_agent_control-0.4.3/saygo/commands/figma.py +225 -0
  37. saygo_agent_control-0.4.3/saygo/commands/probes.py +140 -0
  38. saygo_agent_control-0.4.3/saygo/commands/run.py +359 -0
  39. saygo_agent_control-0.4.3/saygo/commands/targets.py +150 -0
  40. saygo_agent_control-0.4.3/saygo/commands/task.py +51 -0
  41. saygo_agent_control-0.4.3/saygo/commands/toolchain.py +29 -0
  42. saygo_agent_control-0.4.3/saygo/config.py +380 -0
  43. saygo_agent_control-0.4.3/saygo/desktop/__init__.py +1 -0
  44. saygo_agent_control-0.4.3/saygo/desktop/app.py +425 -0
  45. saygo_agent_control-0.4.3/saygo/desktop/model.py +98 -0
  46. saygo_agent_control-0.4.3/saygo/desktop/runner.py +157 -0
  47. saygo_agent_control-0.4.3/saygo/devices/__init__.py +1 -0
  48. saygo_agent_control-0.4.3/saygo/devices/actions.py +113 -0
  49. saygo_agent_control-0.4.3/saygo/devices/control.py +325 -0
  50. saygo_agent_control-0.4.3/saygo/devices/diagnostics.py +23 -0
  51. saygo_agent_control-0.4.3/saygo/devices/mobile.py +547 -0
  52. saygo_agent_control-0.4.3/saygo/devices/mobile_host.py +241 -0
  53. saygo_agent_control-0.4.3/saygo/devices/mobile_host_worker.py +164 -0
  54. saygo_agent_control-0.4.3/saygo/devices/mobile_relay.py +123 -0
  55. saygo_agent_control-0.4.3/saygo/devices/network.py +27 -0
  56. saygo_agent_control-0.4.3/saygo/devices/observations.py +105 -0
  57. saygo_agent_control-0.4.3/saygo/devices/service.py +293 -0
  58. saygo_agent_control-0.4.3/saygo/devices/simulator.py +84 -0
  59. saygo_agent_control-0.4.3/saygo/devices/toolchain.py +413 -0
  60. saygo_agent_control-0.4.3/saygo/devices/windows_no_console.cjs +14 -0
  61. saygo_agent_control-0.4.3/saygo/drive/__init__.py +6 -0
  62. saygo_agent_control-0.4.3/saygo/drive/render.py +104 -0
  63. saygo_agent_control-0.4.3/saygo/integrations/__init__.py +1 -0
  64. saygo_agent_control-0.4.3/saygo/integrations/browser_bridge.py +299 -0
  65. saygo_agent_control-0.4.3/saygo/integrations/browser_setup.py +73 -0
  66. saygo_agent_control-0.4.3/saygo/integrations/figma.py +221 -0
  67. saygo_agent_control-0.4.3/saygo/integrations/figma_ops.py +250 -0
  68. saygo_agent_control-0.4.3/saygo/integrations/figma_via_mcp.py +269 -0
  69. saygo_agent_control-0.4.3/saygo/logger.py +71 -0
  70. saygo_agent_control-0.4.3/saygo/mcp/__init__.py +9 -0
  71. saygo_agent_control-0.4.3/saygo/mcp/backend_policy.py +25 -0
  72. saygo_agent_control-0.4.3/saygo/mcp/client.py +310 -0
  73. saygo_agent_control-0.4.3/saygo/mcp/server.py +948 -0
  74. saygo_agent_control-0.4.3/saygo/platforms/__init__.py +52 -0
  75. saygo_agent_control-0.4.3/saygo/platforms/appium.py +517 -0
  76. saygo_agent_control-0.4.3/saygo/platforms/appium_server.py +195 -0
  77. saygo_agent_control-0.4.3/saygo/platforms/base.py +154 -0
  78. saygo_agent_control-0.4.3/saygo/platforms/browser.py +318 -0
  79. saygo_agent_control-0.4.3/saygo/platforms/browser_extension.py +141 -0
  80. saygo_agent_control-0.4.3/saygo/platforms/browser_playwright.py +308 -0
  81. saygo_agent_control-0.4.3/saygo/platforms/desktop.py +148 -0
  82. saygo_agent_control-0.4.3/saygo/platforms/desktop_mac.py +232 -0
  83. saygo_agent_control-0.4.3/saygo/platforms/desktop_win.py +328 -0
  84. saygo_agent_control-0.4.3/saygo/platforms/device_session.py +440 -0
  85. saygo_agent_control-0.4.3/saygo/platforms/mjpeg.py +110 -0
  86. saygo_agent_control-0.4.3/saygo/platforms/rdp.py +260 -0
  87. saygo_agent_control-0.4.3/saygo/platforms/selenium_grid.py +29 -0
  88. saygo_agent_control-0.4.3/saygo/platforms/windows_runner.ps1 +827 -0
  89. saygo_agent_control-0.4.3/saygo/platforms/windows_runner.py +211 -0
  90. saygo_agent_control-0.4.3/saygo/probes/__init__.py +391 -0
  91. saygo_agent_control-0.4.3/saygo/probes/base.py +234 -0
  92. saygo_agent_control-0.4.3/saygo/probes/spec.py +190 -0
  93. saygo_agent_control-0.4.3/saygo/probes/subprocess_probe.py +196 -0
  94. saygo_agent_control-0.4.3/saygo/qa/__init__.py +1 -0
  95. saygo_agent_control-0.4.3/saygo/qa/agent.py +1340 -0
  96. saygo_agent_control-0.4.3/saygo/qa/brain.py +943 -0
  97. saygo_agent_control-0.4.3/saygo/qa/cases.py +423 -0
  98. saygo_agent_control-0.4.3/saygo/qa/device_setup.py +337 -0
  99. saygo_agent_control-0.4.3/saygo/qa/execution.py +461 -0
  100. saygo_agent_control-0.4.3/saygo/qa/gherkin.py +532 -0
  101. saygo_agent_control-0.4.3/saygo/qa/healer.py +195 -0
  102. saygo_agent_control-0.4.3/saygo/qa/planner.py +204 -0
  103. saygo_agent_control-0.4.3/saygo/qa/report.py +508 -0
  104. saygo_agent_control-0.4.3/saygo/qa/step_validator.py +249 -0
  105. saygo_agent_control-0.4.3/saygo/runtime/__init__.py +6 -0
  106. saygo_agent_control-0.4.3/saygo/runtime/cli.py +67 -0
  107. saygo_agent_control-0.4.3/saygo/runtime/engine.py +311 -0
  108. saygo_agent_control-0.4.3/saygo/runtime/interactive.py +320 -0
  109. saygo_agent_control-0.4.3/saygo/runtime/locking.py +50 -0
  110. saygo_agent_control-0.4.3/saygo/runtime/resources.py +159 -0
  111. saygo_agent_control-0.4.3/saygo/runtime/schema.py +102 -0
  112. saygo_agent_control-0.4.3/saygo/runtime/store.py +136 -0
  113. saygo_agent_control-0.4.3/saygo/setup.py +52 -0
  114. saygo_agent_control-0.4.3/saygo/skills/__init__.py +106 -0
  115. saygo_agent_control-0.4.3/saygo/skills/base.py +85 -0
  116. saygo_agent_control-0.4.3/saygo/skills/color_validator.py +241 -0
  117. saygo_agent_control-0.4.3/saygo/skills/keyboard_detector.py +93 -0
  118. saygo_agent_control-0.4.3/saygo/skills/layout_checker.py +259 -0
  119. saygo_agent_control-0.4.3/saygo/skills/loading_detector.py +169 -0
  120. saygo_agent_control-0.4.3/saygo/skills/ocr.py +168 -0
  121. saygo_agent_control-0.4.3/saygo/skills/scroll_map.py +184 -0
  122. saygo_agent_control-0.4.3/saygo/skills/smart_crop.py +164 -0
  123. saygo_agent_control-0.4.3/saygo/skills/toast_detector.py +208 -0
  124. saygo_agent_control-0.4.3/saygo/skills/visual_diff.py +204 -0
  125. saygo_agent_control-0.4.3/saygo/updates.py +334 -0
  126. saygo_agent_control-0.4.3/saygo/vision/__init__.py +1 -0
  127. saygo_agent_control-0.4.3/saygo/vision/grid.py +123 -0
  128. saygo_agent_control-0.4.3/saygo/vision/locator.py +259 -0
  129. saygo_agent_control-0.4.3/saygo/vision/settle.py +125 -0
  130. saygo_agent_control-0.4.3/saygo_agent_control.egg-info/PKG-INFO +318 -0
  131. saygo_agent_control-0.4.3/saygo_agent_control.egg-info/SOURCES.txt +141 -0
  132. saygo_agent_control-0.4.3/saygo_agent_control.egg-info/dependency_links.txt +1 -0
  133. saygo_agent_control-0.4.3/saygo_agent_control.egg-info/entry_points.txt +4 -0
  134. saygo_agent_control-0.4.3/saygo_agent_control.egg-info/requires.txt +35 -0
  135. saygo_agent_control-0.4.3/saygo_agent_control.egg-info/top_level.txt +1 -0
  136. saygo_agent_control-0.4.3/scripts/build_desktop.py +22 -0
  137. saygo_agent_control-0.4.3/scripts/build_release.py +80 -0
  138. saygo_agent_control-0.4.3/scripts/desktop_windows.spec +18 -0
  139. saygo_agent_control-0.4.3/scripts/install_agent_plugin.py +395 -0
  140. saygo_agent_control-0.4.3/scripts/install_saygo.py +74 -0
  141. saygo_agent_control-0.4.3/scripts/package_desktop.py +51 -0
  142. saygo_agent_control-0.4.3/setup.cfg +4 -0
  143. saygo_agent_control-0.4.3/setup.py +22 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Saygo contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,16 @@
1
+ include LICENSE README.md pyproject.toml setup.py MANIFEST.in
2
+ include scripts/install_agent_plugin.py scripts/install_saygo.py scripts/build_release.py
3
+ include scripts/build_desktop.py scripts/package_desktop.py scripts/desktop_windows.spec
4
+ recursive-include saygo *.py *.ps1 *.cjs *.md *.json *.txt
5
+ recursive-include plugins/saygo-device *.md *.json
6
+ include plugins/saygo-device/.mcp.json
7
+ include plugins/saygo-device/.codex-plugin/plugin.json
8
+ include plugins/saygo-device/.claude-plugin/plugin.json
9
+ recursive-include extensions/saygo-browser *.json *.js *.html *.png LICENSE
10
+ recursive-include distribution *.md *.json
11
+ include docs/desktop.md
12
+ prune tests
13
+ prune website-project
14
+ prune build
15
+ prune dist
16
+ global-exclude __pycache__ *.py[cod] .env
@@ -0,0 +1,318 @@
1
+ Metadata-Version: 2.4
2
+ Name: saygo-agent-control
3
+ Version: 0.4.3
4
+ Summary: Persistent visual control sessions for external programming agents
5
+ License: MIT License
6
+
7
+ Copyright (c) 2026 Saygo contributors
8
+
9
+ Permission is hereby granted, free of charge, to any person obtaining a copy
10
+ of this software and associated documentation files (the "Software"), to deal
11
+ in the Software without restriction, including without limitation the rights
12
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13
+ copies of the Software, and to permit persons to whom the Software is
14
+ furnished to do so, subject to the following conditions:
15
+
16
+ The above copyright notice and this permission notice shall be included in all
17
+ copies or substantial portions of the Software.
18
+
19
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25
+ SOFTWARE.
26
+
27
+ Project-URL: Homepage, https://saygo.work
28
+ Project-URL: Repository, https://github.com/WilliamSkyWalker/saygo
29
+ Project-URL: Documentation, https://github.com/WilliamSkyWalker/saygo/blob/main/docs/agent-control.md
30
+ Project-URL: Issues, https://github.com/WilliamSkyWalker/saygo/issues
31
+ Keywords: ai,mcp,automation,device-control
32
+ Classifier: Development Status :: 4 - Beta
33
+ Classifier: Programming Language :: Python :: 3
34
+ Classifier: Programming Language :: Python :: 3 :: Only
35
+ Requires-Python: >=3.10
36
+ Description-Content-Type: text/markdown
37
+ License-File: LICENSE
38
+ Requires-Dist: Pillow>=10
39
+ Requires-Dist: pip>=23.1
40
+ Provides-Extra: browser
41
+ Requires-Dist: playwright<2,>=1.60; extra == "browser"
42
+ Provides-Extra: selenium
43
+ Requires-Dist: selenium>=4; extra == "selenium"
44
+ Provides-Extra: mobile
45
+ Requires-Dist: Appium-Python-Client>=4; extra == "mobile"
46
+ Requires-Dist: uiautomator2<4,>=3.5; extra == "mobile"
47
+ Provides-Extra: mcp
48
+ Requires-Dist: mcp<3,>=1.2; extra == "mcp"
49
+ Provides-Extra: qa
50
+ Requires-Dist: openai>=1; extra == "qa"
51
+ Provides-Extra: desktop
52
+ Requires-Dist: PySide6-Essentials<7,>=6.8; extra == "desktop"
53
+ Requires-Dist: keyring<26,>=25; extra == "desktop"
54
+ Provides-Extra: windows
55
+ Requires-Dist: pyautogui>=0.9; sys_platform == "win32" and extra == "windows"
56
+ Requires-Dist: pywin32>=306; sys_platform == "win32" and extra == "windows"
57
+ Provides-Extra: mac
58
+ Requires-Dist: pyautogui>=0.9; sys_platform == "darwin" and extra == "mac"
59
+ Requires-Dist: pyobjc-framework-Quartz>=10; sys_platform == "darwin" and extra == "mac"
60
+ Requires-Dist: pyobjc-framework-Cocoa>=10; sys_platform == "darwin" and extra == "mac"
61
+ Dynamic: license-file
62
+
63
+ # Saygo
64
+
65
+ **你说,它做。**
66
+
67
+ 让 AI 操作你的电脑、浏览器和手机。Saygo connects programming agents to real devices through visual observation, actions, and verified results.
68
+
69
+ **官网:[saygo.work](https://saygo.work/)** · [Source repository](https://github.com/WilliamSkyWalker/saygo)
70
+
71
+ [MIT License](LICENSE) · [中文说明](#中文说明) · [Agent development guide](agent.md)
72
+
73
+ **Visual control of phones, browser pages and desktop windows, with persistent sessions and task records.**
74
+
75
+ Saygo gives external programming agents a shared CLI/MCP operation layer: observe a screen, choose an action, execute it, and inspect the result. It also provides a standalone Qt desktop application where users configure their own vision-model API, plus a BDD QA runner for regression tests.
76
+
77
+ ## Choose how to use it
78
+
79
+ | User | Entry point | Model configuration |
80
+ |---|---|---|
81
+ | Claude Code, Codex, Qoder or QoderCN CLI user | Managed Agent integration: MCP + shared operation Skill | No Saygo model API key; the external Agent makes decisions |
82
+ | Desktop application user | Saygo Desktop (Qt 6 / PySide6) | Configure an OpenAI-compatible vision API URL, model and API key in the app |
83
+ | Script or CI user | `saygo device`, `saygo task`, `saygo workflow`, `saygo run` | Direct control needs no key; the built-in QA loop needs model credentials |
84
+
85
+ Saygo is currently a **development/beta distribution**. Installable source bundles and native packaging scripts exist; this does not mean the packages are published on PyPI or the Chrome Web Store. See the [distribution guide](distribution/README.md) for release artifacts, updates and uninstall.
86
+
87
+ ## Programming Agent setup
88
+
89
+ ### Python package (publication pending)
90
+
91
+ The wheel and source distribution are prepared for PyPI under `saygo-agent-control`.
92
+ Until publication, install the local wheel with `pipx install '/path/to/saygo_agent_control-0.4.3-py3-none-any.whl[mcp]'`.
93
+ After the package is published, the standard installation is:
94
+
95
+ ```sh
96
+ pipx install 'saygo-agent-control[mcp]'
97
+ saygo setup --client codex
98
+ # Or: saygo setup --client claude / both / qoder / qodercn / all
99
+ ```
100
+
101
+ Python 3.10+, pipx and the selected Agent CLI must already be installed. `saygo setup`
102
+ uses the version bundled with the installed package, prepares an isolated runtime,
103
+ and registers the plugin and browser bridge. No repository clone is needed.
104
+ Use `saygo setup --help` for mobile, browser, update and uninstall options.
105
+ Dependencies still require network access. Update with `pipx upgrade saygo-agent-control`
106
+ then rerun `saygo setup`; remove client registration with `saygo setup --uninstall`
107
+ before removing the pipx application. Managed runtime updates remain a separate,
108
+ opt-in GitHub release channel.
109
+
110
+ Build and first-publication instructions: [Python package release](distribution/PYPI.md).
111
+
112
+
113
+ **Install from source for the Saygo rename.** The repository has been renamed, but the existing release assets predate this change. Use the source installation below until a Saygo-branded release is published:
114
+
115
+ ```sh
116
+ git clone https://github.com/WilliamSkyWalker/saygo.git
117
+ cd saygo
118
+ python3 scripts/install_agent_plugin.py
119
+ ```
120
+
121
+ On Windows, use `py -3 scripts/install_agent_plugin.py`. The new identifiers are `saygo` (CLI), `saygo-device` (plugin), and `~/.saygo` (configuration). There are no old-name compatibility aliases.
122
+
123
+ ### Release installer (after Saygo artifacts are published)
124
+
125
+ With Python 3.10+ and an installed Agent client, copy one command below. It finds the newest release, verifies and runs its installer; no Git or manual GitHub download is needed. Run it in a directory where you can save the installer.
126
+
127
+ macOS / Linux / WSL:
128
+
129
+ ```sh
130
+ curl -fL https://raw.githubusercontent.com/WilliamSkyWalker/saygo/main/scripts/install_saygo.py -o install-saygo.py && python3 install-saygo.py
131
+ ```
132
+
133
+ Windows PowerShell:
134
+
135
+ ```powershell
136
+ Invoke-WebRequest https://raw.githubusercontent.com/WilliamSkyWalker/saygo/main/scripts/install_saygo.py -OutFile install-saygo.py -ErrorAction Stop; py -3 install-saygo.py
137
+ ```
138
+
139
+ The installer automatically downloads and verifies the source archive, prepares an isolated runtime, detects supported clients, installs their integration and shared Skill, and sets up the Chrome/Edge native messaging host. It does not require pyenv.
140
+
141
+ The command always selects the newest release, including betas. Add `--channel stable` for stable releases only. Run the same command again to upgrade.
142
+
143
+ After downloading, rerun `install-saygo.py` with `--client claude`, `codex`, `qoder`, `qodercn`, `both` (Claude + Codex), or `all` to select clients. Add `--mobile` for mobile dependencies. On native Windows use `py -3` in place of `python3`.
144
+
145
+ From a checkout, developers can use `python3 scripts/install_agent_plugin.py`. Check [GitHub Releases](https://github.com/WilliamSkyWalker/saygo/releases) for published assets. The `saygo-0.4.3.zip` name below is the new build output, not a claim that this asset is already published.
146
+
147
+ Managed installations check for updates in the background and report new releases. Automatic runtime updates are opt-in: add `--auto-update --update-channel beta` when running the installer. Prepared updates activate on a later idle Agent startup; browser/Skill changes prompt a full upgrade. See [update controls and limits](distribution/README.md#update-and-uninstall).
148
+
149
+ For browser control, load the installer-provided extension directory through **Load unpacked** at `chrome://extensions` (or Edge's extension page), then click **Connect local bridge** in its popup. Restart the Agent client and describe a task, for example:
150
+
151
+ > List the connected sessions, connect the test browser page as `mail`, and show me its current screen before making changes.
152
+
153
+ **MCP browser control uses the extension backend. Playwright is excluded from MCP**, including existing Playwright sessions and tasks using them. Playwright remains available through CLI/Runtime for managed test browsers. The extension works with existing website tabs and their login state; it does not extract DOM content for visual decisions.
154
+
155
+ The installer configures Saygo-scoped permissions for Claude and Qoder/QoderCN. Codex approval setup and client-policy limits are documented in the [distribution guide](distribution/README.md). Qoder integration covers the CLI; IDE integration is not claimed verified.
156
+
157
+ For direct package installation during development:
158
+
159
+ ```sh
160
+ python3 -m pip install -e '.[mcp]'
161
+ saygo --help
162
+ saygo-mcp --profile device
163
+ ```
164
+
165
+ Install only the needed extras: `mobile`, `windows`, `mac`, `desktop`, `browser` (CLI Playwright), `selenium`, or `qa`. A browser-extension-only MCP setup does not need the mobile toolchain. See the [operation guide](docs/agent-control.md) and [plugin guide](plugins/saygo-device/README.md).
166
+
167
+ ## Desktop application
168
+
169
+ **Under development and testing / 开发测试中。**
170
+
171
+ Saygo Desktop centers on a conversation, with task history in the sidebar and a message composer at the bottom. Users can configure a model, connect named sessions, run a task, pause for human input, reply to continue, recover a task and export evidence.
172
+
173
+ - **Windows:** a native x64 portable ZIP has been built. Extract the entire folder and run `SaygoDesktop.exe`; keep `SaygoNativeHost.exe` and `_internal` alongside it. No WSL, Python or pyenv installation is needed. The main application opens without a console; the separate native host handles browser messaging.
174
+ - **macOS:** `.app` and DMG packaging scripts and a macOS CI job are prepared. No macOS build/runtime validation has been completed yet.
175
+ - **Linux:** the standalone GUI has passed local startup checks. Browser/mobile operation is available through the corresponding backends; local Linux desktop-window automation is not implemented.
176
+
177
+ The application accepts an OpenAI-compatible vision endpoint. Keys can stay in memory for the session or use a supported OS credential store; they are not written to `desktop.json`. Screenshots and task text are sent to the configured provider.
178
+
179
+ Developers can launch from source:
180
+
181
+ ```sh
182
+ python3 -m pip install -e '.[desktop]'
183
+ saygo-desktop
184
+ ```
185
+
186
+ Add `windows` or `mac` extras for native desktop input. Native packaging runs **on the target OS**:
187
+
188
+ ```sh
189
+ python3 -m pip install pyinstaller
190
+ python3 scripts/build_desktop.py
191
+ python3 scripts/package_desktop.py
192
+ ```
193
+
194
+ Output: Windows ZIP, macOS DMG or Linux tar.gz under `dist/installers`, each with a SHA256 checksum. The manual [desktop workflow](.github/workflows/desktop.yml) builds CI artifacts. These are development builds without release signing or notarization. See [desktop usage and validation](docs/desktop.md).
195
+
196
+ ## Observe, act, verify
197
+
198
+ CLI and MCP share named session state under `SAYGO_HOME_DIR` (default `~/.saygo`). Clients must use the same state directory and a backend available to both entrances to operate the same target.
199
+
200
+ ```sh
201
+ # Existing browser: install and connect the extension first.
202
+ saygo device connect --platform browser --backend extension --session mail
203
+
204
+ # Android device/emulator; obtain its ID with device list.
205
+ saygo device list --platform android
206
+ saygo device connect --platform android --device DEVICE_ID --session phone
207
+
208
+ # Windows window-title substring; use --platform mac for a macOS app.
209
+ saygo device connect --platform windows --app 'Example App' --session admin
210
+
211
+ saygo device capabilities --session mail
212
+ saygo doctor --session mail
213
+ saygo device screenshot --session mail
214
+
215
+ # Replace OBSERVATION_ID with the returned ID, and choose coordinates from that image.
216
+ saygo device act '{"type":"tap","x":50,"y":40,"coordinate_space":"percent"}' \
217
+ --session mail --observation-id OBSERVATION_ID --observe-after
218
+ saygo device wait --session mail --mode stable --timeout 5
219
+ ```
220
+
221
+ Observations include identity, target, dimensions and coordinate mappings. Crop observations retain the mapping to the original screen. MCP `device_observe` and action results with observations return image content; CLI returns image paths and metadata. Query capabilities before using platform-dependent actions.
222
+
223
+ **Dispatched input or a stable frame does not establish business success.** Inspect the resulting screen. Prefer visible buttons and menus over keyboard shortcuts. Unsupported actions fail explicitly; Windows background mode must not silently fall back to global keyboard/mouse input. See [control details](docs/control.md).
224
+
225
+ ## Tasks, handoff and recovery
226
+
227
+ Interactive tasks reuse Runtime while an Agent decides one step at a time. Explicit JSON workflows use `saygo workflow`; they do not require a model planner.
228
+
229
+ ```sh
230
+ saygo task create '{"phone":"phone","mail":"mail","admin":"admin"}'
231
+ saygo task observe TASK_ID --resource phone
232
+ saygo task submit TASK_ID --resource phone --request-id focus-registration \
233
+ --observation-id OBSERVATION_ID \
234
+ --action '{"type":"tap","x_pct":50,"y_pct":40}' --note 'Focus the registration form'
235
+ saygo task handoff TASK_ID --instructions 'Please sign into the test mailbox'
236
+ saygo task resume TASK_ID --note 'User returned control after login'
237
+ saygo task recover TASK_ID
238
+ saygo task timeline TASK_ID
239
+ saygo task finish TASK_ID --note 'Verified the final screen'
240
+ saygo task export TASK_ID --out evidence.zip
241
+ ```
242
+
243
+ Use the IDs returned by create/observe. MCP exposes the same task commands through `agent_task`. Project aliases can be saved with `saygo resources bind NAME SESSION`.
244
+
245
+ Runtime records dispatch intent before input, deduplicates request IDs, and marks interrupted actions with unknown results as `needs_review`; it never blindly replays them. Handoff blocks automatic input, and resume obtains fresh observations. Tasks retain resource ownership until finished or cancelled; use the owning task interface while a session is bound. Local desktop windows share an input lock.
246
+
247
+ Execution facts, errors, before/after captures and Agent notes are recorded separately. Evidence exports can contain application content and entered text. See [interactive task semantics](docs/agent-control.md), [workflow format](docs/runtime.md) and [workflow examples](examples/workflows).
248
+
249
+ ## Platforms and validation limits
250
+
251
+ | Target | Implementation / current boundary |
252
+ |---|---|
253
+ | Android | Appium + UiAutomator2; discovery/provisioning uses adb. Windows-host emulator installation and basic visual actions from WSL have been exercised. |
254
+ | iOS | Appium + XCUITest; local setup requires macOS and full Xcode. New provisioning paths remain mock-tested. |
255
+ | Chrome / Edge | Extension + native messaging for MCP and the desktop GUI; store installation and fresh-machine setup still require acceptance tests. |
256
+ | Managed test browser | Playwright/CDP through CLI/Runtime; Selenium remains available for QA. Playwright is rejected by MCP. |
257
+ | Windows desktop | Native driver or PowerShell/Win32 runner; WSL is optional. Experimental background control depends on application controls and rejects unsupported shortcuts. |
258
+ | macOS desktop | Window capture and foreground input; requires Screen Recording and Accessibility permissions. Native packaging and full task execution remain unverified. |
259
+ | Remote desktop | Experimental RDP prototype; not a stable supported deployment path. |
260
+
261
+ Windows native desktop tests, frozen EXE startup and native-host handshake passed. Linux Qt startup and packaging passed. These checks do **not** establish clean-machine installation, a live model-driven task or the full phone registration → email activation → desktop confirmation acceptance scenario. Detailed evidence boundaries: [desktop](docs/desktop.md), [Agent control](docs/agent-control.md), [mobile](docs/mobile.md), [distribution](distribution/README.md).
262
+
263
+ `doctor` checks connection, capture and image readability. Input remains untested unless an explicit `--probe-action` is supplied on a harmless target; its result still needs visual inspection.
264
+
265
+ ## Configuration
266
+
267
+ External Agent control needs no Saygo LLM API key. The standalone GUI has its own model settings. Optional CLI QA settings load in this order:
268
+
269
+ 1. Built-in defaults.
270
+ 2. `$SAYGO_HOME_DIR/config.env` (default `~/.saygo/config.env`).
271
+ 3. Working-project `.env`, or the explicit file selected by `SAYGO_CONFIG_FILE`.
272
+ 4. Process environment variables.
273
+
274
+ `saygo init` creates a project template; `saygo init --user` creates a user template. Existing files are preserved. Installed package directories are not searched for `.env`; private configuration is never bundled in releases. The Agent installer supports `--config-file /absolute/path/to/private.env` to retain a file reference without copying its contents.
275
+
276
+ ## BDD QA and other tools
277
+
278
+ The existing QA engine remains available for `.feature` (Gherkin) regression cases, visual reports, model tiering and optional element location:
279
+
280
+ ```sh
281
+ python3 -m pip install -e '.[qa,mobile]'
282
+ saygo init
283
+ # Configure a vision model and target in the private .env file before running.
284
+ saygo run tests/my-app/login.feature --report
285
+ ```
286
+
287
+ ```gherkin
288
+ # saygo-platform: android
289
+ # saygo-package: com.example.app
290
+ Feature: Login
291
+ @auto @android
292
+ Scenario: Show the login form
293
+ Given the app is launched
294
+ When the user taps "Log in"
295
+ Then the email and password fields are visible
296
+ ```
297
+
298
+ QA verdicts are model judgements with recorded evidence, not independent proof. Use [probe plugins](docs/probes.md) for non-visual facts such as backend writes. Figma test generation and visual review remain available through `saygo figma`. The existing [`/saygo-drive` Skill](.claude/skills/saygo-drive/SKILL.md) provides a separate QA-oriented Agent workflow; general cross-device tasks should use the shared operation Skill and Runtime records.
299
+
300
+ For QA execution guards, model configuration, case conventions and module responsibilities, see [agent.md](agent.md), [`.env.example`](.env.example) and [architecture](docs/architecture.md).
301
+
302
+ ## 中文说明
303
+
304
+ Saygo 为外部编程 Agent 提供手机、浏览器和桌面窗口的视觉操作能力:**观察 → 操作 → 新观察**,并保存跨端任务进度、执行事实和截图。
305
+
306
+ - **命令行用户**:安装 Claude Code / Codex / Qoder / QoderCN 的集成,由现有 Agent 决策,无需给 Saygo 配模型 Key。当前改名版本请使用上方源码安装步骤;Saygo 品牌安装包发布后再使用单命令下载入口。安装后重启客户端。
307
+ - **窗口桌面用户**:使用 Qt 桌面版,在界面配置自己的视觉模型 API、模型名和 Key。Windows 原生便携包无需 WSL、Python 或 pyenv。macOS DMG 的脚本和 CI 已就绪,但尚未完成 macOS 构建与实测。
308
+ - **浏览器**:MCP 和桌面版使用 Chrome/Edge 扩展,保留现有页面和登录状态;MCP 不支持 Playwright。扩展暂通过开发者模式加载,未声称已上架商店。
309
+ - **恢复与接管**:CLI/MCP 共用命名会话;`saygo task` 保存操作记录、支持人工接管和中断恢复。结果不确定的动作需核对,不自动重放。点击派发成功或画面稳定都不等于业务完成。
310
+ - **测试边界**:Windows EXE 已通过启动和桥接握手验证,完整跨端业务验收与干净机器安装仍需实测;不要将模拟测试当作真机兼容性证明。
311
+
312
+ 安装与更新见[分发说明](distribution/README.md),窗口版见[桌面指南](docs/desktop.md),会话、操作和恢复见[Agent 操作指南](docs/agent-control.md),开发约束见[通用 agent.md](agent.md)。
313
+
314
+ ## License
315
+
316
+ Saygo is licensed under [MIT](LICENSE). Third-party dependencies retain their respective licenses.
317
+
318
+ Saygo 采用 MIT 许可证;第三方依赖遵循各自许可证。
@@ -0,0 +1,256 @@
1
+ # Saygo
2
+
3
+ **你说,它做。**
4
+
5
+ 让 AI 操作你的电脑、浏览器和手机。Saygo connects programming agents to real devices through visual observation, actions, and verified results.
6
+
7
+ **官网:[saygo.work](https://saygo.work/)** · [Source repository](https://github.com/WilliamSkyWalker/saygo)
8
+
9
+ [MIT License](LICENSE) · [中文说明](#中文说明) · [Agent development guide](agent.md)
10
+
11
+ **Visual control of phones, browser pages and desktop windows, with persistent sessions and task records.**
12
+
13
+ Saygo gives external programming agents a shared CLI/MCP operation layer: observe a screen, choose an action, execute it, and inspect the result. It also provides a standalone Qt desktop application where users configure their own vision-model API, plus a BDD QA runner for regression tests.
14
+
15
+ ## Choose how to use it
16
+
17
+ | User | Entry point | Model configuration |
18
+ |---|---|---|
19
+ | Claude Code, Codex, Qoder or QoderCN CLI user | Managed Agent integration: MCP + shared operation Skill | No Saygo model API key; the external Agent makes decisions |
20
+ | Desktop application user | Saygo Desktop (Qt 6 / PySide6) | Configure an OpenAI-compatible vision API URL, model and API key in the app |
21
+ | Script or CI user | `saygo device`, `saygo task`, `saygo workflow`, `saygo run` | Direct control needs no key; the built-in QA loop needs model credentials |
22
+
23
+ Saygo is currently a **development/beta distribution**. Installable source bundles and native packaging scripts exist; this does not mean the packages are published on PyPI or the Chrome Web Store. See the [distribution guide](distribution/README.md) for release artifacts, updates and uninstall.
24
+
25
+ ## Programming Agent setup
26
+
27
+ ### Python package (publication pending)
28
+
29
+ The wheel and source distribution are prepared for PyPI under `saygo-agent-control`.
30
+ Until publication, install the local wheel with `pipx install '/path/to/saygo_agent_control-0.4.3-py3-none-any.whl[mcp]'`.
31
+ After the package is published, the standard installation is:
32
+
33
+ ```sh
34
+ pipx install 'saygo-agent-control[mcp]'
35
+ saygo setup --client codex
36
+ # Or: saygo setup --client claude / both / qoder / qodercn / all
37
+ ```
38
+
39
+ Python 3.10+, pipx and the selected Agent CLI must already be installed. `saygo setup`
40
+ uses the version bundled with the installed package, prepares an isolated runtime,
41
+ and registers the plugin and browser bridge. No repository clone is needed.
42
+ Use `saygo setup --help` for mobile, browser, update and uninstall options.
43
+ Dependencies still require network access. Update with `pipx upgrade saygo-agent-control`
44
+ then rerun `saygo setup`; remove client registration with `saygo setup --uninstall`
45
+ before removing the pipx application. Managed runtime updates remain a separate,
46
+ opt-in GitHub release channel.
47
+
48
+ Build and first-publication instructions: [Python package release](distribution/PYPI.md).
49
+
50
+
51
+ **Install from source for the Saygo rename.** The repository has been renamed, but the existing release assets predate this change. Use the source installation below until a Saygo-branded release is published:
52
+
53
+ ```sh
54
+ git clone https://github.com/WilliamSkyWalker/saygo.git
55
+ cd saygo
56
+ python3 scripts/install_agent_plugin.py
57
+ ```
58
+
59
+ On Windows, use `py -3 scripts/install_agent_plugin.py`. The new identifiers are `saygo` (CLI), `saygo-device` (plugin), and `~/.saygo` (configuration). There are no old-name compatibility aliases.
60
+
61
+ ### Release installer (after Saygo artifacts are published)
62
+
63
+ With Python 3.10+ and an installed Agent client, copy one command below. It finds the newest release, verifies and runs its installer; no Git or manual GitHub download is needed. Run it in a directory where you can save the installer.
64
+
65
+ macOS / Linux / WSL:
66
+
67
+ ```sh
68
+ curl -fL https://raw.githubusercontent.com/WilliamSkyWalker/saygo/main/scripts/install_saygo.py -o install-saygo.py && python3 install-saygo.py
69
+ ```
70
+
71
+ Windows PowerShell:
72
+
73
+ ```powershell
74
+ Invoke-WebRequest https://raw.githubusercontent.com/WilliamSkyWalker/saygo/main/scripts/install_saygo.py -OutFile install-saygo.py -ErrorAction Stop; py -3 install-saygo.py
75
+ ```
76
+
77
+ The installer automatically downloads and verifies the source archive, prepares an isolated runtime, detects supported clients, installs their integration and shared Skill, and sets up the Chrome/Edge native messaging host. It does not require pyenv.
78
+
79
+ The command always selects the newest release, including betas. Add `--channel stable` for stable releases only. Run the same command again to upgrade.
80
+
81
+ After downloading, rerun `install-saygo.py` with `--client claude`, `codex`, `qoder`, `qodercn`, `both` (Claude + Codex), or `all` to select clients. Add `--mobile` for mobile dependencies. On native Windows use `py -3` in place of `python3`.
82
+
83
+ From a checkout, developers can use `python3 scripts/install_agent_plugin.py`. Check [GitHub Releases](https://github.com/WilliamSkyWalker/saygo/releases) for published assets. The `saygo-0.4.3.zip` name below is the new build output, not a claim that this asset is already published.
84
+
85
+ Managed installations check for updates in the background and report new releases. Automatic runtime updates are opt-in: add `--auto-update --update-channel beta` when running the installer. Prepared updates activate on a later idle Agent startup; browser/Skill changes prompt a full upgrade. See [update controls and limits](distribution/README.md#update-and-uninstall).
86
+
87
+ For browser control, load the installer-provided extension directory through **Load unpacked** at `chrome://extensions` (or Edge's extension page), then click **Connect local bridge** in its popup. Restart the Agent client and describe a task, for example:
88
+
89
+ > List the connected sessions, connect the test browser page as `mail`, and show me its current screen before making changes.
90
+
91
+ **MCP browser control uses the extension backend. Playwright is excluded from MCP**, including existing Playwright sessions and tasks using them. Playwright remains available through CLI/Runtime for managed test browsers. The extension works with existing website tabs and their login state; it does not extract DOM content for visual decisions.
92
+
93
+ The installer configures Saygo-scoped permissions for Claude and Qoder/QoderCN. Codex approval setup and client-policy limits are documented in the [distribution guide](distribution/README.md). Qoder integration covers the CLI; IDE integration is not claimed verified.
94
+
95
+ For direct package installation during development:
96
+
97
+ ```sh
98
+ python3 -m pip install -e '.[mcp]'
99
+ saygo --help
100
+ saygo-mcp --profile device
101
+ ```
102
+
103
+ Install only the needed extras: `mobile`, `windows`, `mac`, `desktop`, `browser` (CLI Playwright), `selenium`, or `qa`. A browser-extension-only MCP setup does not need the mobile toolchain. See the [operation guide](docs/agent-control.md) and [plugin guide](plugins/saygo-device/README.md).
104
+
105
+ ## Desktop application
106
+
107
+ **Under development and testing / 开发测试中。**
108
+
109
+ Saygo Desktop centers on a conversation, with task history in the sidebar and a message composer at the bottom. Users can configure a model, connect named sessions, run a task, pause for human input, reply to continue, recover a task and export evidence.
110
+
111
+ - **Windows:** a native x64 portable ZIP has been built. Extract the entire folder and run `SaygoDesktop.exe`; keep `SaygoNativeHost.exe` and `_internal` alongside it. No WSL, Python or pyenv installation is needed. The main application opens without a console; the separate native host handles browser messaging.
112
+ - **macOS:** `.app` and DMG packaging scripts and a macOS CI job are prepared. No macOS build/runtime validation has been completed yet.
113
+ - **Linux:** the standalone GUI has passed local startup checks. Browser/mobile operation is available through the corresponding backends; local Linux desktop-window automation is not implemented.
114
+
115
+ The application accepts an OpenAI-compatible vision endpoint. Keys can stay in memory for the session or use a supported OS credential store; they are not written to `desktop.json`. Screenshots and task text are sent to the configured provider.
116
+
117
+ Developers can launch from source:
118
+
119
+ ```sh
120
+ python3 -m pip install -e '.[desktop]'
121
+ saygo-desktop
122
+ ```
123
+
124
+ Add `windows` or `mac` extras for native desktop input. Native packaging runs **on the target OS**:
125
+
126
+ ```sh
127
+ python3 -m pip install pyinstaller
128
+ python3 scripts/build_desktop.py
129
+ python3 scripts/package_desktop.py
130
+ ```
131
+
132
+ Output: Windows ZIP, macOS DMG or Linux tar.gz under `dist/installers`, each with a SHA256 checksum. The manual [desktop workflow](.github/workflows/desktop.yml) builds CI artifacts. These are development builds without release signing or notarization. See [desktop usage and validation](docs/desktop.md).
133
+
134
+ ## Observe, act, verify
135
+
136
+ CLI and MCP share named session state under `SAYGO_HOME_DIR` (default `~/.saygo`). Clients must use the same state directory and a backend available to both entrances to operate the same target.
137
+
138
+ ```sh
139
+ # Existing browser: install and connect the extension first.
140
+ saygo device connect --platform browser --backend extension --session mail
141
+
142
+ # Android device/emulator; obtain its ID with device list.
143
+ saygo device list --platform android
144
+ saygo device connect --platform android --device DEVICE_ID --session phone
145
+
146
+ # Windows window-title substring; use --platform mac for a macOS app.
147
+ saygo device connect --platform windows --app 'Example App' --session admin
148
+
149
+ saygo device capabilities --session mail
150
+ saygo doctor --session mail
151
+ saygo device screenshot --session mail
152
+
153
+ # Replace OBSERVATION_ID with the returned ID, and choose coordinates from that image.
154
+ saygo device act '{"type":"tap","x":50,"y":40,"coordinate_space":"percent"}' \
155
+ --session mail --observation-id OBSERVATION_ID --observe-after
156
+ saygo device wait --session mail --mode stable --timeout 5
157
+ ```
158
+
159
+ Observations include identity, target, dimensions and coordinate mappings. Crop observations retain the mapping to the original screen. MCP `device_observe` and action results with observations return image content; CLI returns image paths and metadata. Query capabilities before using platform-dependent actions.
160
+
161
+ **Dispatched input or a stable frame does not establish business success.** Inspect the resulting screen. Prefer visible buttons and menus over keyboard shortcuts. Unsupported actions fail explicitly; Windows background mode must not silently fall back to global keyboard/mouse input. See [control details](docs/control.md).
162
+
163
+ ## Tasks, handoff and recovery
164
+
165
+ Interactive tasks reuse Runtime while an Agent decides one step at a time. Explicit JSON workflows use `saygo workflow`; they do not require a model planner.
166
+
167
+ ```sh
168
+ saygo task create '{"phone":"phone","mail":"mail","admin":"admin"}'
169
+ saygo task observe TASK_ID --resource phone
170
+ saygo task submit TASK_ID --resource phone --request-id focus-registration \
171
+ --observation-id OBSERVATION_ID \
172
+ --action '{"type":"tap","x_pct":50,"y_pct":40}' --note 'Focus the registration form'
173
+ saygo task handoff TASK_ID --instructions 'Please sign into the test mailbox'
174
+ saygo task resume TASK_ID --note 'User returned control after login'
175
+ saygo task recover TASK_ID
176
+ saygo task timeline TASK_ID
177
+ saygo task finish TASK_ID --note 'Verified the final screen'
178
+ saygo task export TASK_ID --out evidence.zip
179
+ ```
180
+
181
+ Use the IDs returned by create/observe. MCP exposes the same task commands through `agent_task`. Project aliases can be saved with `saygo resources bind NAME SESSION`.
182
+
183
+ Runtime records dispatch intent before input, deduplicates request IDs, and marks interrupted actions with unknown results as `needs_review`; it never blindly replays them. Handoff blocks automatic input, and resume obtains fresh observations. Tasks retain resource ownership until finished or cancelled; use the owning task interface while a session is bound. Local desktop windows share an input lock.
184
+
185
+ Execution facts, errors, before/after captures and Agent notes are recorded separately. Evidence exports can contain application content and entered text. See [interactive task semantics](docs/agent-control.md), [workflow format](docs/runtime.md) and [workflow examples](examples/workflows).
186
+
187
+ ## Platforms and validation limits
188
+
189
+ | Target | Implementation / current boundary |
190
+ |---|---|
191
+ | Android | Appium + UiAutomator2; discovery/provisioning uses adb. Windows-host emulator installation and basic visual actions from WSL have been exercised. |
192
+ | iOS | Appium + XCUITest; local setup requires macOS and full Xcode. New provisioning paths remain mock-tested. |
193
+ | Chrome / Edge | Extension + native messaging for MCP and the desktop GUI; store installation and fresh-machine setup still require acceptance tests. |
194
+ | Managed test browser | Playwright/CDP through CLI/Runtime; Selenium remains available for QA. Playwright is rejected by MCP. |
195
+ | Windows desktop | Native driver or PowerShell/Win32 runner; WSL is optional. Experimental background control depends on application controls and rejects unsupported shortcuts. |
196
+ | macOS desktop | Window capture and foreground input; requires Screen Recording and Accessibility permissions. Native packaging and full task execution remain unverified. |
197
+ | Remote desktop | Experimental RDP prototype; not a stable supported deployment path. |
198
+
199
+ Windows native desktop tests, frozen EXE startup and native-host handshake passed. Linux Qt startup and packaging passed. These checks do **not** establish clean-machine installation, a live model-driven task or the full phone registration → email activation → desktop confirmation acceptance scenario. Detailed evidence boundaries: [desktop](docs/desktop.md), [Agent control](docs/agent-control.md), [mobile](docs/mobile.md), [distribution](distribution/README.md).
200
+
201
+ `doctor` checks connection, capture and image readability. Input remains untested unless an explicit `--probe-action` is supplied on a harmless target; its result still needs visual inspection.
202
+
203
+ ## Configuration
204
+
205
+ External Agent control needs no Saygo LLM API key. The standalone GUI has its own model settings. Optional CLI QA settings load in this order:
206
+
207
+ 1. Built-in defaults.
208
+ 2. `$SAYGO_HOME_DIR/config.env` (default `~/.saygo/config.env`).
209
+ 3. Working-project `.env`, or the explicit file selected by `SAYGO_CONFIG_FILE`.
210
+ 4. Process environment variables.
211
+
212
+ `saygo init` creates a project template; `saygo init --user` creates a user template. Existing files are preserved. Installed package directories are not searched for `.env`; private configuration is never bundled in releases. The Agent installer supports `--config-file /absolute/path/to/private.env` to retain a file reference without copying its contents.
213
+
214
+ ## BDD QA and other tools
215
+
216
+ The existing QA engine remains available for `.feature` (Gherkin) regression cases, visual reports, model tiering and optional element location:
217
+
218
+ ```sh
219
+ python3 -m pip install -e '.[qa,mobile]'
220
+ saygo init
221
+ # Configure a vision model and target in the private .env file before running.
222
+ saygo run tests/my-app/login.feature --report
223
+ ```
224
+
225
+ ```gherkin
226
+ # saygo-platform: android
227
+ # saygo-package: com.example.app
228
+ Feature: Login
229
+ @auto @android
230
+ Scenario: Show the login form
231
+ Given the app is launched
232
+ When the user taps "Log in"
233
+ Then the email and password fields are visible
234
+ ```
235
+
236
+ QA verdicts are model judgements with recorded evidence, not independent proof. Use [probe plugins](docs/probes.md) for non-visual facts such as backend writes. Figma test generation and visual review remain available through `saygo figma`. The existing [`/saygo-drive` Skill](.claude/skills/saygo-drive/SKILL.md) provides a separate QA-oriented Agent workflow; general cross-device tasks should use the shared operation Skill and Runtime records.
237
+
238
+ For QA execution guards, model configuration, case conventions and module responsibilities, see [agent.md](agent.md), [`.env.example`](.env.example) and [architecture](docs/architecture.md).
239
+
240
+ ## 中文说明
241
+
242
+ Saygo 为外部编程 Agent 提供手机、浏览器和桌面窗口的视觉操作能力:**观察 → 操作 → 新观察**,并保存跨端任务进度、执行事实和截图。
243
+
244
+ - **命令行用户**:安装 Claude Code / Codex / Qoder / QoderCN 的集成,由现有 Agent 决策,无需给 Saygo 配模型 Key。当前改名版本请使用上方源码安装步骤;Saygo 品牌安装包发布后再使用单命令下载入口。安装后重启客户端。
245
+ - **窗口桌面用户**:使用 Qt 桌面版,在界面配置自己的视觉模型 API、模型名和 Key。Windows 原生便携包无需 WSL、Python 或 pyenv。macOS DMG 的脚本和 CI 已就绪,但尚未完成 macOS 构建与实测。
246
+ - **浏览器**:MCP 和桌面版使用 Chrome/Edge 扩展,保留现有页面和登录状态;MCP 不支持 Playwright。扩展暂通过开发者模式加载,未声称已上架商店。
247
+ - **恢复与接管**:CLI/MCP 共用命名会话;`saygo task` 保存操作记录、支持人工接管和中断恢复。结果不确定的动作需核对,不自动重放。点击派发成功或画面稳定都不等于业务完成。
248
+ - **测试边界**:Windows EXE 已通过启动和桥接握手验证,完整跨端业务验收与干净机器安装仍需实测;不要将模拟测试当作真机兼容性证明。
249
+
250
+ 安装与更新见[分发说明](distribution/README.md),窗口版见[桌面指南](docs/desktop.md),会话、操作和恢复见[Agent 操作指南](docs/agent-control.md),开发约束见[通用 agent.md](agent.md)。
251
+
252
+ ## License
253
+
254
+ Saygo is licensed under [MIT](LICENSE). Third-party dependencies retain their respective licenses.
255
+
256
+ Saygo 采用 MIT 许可证;第三方依赖遵循各自许可证。
@@ -0,0 +1,28 @@
1
+ # Saygo Browser privacy policy
2
+
3
+ Saygo Browser is a local bridge for user-directed programming Agents. Connecting
4
+ it makes website tabs in the current browser profile available to the local Saygo
5
+ runtime, including tabs opened later. You can disconnect with Release in the popup.
6
+
7
+ While connected, the extension can read tab URLs and titles, capture screenshots,
8
+ and send visual input. It automatically observes network traffic for controllable
9
+ tabs. The bounded in-memory network journal may contain request/response headers,
10
+ bodies, WebSocket messages and server-sent events. These can contain personal data,
11
+ cookies, passwords, access tokens or other sensitive page content. Browser-restricted
12
+ pages cannot be controlled. Do not connect a profile containing data you do not
13
+ want your Agent to access.
14
+
15
+ The extension communicates with a separately installed native messaging host on
16
+ your computer. It does not send developer analytics or sell data. The local Saygo
17
+ runtime may save observations, action records and reports on disk. Your Agent and
18
+ any model service it uses may receive this information; their settings and privacy
19
+ policies govern that processing. This policy does not promise that your Agent
20
+ keeps all information on your computer.
21
+
22
+ Disconnecting ends extension control and clears the active network journal. It does
23
+ not erase records already returned to the Agent or saved by Saygo. Removing the
24
+ extension or unregistering the native host also preserves local task records. You
25
+ can delete those records from your Saygo data directory when no longer needed.
26
+
27
+ Questions: https://github.com/WilliamSkyWalker/saygo/issues (do not include secrets
28
+ or private screenshots in public issues).