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.
- saygo_agent_control-0.4.3/LICENSE +21 -0
- saygo_agent_control-0.4.3/MANIFEST.in +16 -0
- saygo_agent_control-0.4.3/PKG-INFO +318 -0
- saygo_agent_control-0.4.3/README.md +256 -0
- saygo_agent_control-0.4.3/distribution/PRIVACY.md +28 -0
- saygo_agent_control-0.4.3/distribution/PYPI.md +64 -0
- saygo_agent_control-0.4.3/distribution/README.md +230 -0
- saygo_agent_control-0.4.3/distribution/RELEASE_NOTES.md +83 -0
- saygo_agent_control-0.4.3/distribution/STORE_LISTING.md +40 -0
- saygo_agent_control-0.4.3/distribution/release.json +6 -0
- saygo_agent_control-0.4.3/docs/desktop.md +106 -0
- saygo_agent_control-0.4.3/extensions/saygo-browser/LICENSE +21 -0
- saygo_agent_control-0.4.3/extensions/saygo-browser/background.js +288 -0
- saygo_agent_control-0.4.3/extensions/saygo-browser/icons/128.png +0 -0
- saygo_agent_control-0.4.3/extensions/saygo-browser/icons/16.png +0 -0
- saygo_agent_control-0.4.3/extensions/saygo-browser/icons/32.png +0 -0
- saygo_agent_control-0.4.3/extensions/saygo-browser/icons/48.png +0 -0
- saygo_agent_control-0.4.3/extensions/saygo-browser/manifest.json +28 -0
- saygo_agent_control-0.4.3/extensions/saygo-browser/network.js +144 -0
- saygo_agent_control-0.4.3/extensions/saygo-browser/popup.html +9 -0
- saygo_agent_control-0.4.3/extensions/saygo-browser/popup.js +11 -0
- saygo_agent_control-0.4.3/plugins/saygo-device/.claude-plugin/plugin.json +38 -0
- saygo_agent_control-0.4.3/plugins/saygo-device/.codex-plugin/plugin.json +17 -0
- saygo_agent_control-0.4.3/plugins/saygo-device/.mcp.json +9 -0
- saygo_agent_control-0.4.3/plugins/saygo-device/README.md +43 -0
- saygo_agent_control-0.4.3/plugins/saygo-device/commands/doctor.md +15 -0
- saygo_agent_control-0.4.3/plugins/saygo-device/skills/device/SKILL.md +47 -0
- saygo_agent_control-0.4.3/pyproject.toml +50 -0
- saygo_agent_control-0.4.3/saygo/__init__.py +0 -0
- saygo_agent_control-0.4.3/saygo/browser_bridge.py +11 -0
- saygo_agent_control-0.4.3/saygo/cli.py +52 -0
- saygo_agent_control-0.4.3/saygo/commands/__init__.py +1 -0
- saygo_agent_control-0.4.3/saygo/commands/background.py +289 -0
- saygo_agent_control-0.4.3/saygo/commands/device.py +109 -0
- saygo_agent_control-0.4.3/saygo/commands/doctor.py +71 -0
- saygo_agent_control-0.4.3/saygo/commands/figma.py +225 -0
- saygo_agent_control-0.4.3/saygo/commands/probes.py +140 -0
- saygo_agent_control-0.4.3/saygo/commands/run.py +359 -0
- saygo_agent_control-0.4.3/saygo/commands/targets.py +150 -0
- saygo_agent_control-0.4.3/saygo/commands/task.py +51 -0
- saygo_agent_control-0.4.3/saygo/commands/toolchain.py +29 -0
- saygo_agent_control-0.4.3/saygo/config.py +380 -0
- saygo_agent_control-0.4.3/saygo/desktop/__init__.py +1 -0
- saygo_agent_control-0.4.3/saygo/desktop/app.py +425 -0
- saygo_agent_control-0.4.3/saygo/desktop/model.py +98 -0
- saygo_agent_control-0.4.3/saygo/desktop/runner.py +157 -0
- saygo_agent_control-0.4.3/saygo/devices/__init__.py +1 -0
- saygo_agent_control-0.4.3/saygo/devices/actions.py +113 -0
- saygo_agent_control-0.4.3/saygo/devices/control.py +325 -0
- saygo_agent_control-0.4.3/saygo/devices/diagnostics.py +23 -0
- saygo_agent_control-0.4.3/saygo/devices/mobile.py +547 -0
- saygo_agent_control-0.4.3/saygo/devices/mobile_host.py +241 -0
- saygo_agent_control-0.4.3/saygo/devices/mobile_host_worker.py +164 -0
- saygo_agent_control-0.4.3/saygo/devices/mobile_relay.py +123 -0
- saygo_agent_control-0.4.3/saygo/devices/network.py +27 -0
- saygo_agent_control-0.4.3/saygo/devices/observations.py +105 -0
- saygo_agent_control-0.4.3/saygo/devices/service.py +293 -0
- saygo_agent_control-0.4.3/saygo/devices/simulator.py +84 -0
- saygo_agent_control-0.4.3/saygo/devices/toolchain.py +413 -0
- saygo_agent_control-0.4.3/saygo/devices/windows_no_console.cjs +14 -0
- saygo_agent_control-0.4.3/saygo/drive/__init__.py +6 -0
- saygo_agent_control-0.4.3/saygo/drive/render.py +104 -0
- saygo_agent_control-0.4.3/saygo/integrations/__init__.py +1 -0
- saygo_agent_control-0.4.3/saygo/integrations/browser_bridge.py +299 -0
- saygo_agent_control-0.4.3/saygo/integrations/browser_setup.py +73 -0
- saygo_agent_control-0.4.3/saygo/integrations/figma.py +221 -0
- saygo_agent_control-0.4.3/saygo/integrations/figma_ops.py +250 -0
- saygo_agent_control-0.4.3/saygo/integrations/figma_via_mcp.py +269 -0
- saygo_agent_control-0.4.3/saygo/logger.py +71 -0
- saygo_agent_control-0.4.3/saygo/mcp/__init__.py +9 -0
- saygo_agent_control-0.4.3/saygo/mcp/backend_policy.py +25 -0
- saygo_agent_control-0.4.3/saygo/mcp/client.py +310 -0
- saygo_agent_control-0.4.3/saygo/mcp/server.py +948 -0
- saygo_agent_control-0.4.3/saygo/platforms/__init__.py +52 -0
- saygo_agent_control-0.4.3/saygo/platforms/appium.py +517 -0
- saygo_agent_control-0.4.3/saygo/platforms/appium_server.py +195 -0
- saygo_agent_control-0.4.3/saygo/platforms/base.py +154 -0
- saygo_agent_control-0.4.3/saygo/platforms/browser.py +318 -0
- saygo_agent_control-0.4.3/saygo/platforms/browser_extension.py +141 -0
- saygo_agent_control-0.4.3/saygo/platforms/browser_playwright.py +308 -0
- saygo_agent_control-0.4.3/saygo/platforms/desktop.py +148 -0
- saygo_agent_control-0.4.3/saygo/platforms/desktop_mac.py +232 -0
- saygo_agent_control-0.4.3/saygo/platforms/desktop_win.py +328 -0
- saygo_agent_control-0.4.3/saygo/platforms/device_session.py +440 -0
- saygo_agent_control-0.4.3/saygo/platforms/mjpeg.py +110 -0
- saygo_agent_control-0.4.3/saygo/platforms/rdp.py +260 -0
- saygo_agent_control-0.4.3/saygo/platforms/selenium_grid.py +29 -0
- saygo_agent_control-0.4.3/saygo/platforms/windows_runner.ps1 +827 -0
- saygo_agent_control-0.4.3/saygo/platforms/windows_runner.py +211 -0
- saygo_agent_control-0.4.3/saygo/probes/__init__.py +391 -0
- saygo_agent_control-0.4.3/saygo/probes/base.py +234 -0
- saygo_agent_control-0.4.3/saygo/probes/spec.py +190 -0
- saygo_agent_control-0.4.3/saygo/probes/subprocess_probe.py +196 -0
- saygo_agent_control-0.4.3/saygo/qa/__init__.py +1 -0
- saygo_agent_control-0.4.3/saygo/qa/agent.py +1340 -0
- saygo_agent_control-0.4.3/saygo/qa/brain.py +943 -0
- saygo_agent_control-0.4.3/saygo/qa/cases.py +423 -0
- saygo_agent_control-0.4.3/saygo/qa/device_setup.py +337 -0
- saygo_agent_control-0.4.3/saygo/qa/execution.py +461 -0
- saygo_agent_control-0.4.3/saygo/qa/gherkin.py +532 -0
- saygo_agent_control-0.4.3/saygo/qa/healer.py +195 -0
- saygo_agent_control-0.4.3/saygo/qa/planner.py +204 -0
- saygo_agent_control-0.4.3/saygo/qa/report.py +508 -0
- saygo_agent_control-0.4.3/saygo/qa/step_validator.py +249 -0
- saygo_agent_control-0.4.3/saygo/runtime/__init__.py +6 -0
- saygo_agent_control-0.4.3/saygo/runtime/cli.py +67 -0
- saygo_agent_control-0.4.3/saygo/runtime/engine.py +311 -0
- saygo_agent_control-0.4.3/saygo/runtime/interactive.py +320 -0
- saygo_agent_control-0.4.3/saygo/runtime/locking.py +50 -0
- saygo_agent_control-0.4.3/saygo/runtime/resources.py +159 -0
- saygo_agent_control-0.4.3/saygo/runtime/schema.py +102 -0
- saygo_agent_control-0.4.3/saygo/runtime/store.py +136 -0
- saygo_agent_control-0.4.3/saygo/setup.py +52 -0
- saygo_agent_control-0.4.3/saygo/skills/__init__.py +106 -0
- saygo_agent_control-0.4.3/saygo/skills/base.py +85 -0
- saygo_agent_control-0.4.3/saygo/skills/color_validator.py +241 -0
- saygo_agent_control-0.4.3/saygo/skills/keyboard_detector.py +93 -0
- saygo_agent_control-0.4.3/saygo/skills/layout_checker.py +259 -0
- saygo_agent_control-0.4.3/saygo/skills/loading_detector.py +169 -0
- saygo_agent_control-0.4.3/saygo/skills/ocr.py +168 -0
- saygo_agent_control-0.4.3/saygo/skills/scroll_map.py +184 -0
- saygo_agent_control-0.4.3/saygo/skills/smart_crop.py +164 -0
- saygo_agent_control-0.4.3/saygo/skills/toast_detector.py +208 -0
- saygo_agent_control-0.4.3/saygo/skills/visual_diff.py +204 -0
- saygo_agent_control-0.4.3/saygo/updates.py +334 -0
- saygo_agent_control-0.4.3/saygo/vision/__init__.py +1 -0
- saygo_agent_control-0.4.3/saygo/vision/grid.py +123 -0
- saygo_agent_control-0.4.3/saygo/vision/locator.py +259 -0
- saygo_agent_control-0.4.3/saygo/vision/settle.py +125 -0
- saygo_agent_control-0.4.3/saygo_agent_control.egg-info/PKG-INFO +318 -0
- saygo_agent_control-0.4.3/saygo_agent_control.egg-info/SOURCES.txt +141 -0
- saygo_agent_control-0.4.3/saygo_agent_control.egg-info/dependency_links.txt +1 -0
- saygo_agent_control-0.4.3/saygo_agent_control.egg-info/entry_points.txt +4 -0
- saygo_agent_control-0.4.3/saygo_agent_control.egg-info/requires.txt +35 -0
- saygo_agent_control-0.4.3/saygo_agent_control.egg-info/top_level.txt +1 -0
- saygo_agent_control-0.4.3/scripts/build_desktop.py +22 -0
- saygo_agent_control-0.4.3/scripts/build_release.py +80 -0
- saygo_agent_control-0.4.3/scripts/desktop_windows.spec +18 -0
- saygo_agent_control-0.4.3/scripts/install_agent_plugin.py +395 -0
- saygo_agent_control-0.4.3/scripts/install_saygo.py +74 -0
- saygo_agent_control-0.4.3/scripts/package_desktop.py +51 -0
- saygo_agent_control-0.4.3/setup.cfg +4 -0
- 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).
|