frely-cli 0.19.1 → 0.19.2
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.
- package/README.md +103 -164
- package/README.zh-CN.md +107 -157
- package/dist/device/connection-status.js +21 -0
- package/dist/device/connection-status.js.map +1 -1
- package/dist/diagnostics.js +11 -6
- package/dist/diagnostics.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,23 +2,35 @@
|
|
|
2
2
|
|
|
3
3
|
[English](README.md) · [简体中文](README.zh-CN.md)
|
|
4
4
|
|
|
5
|
-
`frely-cli` turns
|
|
5
|
+
`frely-cli` turns a computer you choose into a device that AI agents can work on from anywhere. ChatGPT, Claude, Codex and other MCP clients connect through **FrelyMCP** and use the files, shell commands and processes in the folders you allow. The computer connects out to Frely, so you open no ports.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
It is also the command line for your Frely account:
|
|
8
8
|
|
|
9
|
-
- **
|
|
10
|
-
- **Local
|
|
9
|
+
- **Device MCP**: let remote AI clients work on this computer.
|
|
10
|
+
- **Local MCP servers**: pass MCP servers that only run on this computer (for example on `127.0.0.1`) through to remote clients.
|
|
11
|
+
- **Agents, Prompts and Skills**: install a published Frely Agent as a local Skill, or install Prompts and Skills you bought.
|
|
12
|
+
- **Local model sharing**: publish a local Ollama or OpenAI-compatible runtime as your own Frely Provider.
|
|
11
13
|
|
|
12
|
-
|
|
14
|
+
## Install
|
|
13
15
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
16
|
+
### A server, with a Frely account (no browser)
|
|
17
|
+
|
|
18
|
+
Get a one-time install command and paste it on the server. It installs `frely`, signs in to your account, enables Device MCP and starts the background service. Nothing opens in a browser and nothing asks a question.
|
|
19
|
+
|
|
20
|
+
Get the command in either place:
|
|
21
|
+
|
|
22
|
+
- On the Frely website: **My Devices → Add a computer → Create install command**.
|
|
23
|
+
- In ChatGPT or Claude connected to FrelyMCP: ask it to add a computer. `list_devices` returns the command.
|
|
24
|
+
|
|
25
|
+
It looks like this:
|
|
26
|
+
|
|
27
|
+
```sh
|
|
28
|
+
curl -fsSL https://frely.cloud/start.sh | FRELY_INSTALL_TOKEN=fit_... sh
|
|
17
29
|
```
|
|
18
30
|
|
|
19
|
-
|
|
31
|
+
The token works once and expires after 15 minutes. It is not saved on the computer. If the computer already has Frely installed or signed in, the command updates it and switches the sign-in to your account. On Linux, run `sudo loginctl enable-linger $USER` so the service stays online after you log out of SSH.
|
|
20
32
|
|
|
21
|
-
|
|
33
|
+
### A computer with a browser
|
|
22
34
|
|
|
23
35
|
```sh
|
|
24
36
|
# macOS / Linux
|
|
@@ -30,109 +42,88 @@ curl -fsSL https://frely.cloud/start.sh | sh
|
|
|
30
42
|
curl.exe -fsSLo "$env:TEMP\frely-start.ps1" https://frely.cloud/start.ps1; powershell -NoProfile -ExecutionPolicy Bypass -File "$env:TEMP\frely-start.ps1"
|
|
31
43
|
```
|
|
32
44
|
|
|
33
|
-
|
|
45
|
+
The script installs the latest `frely`, then runs `frely mcp start`: it opens the browser to sign in (new accounts can register on the same page), asks you to approve this device and prints your MCP URL. Run it again any time to update; it restarts the background service on the new version.
|
|
34
46
|
|
|
35
|
-
|
|
47
|
+
The workspace is your home directory by default (credential and shell start-up files stay protected). Set `FRELY_WORKSPACE=/path` to share another folder, and `FRELY_INSTALL_DIR` to install somewhere other than `~/.local/bin`.
|
|
36
48
|
|
|
37
|
-
|
|
49
|
+
### Install only
|
|
38
50
|
|
|
39
|
-
Or
|
|
51
|
+
`install.sh` and `install.ps1` (same URLs, `https://frely.cloud/install.sh`) only install the program, for scripts, Skills and agents that need the CLI. Or use npm (Node.js 22 or newer):
|
|
40
52
|
|
|
41
53
|
```sh
|
|
42
54
|
npm install --global --ignore-scripts frely-cli@latest
|
|
43
55
|
```
|
|
44
56
|
|
|
45
|
-
|
|
57
|
+
The installers pick the right executable for your platform, check its SHA-256 and install into your user directory without Node.js. They download from GitHub Releases first and fall back to npmmirror and npmjs (`@frelyhq/cli-<platform>`) when GitHub is slow or unreachable. `FRELY_INSTALL_SOURCES` changes the order.
|
|
46
58
|
|
|
47
|
-
|
|
59
|
+
## Common commands
|
|
48
60
|
|
|
49
|
-
|
|
61
|
+
| Command | What it does |
|
|
62
|
+
| --- | --- |
|
|
63
|
+
| `frely mcp start` | Sign in if needed, enable Device MCP, start the service and print the MCP URL. Safe to re-run. |
|
|
64
|
+
| `frely mcp status` | Show the MCP URL, workspace, authorization expiry and service state. |
|
|
65
|
+
| `frely mcp workspace add <path>` | Share another folder. `frely mcp workspace list` shows them all. |
|
|
66
|
+
| `frely mcp stop` / `frely mcp start` | Pause or resume the background service. |
|
|
67
|
+
| `frely mcp remove` | Revoke access for every client and uninstall the service. |
|
|
68
|
+
| `frely doctor` | Check sign-in, installation, service and connection. `-v` for details. |
|
|
69
|
+
| `frely update` | Update to the latest version in place. |
|
|
70
|
+
| `frely login` / `frely logout` | Sign in or out of your Frely account. |
|
|
71
|
+
| `frely uninstall` | Remove Frely from this computer (lists everything first). |
|
|
50
72
|
|
|
51
|
-
|
|
52
|
-
cd /path/to/frely-cli
|
|
53
|
-
bun install
|
|
54
|
-
bun run build
|
|
55
|
-
bun install --global "$PWD"
|
|
56
|
-
```
|
|
73
|
+
Run any command group without a subcommand (for example `frely mcp` or `frely agent`) to see what it offers.
|
|
57
74
|
|
|
58
|
-
Use
|
|
59
|
-
|
|
60
|
-
```sh
|
|
61
|
-
export PATH="$(bun pm bin -g):$PATH"
|
|
62
|
-
```
|
|
75
|
+
## Use frely-cli with FrelyMCP
|
|
63
76
|
|
|
64
|
-
|
|
77
|
+
FrelyMCP is one MCP address for your whole account: `https://mcp.frely.cloud/mcp`. Every computer where you ran `frely mcp start` appears behind it. `frely-cli` runs the tools on each computer; the AI client only needs the URL.
|
|
65
78
|
|
|
66
|
-
|
|
79
|
+
### Connect a client
|
|
67
80
|
|
|
68
|
-
|
|
81
|
+
1. On the computer to control, run `frely mcp start` (the install scripts above already do this). It prints the MCP URL.
|
|
82
|
+
2. Add the URL to your client as a remote MCP server with OAuth:
|
|
83
|
+
- ChatGPT or Claude: add a custom connector with the URL.
|
|
84
|
+
- Claude Code on another computer: `claude mcp add --transport http frely "https://mcp.frely.cloud/mcp"`, then open `/mcp` to authorize.
|
|
85
|
+
3. Sign in to Frely and approve the client.
|
|
69
86
|
|
|
70
|
-
|
|
71
|
-
frely login
|
|
72
|
-
```
|
|
87
|
+
To check the connection, ask the client to list the top-level names in your workspace. A result that matches the folder means it works.
|
|
73
88
|
|
|
74
|
-
|
|
89
|
+
### What the AI can do
|
|
75
90
|
|
|
76
|
-
|
|
91
|
+
- `list_devices` shows your computers, whether each is online and its workspaces. If you have none, it gives the install command above.
|
|
92
|
+
- Device tools take a `device` argument and run on that computer:
|
|
93
|
+
- `read`: list, read, search and find files in the workspace.
|
|
94
|
+
- `edit_file`: write whole files or edit lines, atomically.
|
|
95
|
+
- `process`: run shell commands, or start and manage long-running processes.
|
|
96
|
+
- `web_fetch`: read public web pages.
|
|
97
|
+
- `local_mcp_list` and `local_mcp_call` reach MCP servers on that computer that you turned on (see below).
|
|
98
|
+
- `frely_list` and `frely_call` manage your Frely account (API keys, credits, plans, orders). `frely api list|describe|call` is the same set from the terminal.
|
|
77
99
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
```sh
|
|
81
|
-
frely mcp url --workspace /path/to/project
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
`frely login` requests a restricted account session through browser device authorization. The first `frely mcp url` initializes a separate secure MCP key, requests browser approval for this device and workspace (the home directory when `--workspace` is omitted), installs the user-level Device Relay service (macOS LaunchAgent, Linux systemd user unit, or Windows Task Scheduler), and prints the MCP URL. The default authorization is 90 days; `--days 1..365` selects a duration.
|
|
85
|
-
|
|
86
|
-
`frely mcp url` is idempotent: once enabled it only prints the same URL, so run it again whenever you need the address. Prompts go to stderr, so stdout remains a single URL or, with `--json`, a JSON object. No URL is printed if approval or service installation fails. To expose more directories, use `frely mcp workspace add <path>`; `frely mcp workspace list` lists them. A command group run without a subcommand (for example `frely mcp workspace` or `frely agent`) prints the subcommands under it.
|
|
100
|
+
The AI client's own shell still runs where the client runs; ask it to use the Frely tools for work on your computer. All clients share each computer's workspaces and running processes.
|
|
87
101
|
|
|
88
102
|
### Local MCP servers on this computer
|
|
89
103
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
Add the exact printed URL to a remote MCP client with OAuth support, choose OAuth and complete authorization. Keep the computer online. Verify the first connection by asking the client to list the top-level names in your selected workspace, without writing files or running shell commands — a returned result that matches the folder confirms connectivity.
|
|
93
|
-
|
|
94
|
-
For Claude Code on the calling computer:
|
|
104
|
+
Servers that listen only on loopback are found automatically (`frely mcp local list`). Add others with:
|
|
95
105
|
|
|
96
106
|
```sh
|
|
97
|
-
|
|
107
|
+
frely mcp local add <name> --url http://127.0.0.1:<port>/mcp
|
|
108
|
+
frely mcp local add <name> [--env KEY=VALUE] -- <command> [args...] # stdio
|
|
98
109
|
```
|
|
99
110
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
Authorization lifecycle: when the authorization has expired, `frely mcp url` asks for a new approval and rotates the MCP execution key; `frely mcp url --days 365` renews early. The MCP URL is the same for all your devices and does not change on renewal. Login refresh, OAuth refresh and restart do not extend authorization. `frely mcp stop|start` pauses or resumes the background service; `frely mcp remove` revokes access for every client and uninstalls the service (it keeps running provider-only when local Providers exist). Manage your devices in Frely → **Device MCP** (`/user/device-mcp`).
|
|
103
|
-
|
|
104
|
-
### Invoke a Frely-hosted Agent
|
|
105
|
-
|
|
106
|
-
Use a published Agent with account or restricted API-key access. To install it as a local trigger Skill (a full manifest URL is also accepted in place of the id):
|
|
107
|
-
|
|
108
|
-
```sh
|
|
109
|
-
frely agent install <distribution-id> \
|
|
110
|
-
--host pi \
|
|
111
|
-
--scope global \
|
|
112
|
-
--json
|
|
113
|
-
```
|
|
111
|
+
Each server stays hidden from remote clients until you turn it on, one by one, on the Frely connections page. Enabled servers run outside the command sandbox with your user account. Only loopback addresses are contacted, and headers and environment values never leave the computer.
|
|
114
112
|
|
|
115
|
-
|
|
113
|
+
### Authorization
|
|
116
114
|
|
|
117
|
-
|
|
118
|
-
printf '%s' "$FRELY_AGENT_KEY" | \
|
|
119
|
-
frely agent install <distribution-id> \
|
|
120
|
-
--host chatgpt \
|
|
121
|
-
--scope global \
|
|
122
|
-
--api-key-stdin \
|
|
123
|
-
--json
|
|
124
|
-
```
|
|
115
|
+
Device MCP access lasts 90 days by default; `frely mcp start --days 1..365` renews early. When it expires, `frely mcp start` asks for approval again. The URL never changes. Manage your computers on the Frely website under **My Devices**.
|
|
125
116
|
|
|
126
|
-
|
|
117
|
+
## More features
|
|
127
118
|
|
|
128
|
-
|
|
119
|
+
### Invoke a Frely-hosted Agent
|
|
129
120
|
|
|
130
121
|
```sh
|
|
131
|
-
|
|
132
|
-
|
|
122
|
+
frely agent install <distribution-id> --host claude-code --scope global
|
|
123
|
+
printf '%s' 'Your complete task' | frely agent run <distribution-id> --input-stdin --json
|
|
133
124
|
```
|
|
134
125
|
|
|
135
|
-
`
|
|
126
|
+
`--host` is one of `chatgpt`, `codex`, `claude-code`, `pi` or `generic`. A full manifest URL also works in place of the id. To use a Creator's sponsored API key instead of your account, pass it on stdin with `--api-key-stdin`; it is stored in the secure credential store, never in the Skill. Use short-lived, single-model keys with a bounded quota. `frely agent status <id>` shows the Skill and the key's budget; `frely agent remove <id>` removes both.
|
|
136
127
|
|
|
137
128
|
### Install marketplace Prompts and Skills
|
|
138
129
|
|
|
@@ -140,131 +131,79 @@ printf '%s' 'Your complete task' | \
|
|
|
140
131
|
frely item install <item-id> --host claude-code
|
|
141
132
|
```
|
|
142
133
|
|
|
143
|
-
|
|
134
|
+
The first call opens a browser for Frely Cloud authorization. A paid part is installed only if your account holds a pass; otherwise the command says how to buy one. Skills go to the host's Skill folder, Prompts to `--dir` (default: current directory), and scripts are saved without execute permission. Frely never overwrites a folder it did not install or a file you edited. After you review an installed item, `frely item trust <folder>` remembers it; a new version needs a new review.
|
|
144
135
|
|
|
145
|
-
Cloud MCPs you buy are not installed on the
|
|
136
|
+
Cloud MCPs you buy are not installed on the computer: enable them for a connection on the Frely website and their tools appear in FrelyMCP.
|
|
146
137
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
Publish a loopback OpenAI-compatible runtime as a Frely personal Provider. Ollama is the default driver:
|
|
138
|
+
### Local model sharing
|
|
150
139
|
|
|
151
140
|
```sh
|
|
152
141
|
frely provider share ollama
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
Custom endpoint and model selection:
|
|
156
|
-
|
|
157
|
-
```sh
|
|
158
|
-
frely provider share openai-compatible \
|
|
159
|
-
--url http://127.0.0.1:8080/v1 \
|
|
160
|
-
--models model-a,model-b \
|
|
161
|
-
--slot <personal-provider-slot-id> \
|
|
162
|
-
--name "Local GPU"
|
|
163
|
-
```
|
|
164
|
-
|
|
165
|
-
Requirements: Frely login, one empty active personal Provider slot (or a Creator plan, see below), loopback HTTP, OpenAI-compatible `/v1` (default Ollama endpoint `http://127.0.0.1:11434/v1`). Model names cannot contain whitespace or `/`.
|
|
166
|
-
|
|
167
|
-
The command creates a server-managed `openai-compatible` personal Provider, stores the local endpoint in owner-only CLI state, starts the Device Relay service, signs a Provider credential with the device Ed25519 key, configures CPA, and enables the declared models. Existing Frely Access Point and API-key flows consume the Provider.
|
|
168
|
-
|
|
169
|
-
### Use a local model as the base of your own Agent (Creator)
|
|
170
|
-
|
|
171
|
-
With no empty personal Provider slot, or with `--creator`, `frely provider share` creates a Creator Provider instead, counted against your Creator plan (Creator 3, Creator Plus 100). Its enabled models appear in Frely when you create an Agent. You do not sell the Provider: buyers call your Agent, which runs on your model. Keep this device online while the Agent is used, and make sure the local runtime returns `usage` in its responses.
|
|
172
|
-
|
|
173
|
-
Provider inspection:
|
|
174
|
-
|
|
175
|
-
```sh
|
|
142
|
+
frely provider share openai-compatible --url http://127.0.0.1:8080/v1 --models model-a,model-b --name "Local GPU"
|
|
176
143
|
frely provider list
|
|
177
144
|
```
|
|
178
145
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
## Update and diagnostics
|
|
182
|
-
|
|
183
|
-
```sh
|
|
184
|
-
frely doctor # signed-in account, installation path, distribution, latest stable, MCP/service state
|
|
185
|
-
frely doctor -v # + config paths, runtime details, authorization expiry, last heartbeat, sanitized errors
|
|
186
|
-
frely update # updates the running installation in place
|
|
187
|
-
```
|
|
146
|
+
This publishes a loopback OpenAI-compatible endpoint (Ollama by default at `http://127.0.0.1:11434/v1`) as a personal Frely Provider, using one empty personal Provider slot. With no empty slot, or with `--creator`, it creates a Creator Provider counted against your Creator plan, and its models can be the base of Agents you publish. Keep the computer online while it is used, and make sure the runtime returns `usage`. If setup stops halfway, run the same command again to resume.
|
|
188
147
|
|
|
189
|
-
|
|
148
|
+
## Local execution boundaries
|
|
190
149
|
|
|
191
|
-
|
|
150
|
+
- **Files**: file tools stay inside the shared workspaces, reject symlink escapes, cap reads and writes at 1 MiB and write atomically. Credential stores and shell start-up files are protected even inside the home directory.
|
|
151
|
+
- **Commands**: `process` runs as your OS user inside an OS sandbox. Credential folders are unreadable, writes are limited to the workspace and the temp directory, and network goes through a proxy. If the computer cannot sandbox (Windows, or Linux without `bubblewrap`, `socat` and `ripgrep`), commands are refused rather than run unsandboxed. You can open more on the Frely connections page: credential folders to read, extra folders to write, or a time-limited run without the sandbox. `FRELY_SANDBOX=off` turns the sandbox off on the device.
|
|
152
|
+
- **Credentials**: the MCP URL contains no secret. Clients hold OAuth tokens; the CLI holds a separate MCP execution key, encrypted with a master key in macOS Keychain, Windows Credential Manager or Linux Secret Service. Headless machines can set `FRELY_CREDENTIAL_KEY` (32 bytes) with `FRELY_CREDENTIAL_STORE=encrypted-file`. When authorization expires, requests and queued work stop; finished writes are not undone.
|
|
192
153
|
|
|
193
|
-
|
|
154
|
+
Details: [credential and installation boundaries](docs/credential-storage.md).
|
|
194
155
|
|
|
195
|
-
##
|
|
156
|
+
## Update, diagnose and uninstall
|
|
196
157
|
|
|
197
158
|
```sh
|
|
198
|
-
frely
|
|
199
|
-
frely
|
|
159
|
+
frely doctor # account, installation, latest version, MCP and service state
|
|
160
|
+
frely doctor -v # + config paths, authorization expiry, last heartbeat, sanitized errors
|
|
161
|
+
frely update # update in place, keeping your login, device, URL and workspace
|
|
162
|
+
frely uninstall # list everything, then remove it after you type yes (--yes for scripts)
|
|
200
163
|
```
|
|
201
164
|
|
|
202
|
-
`frely
|
|
203
|
-
|
|
204
|
-
It does not remove the Frely App (use `frely app uninstall`; the App's `app.json` is kept), Providers or Agents in your Frely account, the PATH lines `install.sh` added to shell profiles, edited Agent Skills, or marketplace items. Source checkouts, local links and unrecognised installations are reported and left alone. It refuses to run inside device MCP because it stops the service that runs the command; run it in a local terminal.
|
|
205
|
-
|
|
206
|
-
## Local execution boundaries
|
|
207
|
-
|
|
208
|
-
The local MCP server exposes four tools: `read` (list, read, search and find workspace files), `edit_file` (atomic whole-file writes and line edits), `process` (shell commands, run to completion or started as persistent processes) and `web_fetch` (read-only GET/HEAD of public URLs). Deleting, moving and creating directories go through `process`. Older tool names (`read_file`, `write_file`, `run_command` and so on) are no longer listed but still answer.
|
|
209
|
-
|
|
210
|
-
Filesystem tools are constrained to the selected workspace, reject symlink escapes, cap normal file reads/writes at 1 MiB, use no-follow reads, and use atomic replacement for writes. `process` commands execute with the current OS user's permissions inside an OS-level sandbox (credential folders unreadable, writes limited to the workspace and the temp directory, HTTP(S) and ssh/scp/sftp through a proxy). The sandbox fails closed: if this device cannot run it (Windows, or Linux without `bubblewrap`, `socat` and `ripgrep`), `process` commands are refused with an error explaining why, never run unsandboxed. The owner can open more from the Frely connections page: credential folders to read, build-cache or chosen directories to write, or a time-limited run without the sandbox for raw network connections (also the way to run commands on a device that cannot sandbox them). Setting `FRELY_SANDBOX=off` on the device turns the sandbox off entirely; `FRELY_SANDBOX_STRICT` is still accepted but no longer changes anything. The workspace itself only constrains the working directory.
|
|
211
|
-
|
|
212
|
-
Read-only local operations may overlap; writes and shell operations use the local fair scheduler — this avoids device-wide `busy -> 429` behavior.
|
|
213
|
-
|
|
214
|
-
## Authentication and secrets
|
|
165
|
+
`frely update` keeps the original install method and never downgrades. It pauses the background service, replaces the program after checking it, and restarts the service. On Windows it prints a PowerShell command to run in a local terminal. See [self-update](docs/self-update.md) and [service maintenance](docs/service-maintenance.md).
|
|
215
166
|
|
|
216
|
-
|
|
167
|
+
`frely uninstall` revokes this computer's access on the Frely side, removes the service, saved login, device identity, settings, caches and the Agent Skills Frely installed, and finally removes the `frely` program. It keeps the Frely App, your Providers and Agents in your account, the PATH lines the installer added, Skills you edited and marketplace items. Run it in a local terminal, not through Device MCP.
|
|
217
168
|
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
The stable MCP URL contains no credential. Remote clients hold OAuth credentials; the CLI holds the MCP execution private key. The Relay checks OAuth resource binding and the current MCP execution lease. Expiry blocks requests and queued work and cancels managed execution; it does not undo writes or create a sandbox around arbitrary shell programs.
|
|
221
|
-
|
|
222
|
-
Storage, migration, service injection, release requirements and threat boundaries: [credential and installation boundaries](docs/credential-storage.md).
|
|
223
|
-
|
|
224
|
-
## Architecture
|
|
225
|
-
|
|
226
|
-
- Product definition and generic client integration: [docs/device-mcp.md](docs/device-mcp.md)
|
|
227
|
-
- Device Relay transport: subprotocol, connection grant, reconnection, fallback state machine: [docs/device-transport.md](docs/device-transport.md)
|
|
228
|
-
- Relay OAuth 2.1 Authorization Code + PKCE, discovery and token endpoints: [docs/mcp-oauth-relay-contract.md](docs/mcp-oauth-relay-contract.md)
|
|
229
|
-
- Business API commands and authorization: [docs/api.md](docs/api.md)
|
|
230
|
-
- Frely Network commands (preview, not listed in `frely --help`): [docs/frely-network.md](docs/frely-network.md)
|
|
231
|
-
|
|
232
|
-
The public MCP URL is the canonical resource returned by Relay, `https://mcp.frely.cloud/mcp` (one URL per account, shared by all your devices). Use `frely mcp url`; do not derive the URL from the control-plane hostname. The URL contains no bearer secret.
|
|
233
|
-
|
|
234
|
-
## Commands
|
|
169
|
+
## All commands
|
|
235
170
|
|
|
236
171
|
```text
|
|
237
172
|
frely login [--relay <https-url>] [--no-browser]
|
|
173
|
+
frely login --email <address> [--mcp] [--workspace <path>] then frely login --code <6-digit code>
|
|
238
174
|
frely logout
|
|
175
|
+
frely uninstall [--yes] [--json]
|
|
239
176
|
frely doctor [-v] [--json]
|
|
240
177
|
frely update
|
|
241
|
-
frely mcp
|
|
178
|
+
frely mcp start [--workspace <path>] [--days 1..365] [--no-browser] [--json]
|
|
179
|
+
frely mcp status [--json]
|
|
180
|
+
frely mcp stop|remove
|
|
242
181
|
frely mcp workspace list [--json]
|
|
243
182
|
frely mcp workspace add|remove <path>
|
|
244
183
|
frely mcp local list [--json]
|
|
245
|
-
frely mcp local add <name> (--url <address> | -- <command> [args...])
|
|
184
|
+
frely mcp local add <name> (--url <address> | [--env KEY=VALUE] -- <command> [args...])
|
|
246
185
|
frely mcp local remove <name>
|
|
247
|
-
frely mcp stop|start|remove
|
|
248
186
|
frely agent install <distribution-id|manifest-url> [--host chatgpt|codex|claude-code|pi|generic] [--scope global|project] [--api-key-stdin] [--json]
|
|
249
187
|
frely agent run <distribution-id> (--input <text>|--input-stdin) [--json]
|
|
250
188
|
frely agent status (<distribution-id>|--api-key-stdin [--relay <url>]) [--json]
|
|
251
189
|
frely agent remove <distribution-id> [--json]
|
|
252
190
|
frely item install <item-id> [--host chatgpt|codex|claude-code|pi|generic] [--scope global|project] [--dir <path>] [--json]
|
|
191
|
+
frely item trust <folder> [--check]
|
|
253
192
|
frely provider share [ollama|openai-compatible] [--url <loopback-v1-url>] [--models <a,b>] [--slot <slot-id> | --creator] [--name <name>]
|
|
254
193
|
frely provider list [--json]
|
|
255
194
|
frely api list|describe|call
|
|
256
195
|
```
|
|
257
196
|
|
|
258
|
-
|
|
197
|
+
`frely help --agent --json` prints the full machine-readable contract, including commands not shown in `frely --help`: `frely mcp stdio` (serve the tools over stdio to a local client), `frely mcp serve` (the foreground process the service runs) and `frely network` (preview).
|
|
259
198
|
|
|
260
|
-
|
|
199
|
+
## Documentation
|
|
261
200
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
201
|
+
- [Device MCP](docs/device-mcp.md)
|
|
202
|
+
- [Device Relay transport](docs/device-transport.md)
|
|
203
|
+
- [MCP OAuth contract](docs/mcp-oauth-relay-contract.md)
|
|
204
|
+
- [`frely api`](docs/api.md)
|
|
205
|
+
- [Frely Network (preview)](docs/frely-network.md)
|
|
265
206
|
|
|
266
207
|
## License and trademarks
|
|
267
208
|
|
|
268
|
-
`frely-cli` is licensed under the Apache License 2.0; see [`LICENSE`](LICENSE). The Frely name, logos
|
|
269
|
-
|
|
270
|
-
See [`CONTRIBUTING.md`](CONTRIBUTING.md) for development guidance and [`SECURITY.md`](SECURITY.md) for private vulnerability reporting.
|
|
209
|
+
`frely-cli` is licensed under the Apache License 2.0; see [`LICENSE`](LICENSE). The Frely name, logos and product names are not licensed as trademarks; see [`TRADEMARKS.md`](TRADEMARKS.md). See [`CONTRIBUTING.md`](CONTRIBUTING.md) for development and [`SECURITY.md`](SECURITY.md) to report a vulnerability.
|
package/README.zh-CN.md
CHANGED
|
@@ -2,23 +2,35 @@
|
|
|
2
2
|
|
|
3
3
|
[English](README.md) · [简体中文](README.zh-CN.md)
|
|
4
4
|
|
|
5
|
-
`frely-cli` 把你指定的一台电脑变成 AI Agent
|
|
5
|
+
`frely-cli` 把你指定的一台电脑变成 AI Agent 可以在任何地方操作的设备。ChatGPT、Claude、Codex 等 MCP 客户端通过 **FrelyMCP** 连接,使用你授权的文件夹里的文件、Shell 命令和进程。电脑主动向 Frely 发起连接,不需要开放任何端口。
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
它也是 Frely 账号的命令行工具:
|
|
8
8
|
|
|
9
|
-
-
|
|
10
|
-
-
|
|
9
|
+
- **设备 MCP**:让远程 AI 客户端操作这台电脑。
|
|
10
|
+
- **本机 MCP 服务**:把只在这台电脑上运行的 MCP 服务(例如监听 `127.0.0.1` 的)转给远程客户端使用。
|
|
11
|
+
- **Agent、Prompt 与 Skill**:把已发布的 Frely Agent 安装为本地 Skill,或安装你购买的 Prompt 和 Skill。
|
|
12
|
+
- **本地模型共享**:把本机 Ollama 或 OpenAI 兼容运行时发布为你自己的 Frely Provider。
|
|
11
13
|
|
|
12
|
-
|
|
14
|
+
## 安装
|
|
13
15
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
16
|
+
### 服务器,已有 Frely 账号(无需浏览器)
|
|
17
|
+
|
|
18
|
+
拿到一条一次性安装命令,粘贴到服务器上运行。它会安装 `frely`、登录你的账号、开启设备 MCP 并启动后台服务,全程不打开浏览器,也不会提问。
|
|
19
|
+
|
|
20
|
+
在以下任一处获取命令:
|
|
21
|
+
|
|
22
|
+
- Frely 网站:**My Devices → Add a computer → Create install command**。
|
|
23
|
+
- 已连接 FrelyMCP 的 ChatGPT 或 Claude:让它添加一台电脑,`list_devices` 会返回这条命令。
|
|
24
|
+
|
|
25
|
+
命令形如:
|
|
26
|
+
|
|
27
|
+
```sh
|
|
28
|
+
curl -fsSL https://frely.cloud/start.sh | FRELY_INSTALL_TOKEN=fit_... sh
|
|
17
29
|
```
|
|
18
30
|
|
|
19
|
-
|
|
31
|
+
令牌只能用一次,15 分钟内有效,不会保存在电脑上。如果这台电脑已经安装或登录过 Frely,命令会更新它,并把登录切换到你的账号。Linux 上请运行 `sudo loginctl enable-linger $USER`,退出 SSH 后服务才能保持在线。
|
|
20
32
|
|
|
21
|
-
|
|
33
|
+
### 有浏览器的电脑
|
|
22
34
|
|
|
23
35
|
```sh
|
|
24
36
|
# macOS / Linux
|
|
@@ -30,230 +42,168 @@ curl -fsSL https://frely.cloud/start.sh | sh
|
|
|
30
42
|
curl.exe -fsSLo "$env:TEMP\frely-start.ps1" https://frely.cloud/start.ps1; powershell -NoProfile -ExecutionPolicy Bypass -File "$env:TEMP\frely-start.ps1"
|
|
31
43
|
```
|
|
32
44
|
|
|
33
|
-
|
|
45
|
+
脚本安装最新版 `frely`,然后运行 `frely mcp start`:打开浏览器登录(新账号可在同一页面注册),请你批准这台设备,最后输出 MCP URL。随时可以再运行一次来升级,它会用新版本重启后台服务。
|
|
34
46
|
|
|
35
|
-
`
|
|
47
|
+
工作区默认是用户主目录(凭据和 Shell 启动文件仍受保护)。设置 `FRELY_WORKSPACE=/path` 可共享其他文件夹,`FRELY_INSTALL_DIR` 可改变安装位置(默认 `~/.local/bin`)。
|
|
36
48
|
|
|
37
|
-
|
|
49
|
+
### 只安装
|
|
38
50
|
|
|
39
|
-
|
|
51
|
+
`install.sh` 和 `install.ps1`(同一域名,`https://frely.cloud/install.sh`)只安装程序,供脚本、Skill 和 Agent 使用。也可以用 npm(需要 Node.js 22 或更新版本):
|
|
40
52
|
|
|
41
53
|
```sh
|
|
42
54
|
npm install --global --ignore-scripts frely-cli@latest
|
|
43
55
|
```
|
|
44
56
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
### 从源码安装
|
|
48
|
-
|
|
49
|
-
用 Bun 安装当前源码:
|
|
50
|
-
|
|
51
|
-
```sh
|
|
52
|
-
cd /path/to/frely-cli
|
|
53
|
-
bun install
|
|
54
|
-
bun run build
|
|
55
|
-
bun install --global "$PWD"
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
全局安装命令请使用 `$PWD` 绝对路径。如果找不到 `frely`,把 Bun 全局 bin 目录加入 `PATH`:
|
|
57
|
+
安装器会选择对应平台的可执行文件,校验 SHA-256,安装到用户目录,不需要 Node.js。下载先走 GitHub Releases,GitHub 过慢或连不上时改用 npmmirror 和 npmjs(`@frelyhq/cli-<平台>`)。`FRELY_INSTALL_SOURCES` 可调整顺序。
|
|
59
58
|
|
|
60
|
-
|
|
61
|
-
export PATH="$(bun pm bin -g):$PATH"
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
当前源码没有 keytar 依赖和原生 npm 构建步骤。依赖安装支持 `npm ci --ignore-scripts` 与 `bun install --ignore-scripts`。仓库以 npm 作为 CI 与发布的规范包管理器并提交 `package-lock.json`;Bun 仅用于本地开发,变更依赖时请保持 lockfile 同步。
|
|
65
|
-
|
|
66
|
-
## 首次使用
|
|
59
|
+
## 常用命令
|
|
67
60
|
|
|
68
|
-
|
|
61
|
+
| 命令 | 作用 |
|
|
62
|
+
| --- | --- |
|
|
63
|
+
| `frely mcp start` | 需要时先登录,开启设备 MCP,启动服务并输出 MCP URL。可重复运行。 |
|
|
64
|
+
| `frely mcp status` | 显示 MCP URL、工作区、授权到期时间和服务状态。 |
|
|
65
|
+
| `frely mcp workspace add <path>` | 再共享一个文件夹。`frely mcp workspace list` 列出全部。 |
|
|
66
|
+
| `frely mcp stop` / `frely mcp start` | 暂停或恢复后台服务。 |
|
|
67
|
+
| `frely mcp remove` | 撤销所有客户端的访问并卸载服务。 |
|
|
68
|
+
| `frely doctor` | 检查登录、安装、服务和连接状态。加 `-v` 看详情。 |
|
|
69
|
+
| `frely update` | 原地升级到最新版。 |
|
|
70
|
+
| `frely login` / `frely logout` | 登录或退出 Frely 账号。 |
|
|
71
|
+
| `frely uninstall` | 从这台电脑移除 Frely(先列出全部内容)。 |
|
|
69
72
|
|
|
70
|
-
|
|
71
|
-
frely login
|
|
72
|
-
```
|
|
73
|
+
只输入命令组而不带子命令(如 `frely mcp`、`frely agent`)会列出该组的子命令。
|
|
73
74
|
|
|
74
|
-
|
|
75
|
+
## 与 FrelyMCP 配合使用
|
|
75
76
|
|
|
76
|
-
|
|
77
|
+
FrelyMCP 是整个账号共用的一个 MCP 地址:`https://mcp.frely.cloud/mcp`。每台运行过 `frely mcp start` 的电脑都在它后面。`frely-cli` 在各台电脑上执行工具,AI 客户端只需要这个 URL。
|
|
77
78
|
|
|
78
|
-
|
|
79
|
+
### 连接客户端
|
|
79
80
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
81
|
+
1. 在要被控制的电脑上运行 `frely mcp start`(上面的安装脚本已经包含这一步),它会输出 MCP URL。
|
|
82
|
+
2. 把 URL 作为使用 OAuth 的远程 MCP 服务加到客户端:
|
|
83
|
+
- ChatGPT 或 Claude:用这个 URL 添加自定义连接器。
|
|
84
|
+
- 另一台电脑上的 Claude Code:`claude mcp add --transport http frely "https://mcp.frely.cloud/mcp"`,然后打开 `/mcp` 完成授权。
|
|
85
|
+
3. 登录 Frely 并批准该客户端。
|
|
83
86
|
|
|
84
|
-
|
|
87
|
+
验证连接:让客户端列出工作区的顶层文件名,结果与文件夹一致即表示连通。
|
|
85
88
|
|
|
86
|
-
|
|
89
|
+
### AI 能做什么
|
|
87
90
|
|
|
88
|
-
|
|
91
|
+
- `list_devices` 列出你的电脑、是否在线及其工作区。没有电脑时,它会给出上面的安装命令。
|
|
92
|
+
- 设备工具带 `device` 参数,在那台电脑上执行:
|
|
93
|
+
- `read`:在工作区内列出、读取、搜索和查找文件。
|
|
94
|
+
- `edit_file`:原子地写入整个文件或按行修改。
|
|
95
|
+
- `process`:运行 Shell 命令,或启动和管理长时间运行的进程。
|
|
96
|
+
- `web_fetch`:读取公开网页。
|
|
97
|
+
- `local_mcp_list` 和 `local_mcp_call` 访问那台电脑上你已开启的 MCP 服务(见下文)。
|
|
98
|
+
- `frely_list` 和 `frely_call` 管理你的 Frely 账号(API Key、Credit、套餐、订单)。终端里的 `frely api list|describe|call` 是同一套操作。
|
|
89
99
|
|
|
90
|
-
|
|
100
|
+
AI 客户端自带的 Shell 仍在客户端所在的电脑上运行;要在你的电脑上工作,请让它使用 Frely 工具。所有客户端共享每台电脑的工作区和正在运行的进程。
|
|
91
101
|
|
|
92
|
-
|
|
102
|
+
### 本机 MCP 服务
|
|
93
103
|
|
|
94
|
-
|
|
104
|
+
只监听本机回环地址的服务会被自动发现(`frely mcp local list`)。其他服务这样添加:
|
|
95
105
|
|
|
96
106
|
```sh
|
|
97
|
-
|
|
107
|
+
frely mcp local add <name> --url http://127.0.0.1:<port>/mcp
|
|
108
|
+
frely mcp local add <name> [--env KEY=VALUE] -- <command> [args...] # stdio
|
|
98
109
|
```
|
|
99
110
|
|
|
100
|
-
|
|
111
|
+
每个服务默认对远程客户端隐藏,需要在 Frely 连接页面逐个开启。开启后的服务在命令沙箱之外、以你的用户身份运行。只会连接回环地址,headers 和环境变量不会离开这台电脑。
|
|
101
112
|
|
|
102
|
-
|
|
113
|
+
### 授权
|
|
103
114
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
使用有账号或受限 API-key 访问权限的已发布 Agent。安装为本地触发 Skill(也可以用完整 manifest URL 代替 id):
|
|
115
|
+
设备 MCP 授权默认 90 天;`frely mcp start --days 1..365` 可提前续期。到期后 `frely mcp start` 会再次请求批准。URL 永远不变。在 Frely 网站的 **My Devices** 管理你的电脑。
|
|
107
116
|
|
|
108
|
-
|
|
109
|
-
frely agent install <distribution-id> \
|
|
110
|
-
--host pi \
|
|
111
|
-
--scope global \
|
|
112
|
-
--json
|
|
113
|
-
```
|
|
117
|
+
## 更多功能
|
|
114
118
|
|
|
115
|
-
|
|
119
|
+
### 调用 Frely 托管的 Agent
|
|
116
120
|
|
|
117
121
|
```sh
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
--host chatgpt \
|
|
121
|
-
--scope global \
|
|
122
|
-
--api-key-stdin \
|
|
123
|
-
--json
|
|
122
|
+
frely agent install <distribution-id> --host claude-code --scope global
|
|
123
|
+
printf '%s' 'Your complete task' | frely agent run <distribution-id> --input-stdin --json
|
|
124
124
|
```
|
|
125
125
|
|
|
126
|
-
|
|
126
|
+
`--host` 可选 `chatgpt`、`codex`、`claude-code`、`pi` 或 `generic`。也可以用完整的 manifest URL 代替 id。要用 Creator 提供的赞助 API Key 而不是你的账号,用 `--api-key-stdin` 从 stdin 传入;Key 存入安全凭据库,不会写进 Skill。请使用短期、单模型、限额的 Key。`frely agent status <id>` 显示 Skill 和 Key 的额度;`frely agent remove <id>` 同时移除两者。
|
|
127
127
|
|
|
128
|
-
|
|
128
|
+
### 安装市场里的 Prompt 和 Skill
|
|
129
129
|
|
|
130
130
|
```sh
|
|
131
|
-
|
|
132
|
-
frely agent run '<distribution-id>' --input-stdin --json
|
|
131
|
+
frely item install <item-id> --host claude-code
|
|
133
132
|
```
|
|
134
133
|
|
|
135
|
-
|
|
134
|
+
首次调用会打开浏览器进行 Frely Cloud 授权。账号持有通行证时才安装付费部分,否则命令会告诉你如何购买。Skill 装到宿主的 Skill 目录,Prompt 装到 `--dir`(默认当前目录),脚本保存时不带执行权限。Frely 不会覆盖不是它安装的文件夹,也不会覆盖你改过的文件。审查过已安装的条目后,`frely item trust <folder>` 会记住;新版本需要重新审查。
|
|
136
135
|
|
|
137
|
-
|
|
136
|
+
你购买的云端 MCP 不会安装到电脑上:在 Frely 网站为某个连接开启后,它们的工具会出现在 FrelyMCP 里。
|
|
138
137
|
|
|
139
|
-
|
|
138
|
+
### 本地模型共享
|
|
140
139
|
|
|
141
140
|
```sh
|
|
142
141
|
frely provider share ollama
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
自定义端点与模型选择:
|
|
146
|
-
|
|
147
|
-
```sh
|
|
148
|
-
frely provider share openai-compatible \
|
|
149
|
-
--url http://127.0.0.1:8080/v1 \
|
|
150
|
-
--models model-a,model-b \
|
|
151
|
-
--slot <personal-provider-slot-id> \
|
|
152
|
-
--name "Local GPU"
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
要求:已登录 Frely、一个空闲的活跃个人 Provider slot、回环 HTTP、OpenAI 兼容 `/v1`(Ollama 默认端点 `http://127.0.0.1:11434/v1`)。模型名不能包含空格或 `/`。
|
|
156
|
-
|
|
157
|
-
该命令创建服务端管理的 `openai-compatible` 个人 Provider,把本地端点存入仅属主可读的 CLI 状态,启动 Device Relay 服务,用设备 Ed25519 key 签署 Provider 凭证,配置 CPA 并启用声明的模型。现有 Frely Access Point 与 API-key 流程即可消费该 Provider。
|
|
158
|
-
|
|
159
|
-
### 用本地模型作为自己 Agent 的底座(Creator)
|
|
160
|
-
|
|
161
|
-
没有空闲的个人 Provider 名额,或加上 `--creator` 时,`frely provider share` 会创建 Creator Provider,计入 Creator 套餐名额(Creator 3 个,Creator Plus 100 个)。它启用的模型会出现在 Frely 创建 Agent 的模型选择里。Provider 本身不对外售卖:买家调用的是你的 Agent,由你的模型驱动。Agent 被使用期间本机需保持在线,并且本地运行时的响应需包含 `usage`。
|
|
162
|
-
|
|
163
|
-
Provider 检查:
|
|
164
|
-
|
|
165
|
-
```sh
|
|
142
|
+
frely provider share openai-compatible --url http://127.0.0.1:8080/v1 --models model-a,model-b --name "Local GPU"
|
|
166
143
|
frely provider list
|
|
167
144
|
```
|
|
168
145
|
|
|
169
|
-
|
|
146
|
+
把本机回环地址上的 OpenAI 兼容端点(默认 Ollama `http://127.0.0.1:11434/v1`)发布为 Frely 个人 Provider,占用一个空的个人 Provider 名额。没有空名额或使用 `--creator` 时,会创建 Creator Provider,计入你的 Creator 套餐,其模型可作为你发布的 Agent 的底座。使用期间请保持电脑在线,并确保运行时在响应中返回 `usage`。设置中途停止时,再次运行同一命令即可继续。
|
|
170
147
|
|
|
171
|
-
##
|
|
172
|
-
|
|
173
|
-
```sh
|
|
174
|
-
frely doctor # 当前账号、安装路径、发行形态、最新稳定版、MCP/服务状态
|
|
175
|
-
frely doctor -v # 另加配置路径、运行时细节、授权到期、最近心跳、脱敏错误
|
|
176
|
-
frely update # 原地升级当前正在运行的安装
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
`frely update` 永不换安装器、不改 PATH、不降级更新版本。standalone 下载会先校验 SHA-256 并做启动测试再替换可执行文件;npm/Bun 安装保持原全局目录。匹配的、正在运行的 Device Relay 服务会被暂停维护、重启并在安装后检查;凭证、设备身份、MCP URL、工作区与授权到期均保留。Windows 上 `update` 打印检测到安装方式对应的 PowerShell 命令,请在本地终端执行。
|
|
148
|
+
## 本地执行边界
|
|
180
149
|
|
|
181
|
-
|
|
150
|
+
- **文件**:文件工具只在共享的工作区内操作,拒绝符号链接逃逸,单次读写上限 1 MiB,写入是原子的。即使在主目录内,凭据库和 Shell 启动文件也受保护。
|
|
151
|
+
- **命令**:`process` 以你的系统用户身份在系统级沙箱中运行。凭据目录不可读,写入限于工作区和临时目录,网络经代理。电脑无法使用沙箱时(Windows,或 Linux 缺少 `bubblewrap`、`socat`、`ripgrep`),命令会被拒绝而不是在沙箱外运行。可以在 Frely 连接页面开放更多:可读的凭据目录、可写的其他目录,或限时无沙箱运行。在设备上设置 `FRELY_SANDBOX=off` 可关闭沙箱。
|
|
152
|
+
- **凭据**:MCP URL 不含任何密钥。客户端持有 OAuth 令牌;CLI 持有独立的 MCP 执行密钥,用 macOS 钥匙串、Windows 凭据管理器或 Linux Secret Service 中的主密钥加密。无界面的机器可设置 `FRELY_CREDENTIAL_KEY`(32 字节)并配合 `FRELY_CREDENTIAL_STORE=encrypted-file`。授权到期后,请求和排队的工作会停止;已完成的写入不会撤销。
|
|
182
153
|
|
|
183
|
-
|
|
154
|
+
详情:[凭据与安装边界](docs/credential-storage.md)。
|
|
184
155
|
|
|
185
|
-
##
|
|
156
|
+
## 升级、诊断与卸载
|
|
186
157
|
|
|
187
158
|
```sh
|
|
188
|
-
frely
|
|
189
|
-
frely
|
|
159
|
+
frely doctor # 账号、安装、最新版本、MCP 与服务状态
|
|
160
|
+
frely doctor -v # 另含配置路径、授权到期、最后心跳、脱敏错误
|
|
161
|
+
frely update # 原地升级,保留登录、设备、URL 和工作区
|
|
162
|
+
frely uninstall # 先列出全部内容,输入 yes 后移除(脚本用 --yes)
|
|
190
163
|
```
|
|
191
164
|
|
|
192
|
-
`frely
|
|
165
|
+
`frely update` 保持原有安装方式,不会降级。它暂停后台服务,校验后替换程序,再重启服务。Windows 上它会输出一条 PowerShell 命令,请在本地终端运行。见[自更新](docs/self-update.md)和[服务维护](docs/service-maintenance.md)。
|
|
193
166
|
|
|
194
|
-
|
|
167
|
+
`frely uninstall` 在 Frely 端撤销这台电脑的访问,移除服务、保存的登录、设备身份、设置、缓存和 Frely 安装的 Agent Skill,最后移除 `frely` 程序本身。它会保留 Frely App、账号里的 Provider 和 Agent、安装器添加的 PATH 行、你改过的 Skill 和市场条目。请在本地终端运行,不要通过设备 MCP 运行。
|
|
195
168
|
|
|
196
|
-
##
|
|
197
|
-
|
|
198
|
-
本地 MCP 服务暴露 4 个工具:`read`(列目录、读文件、搜索内容、按名查找)、`edit_file`(原子整体写入与按行修改)、`process`(shell 命令,可等待完成或作为常驻进程启动)和 `web_fetch`(只读 GET/HEAD 公网 URL)。删除、移动、建目录经 `process` 完成。旧工具名(`read_file`、`write_file`、`run_command` 等)不再列出但仍可调用。
|
|
199
|
-
|
|
200
|
-
文件系统工具约束在所选工作区内:拒绝 symlink 逃逸、普通文件读写上限 1 MiB、no-follow 读、原子替换写。`process` 命令以当前 OS 用户权限执行;工作区只约束它们的工作目录,**不是** shell 沙箱。`process` 命令默认在系统级沙箱内运行;若本机无法运行沙箱(Windows,或缺少 `bubblewrap`、`socat`、`ripgrep` 的 Linux),命令会被拒绝并说明原因,不会无沙箱运行。设备所有者可在网页端批准 `unsandboxed`,或在设备上设置 `FRELY_SANDBOX=off` 关闭沙箱(`FRELY_SANDBOX_STRICT` 仍被接受,但已不再起作用)。
|
|
201
|
-
|
|
202
|
-
只读本地操作可以并行;写与 shell 操作走本地公平调度器——避免了设备级 `busy -> 429` 行为。
|
|
203
|
-
|
|
204
|
-
## 认证与密钥
|
|
205
|
-
|
|
206
|
-
基础账号会话与 Network 会话使用私有明文文件,不能批准 MCP 授权,也不能在显式范围外调用账号管理操作。Provider key 与 MCP 执行 key 相互独立。
|
|
207
|
-
|
|
208
|
-
MCP 密钥使用 AES-256-GCM 文件,主密钥存 macOS Keychain、Windows 凭据管理器或 Linux Secret Service。无头部署可通过 `FRELY_CREDENTIAL_KEY` 注入 32 字节 key 并设 `FRELY_CREDENTIAL_STORE=encrypted-file`。MCP 没有明文回退;安全存储失败不影响基础功能。
|
|
209
|
-
|
|
210
|
-
稳定的 MCP URL 不含凭证。远程客户端持有 OAuth 凭证;CLI 持有 MCP 执行私钥。Relay 校验 OAuth 资源绑定与当前 MCP 执行租约。到期会阻塞请求与排队任务、取消托管执行,但不回滚写入,也不为任意 shell 程序提供沙箱。
|
|
211
|
-
|
|
212
|
-
存储、迁移、服务注入、发布要求与威胁边界:[凭证与安装边界](docs/credential-storage.md)。
|
|
213
|
-
|
|
214
|
-
## 架构
|
|
215
|
-
|
|
216
|
-
- 产品定义与通用客户端接入:[docs/device-mcp.md](docs/device-mcp.md)
|
|
217
|
-
- Device Relay 传输:子协议、连接 grant、重连、回退状态机:[docs/device-transport.md](docs/device-transport.md)
|
|
218
|
-
- Relay OAuth 2.1 Authorization Code + PKCE、发现与 token 端点:[docs/mcp-oauth-relay-contract.md](docs/mcp-oauth-relay-contract.md)
|
|
219
|
-
- 业务 API 命令与授权:[docs/api.md](docs/api.md)
|
|
220
|
-
- Frely Network 命令(预览,不在 `frely --help` 中列出):[docs/frely-network.md](docs/frely-network.md)
|
|
221
|
-
|
|
222
|
-
公网 MCP URL 是 Relay 返回的规范资源,即 `https://mcp.frely.cloud/mcp`(每个账户一个 URL,所有设备共用)。请使用 `frely mcp url` 输出的地址,不要从控制面域名推导。URL 不含 bearer secret。
|
|
223
|
-
|
|
224
|
-
## 命令
|
|
169
|
+
## 全部命令
|
|
225
170
|
|
|
226
171
|
```text
|
|
227
172
|
frely login [--relay <https-url>] [--no-browser]
|
|
173
|
+
frely login --email <address> [--mcp] [--workspace <path>] then frely login --code <6-digit code>
|
|
228
174
|
frely logout
|
|
175
|
+
frely uninstall [--yes] [--json]
|
|
229
176
|
frely doctor [-v] [--json]
|
|
230
177
|
frely update
|
|
231
|
-
frely mcp
|
|
178
|
+
frely mcp start [--workspace <path>] [--days 1..365] [--no-browser] [--json]
|
|
179
|
+
frely mcp status [--json]
|
|
180
|
+
frely mcp stop|remove
|
|
232
181
|
frely mcp workspace list [--json]
|
|
233
182
|
frely mcp workspace add|remove <path>
|
|
234
183
|
frely mcp local list [--json]
|
|
235
|
-
frely mcp local add <name> (--url <address> | -- <command> [args...])
|
|
184
|
+
frely mcp local add <name> (--url <address> | [--env KEY=VALUE] -- <command> [args...])
|
|
236
185
|
frely mcp local remove <name>
|
|
237
|
-
frely mcp stop|start|remove
|
|
238
186
|
frely agent install <distribution-id|manifest-url> [--host chatgpt|codex|claude-code|pi|generic] [--scope global|project] [--api-key-stdin] [--json]
|
|
239
187
|
frely agent run <distribution-id> (--input <text>|--input-stdin) [--json]
|
|
240
188
|
frely agent status (<distribution-id>|--api-key-stdin [--relay <url>]) [--json]
|
|
241
189
|
frely agent remove <distribution-id> [--json]
|
|
190
|
+
frely item install <item-id> [--host chatgpt|codex|claude-code|pi|generic] [--scope global|project] [--dir <path>] [--json]
|
|
191
|
+
frely item trust <folder> [--check]
|
|
242
192
|
frely provider share [ollama|openai-compatible] [--url <loopback-v1-url>] [--models <a,b>] [--slot <slot-id> | --creator] [--name <name>]
|
|
243
193
|
frely provider list [--json]
|
|
244
194
|
frely api list|describe|call
|
|
245
195
|
```
|
|
246
196
|
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
`frely logout` 删除账号会话、撤销 Cloud 授权并尝试停止后台服务。
|
|
197
|
+
`frely help --agent --json` 输出完整的机器可读契约,包括 `frely --help` 中未列出的命令:`frely mcp stdio`(通过 stdio 向本地客户端提供工具)、`frely mcp serve`(后台服务运行的前台进程)和 `frely network`(预览)。
|
|
250
198
|
|
|
251
|
-
##
|
|
199
|
+
## 文档
|
|
252
200
|
|
|
253
|
-
|
|
201
|
+
- [设备 MCP](docs/device-mcp.md)
|
|
202
|
+
- [Device Relay 传输](docs/device-transport.md)
|
|
203
|
+
- [MCP OAuth 契约](docs/mcp-oauth-relay-contract.md)
|
|
204
|
+
- [`frely api`](docs/api.md)
|
|
205
|
+
- [Frely Network(预览)](docs/frely-network.md)
|
|
254
206
|
|
|
255
207
|
## 许可与商标
|
|
256
208
|
|
|
257
|
-
`frely-cli` 采用 Apache License 2.0
|
|
258
|
-
|
|
259
|
-
开发指引见 [`CONTRIBUTING.md`](CONTRIBUTING.md),私有漏洞报告见 [`SECURITY.md`](SECURITY.md)。
|
|
209
|
+
`frely-cli` 采用 Apache License 2.0 许可,见 [`LICENSE`](LICENSE)。Frely 名称、标志和产品名不随商标授权,见 [`TRADEMARKS.md`](TRADEMARKS.md)。开发说明见 [`CONTRIBUTING.md`](CONTRIBUTING.md),私下报告漏洞见 [`SECURITY.md`](SECURITY.md)。
|
|
@@ -59,7 +59,12 @@ export function connectionReporter(binding, workspace) {
|
|
|
59
59
|
current = { ...current, state: "stopped", mcpEnabled: false };
|
|
60
60
|
}
|
|
61
61
|
const content = JSON.stringify(current) + "\n";
|
|
62
|
+
const terminal = event.type === "stopped";
|
|
62
63
|
pending = pending.then(async () => {
|
|
64
|
+
// The status file is last-writer-wins across transports; a terminal stop must not
|
|
65
|
+
// erase a fresher record owned by another process that is still running.
|
|
66
|
+
if (terminal && await foreignTransportLive(path))
|
|
67
|
+
return;
|
|
63
68
|
const temp = path + "." + process.pid + "." + randomUUID() + ".tmp";
|
|
64
69
|
try {
|
|
65
70
|
await mkdir(dirname(path), { recursive: true, mode: 0o700 });
|
|
@@ -73,6 +78,22 @@ export function connectionReporter(binding, workspace) {
|
|
|
73
78
|
};
|
|
74
79
|
return { report, flush: () => pending };
|
|
75
80
|
}
|
|
81
|
+
/** True when the record on disk belongs to a different, still-running transport process. */
|
|
82
|
+
async function foreignTransportLive(path) {
|
|
83
|
+
const raw = await readFile(path, "utf8").catch(() => null);
|
|
84
|
+
if (!raw)
|
|
85
|
+
return false;
|
|
86
|
+
try {
|
|
87
|
+
const record = JSON.parse(raw);
|
|
88
|
+
if (!Number.isSafeInteger(record?.pid) || record.pid === process.pid)
|
|
89
|
+
return false;
|
|
90
|
+
process.kill(record.pid, 0);
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
return error.code === "EPERM";
|
|
95
|
+
}
|
|
96
|
+
}
|
|
76
97
|
export async function readConnectionStatus(binding) {
|
|
77
98
|
const raw = await readFile(connectionStatusPath(), "utf8").catch(() => null);
|
|
78
99
|
if (!raw)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection-status.js","sourceRoot":"","sources":["../../src/device/connection-status.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"connection-status.js","sourceRoot":"","sources":["../../src/device/connection-status.ts"],"names":[],"mappings":"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"}
|
package/dist/diagnostics.js
CHANGED
|
@@ -75,12 +75,16 @@ export async function doctor(options = {}, dependencies = defaultDependencies) {
|
|
|
75
75
|
: !bindingMatches || !connection ? "unknown"
|
|
76
76
|
: live ? "connected"
|
|
77
77
|
: connection.state === "disconnected" || connection.state === "stopped" ? connection.state : "unknown";
|
|
78
|
-
|
|
78
|
+
// The status file is last-writer-wins across transports, so a stopped record beside an
|
|
79
|
+
// active service is a stale or overwritten observation, not a final stop.
|
|
80
|
+
const staleStopped = connectionState === "stopped" && Boolean(service?.active);
|
|
81
|
+
add("connection", connectionState === "not_configured" ? "info" : live && (!metadata || mcpReady) ? "pass" : staleStopped ? "info" : "fail", connectionState === "not_configured" ? "Not configured."
|
|
79
82
|
: live && metadata && !mcpReady ? "Device transport connected, but this MCP authorization/workspace is not active in the running service."
|
|
80
83
|
: live ? "Device transport connected; recent heartbeat received."
|
|
81
|
-
:
|
|
82
|
-
: connectionState === "
|
|
83
|
-
:
|
|
84
|
+
: staleStopped ? "Stale status record: a transport reported stopped, but the background service is running. Re-run frely doctor; restart with frely mcp start only if this persists."
|
|
85
|
+
: connectionState === "disconnected" ? "Disconnected; the device transport is retrying."
|
|
86
|
+
: connectionState === "stopped" ? "Device transport stopped. Run frely mcp start."
|
|
87
|
+
: "Unknown: no recent heartbeat for this account/device. Run frely doctor -v.");
|
|
84
88
|
const update = await updatePromise;
|
|
85
89
|
add("installation", "info", `${update.installation.method}: ${update.installation.entry}`);
|
|
86
90
|
add("update", update.state === "current" ? "pass" : "info", update.message);
|
|
@@ -151,8 +155,9 @@ export async function doctor(options = {}, dependencies = defaultDependencies) {
|
|
|
151
155
|
: service.installed ? "Stopped" : "Not installed",
|
|
152
156
|
connection: connectionState === "not_configured" ? "Not configured"
|
|
153
157
|
: live ? metadata && !mcpReady ? "Device transport connected; MCP unavailable" : "Connected (recent heartbeat)"
|
|
154
|
-
: connectionState === "disconnected" ? "Disconnected (retrying)"
|
|
155
|
-
: "
|
|
158
|
+
: connectionState === "disconnected" ? "Disconnected (retrying)"
|
|
159
|
+
: connectionState === "stopped" ? staleStopped ? "Stopped (stale record; service running)" : "Stopped"
|
|
160
|
+
: "Unknown (no recent heartbeat)",
|
|
156
161
|
},
|
|
157
162
|
checks,
|
|
158
163
|
...(verbose ? { details: {
|
package/dist/diagnostics.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"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"}
|