flyspace-cli 0.1.18 → 0.1.21
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/dist/{chunk-B3KW3N5Y.js → chunk-EINS55BS.js} +1 -1
- package/dist/{chunk-SWLIZNEI.js → chunk-GHGQCED7.js} +283 -210
- package/dist/{chunk-L3I3BPLP.js → chunk-GYHCSGMJ.js} +46 -43
- package/dist/cli.js +9454 -9249
- package/dist/index.js +2 -2
- package/dist/{threads-EWR6YAZY.js → threads-5KRBNPM7.js} +2 -2
- package/package.json +9 -31
- package/templates/general/02-working-with-the-agent.html +38 -0
- package/templates/general/03-channels-and-folders.html +38 -0
- package/templates/general/04-docs.html +38 -0
- package/templates/general/05-sharing-docs.html +38 -0
- package/templates/general/06-inviting-your-team.html +38 -0
- package/templates/general/07-automations.html +38 -0
- package/templates/general/README.html +61 -0
- package/README.md +0 -68
- package/templates/general/01-welcome.md +0 -20
- package/templates/general/02-working-with-the-agent.md +0 -21
- package/templates/general/03-channels-and-folders.md +0 -19
- package/templates/general/04-docs.md +0 -14
- package/templates/general/05-inviting-your-team.md +0 -17
- package/templates/general/06-automations.md +0 -21
package/dist/index.js
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
import {
|
|
3
3
|
listChannels,
|
|
4
4
|
moveThread
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-EINS55BS.js";
|
|
6
6
|
import {
|
|
7
7
|
getSupabaseClient,
|
|
8
8
|
postToDashboardChannel
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-GYHCSGMJ.js";
|
|
10
10
|
|
|
11
11
|
// src/mcp/servers/threads.ts
|
|
12
12
|
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "flyspace-cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.21",
|
|
4
4
|
"description": "AI-native headless community OS",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"private": false,
|
|
@@ -21,22 +21,13 @@
|
|
|
21
21
|
"dev": "mkdir -p .logs && tsx watch --clear-screen=false src/cli.ts dashboard --mode all --port 4848 --no-open 2>&1 | tee -a .logs/dev.log",
|
|
22
22
|
"dev:slack": "tsx src/cli.ts start",
|
|
23
23
|
"dev:slack:debug": "DEBUG=true tsx src/cli.ts start",
|
|
24
|
-
"dev:data": "tsx src/dashboard/data-server.ts",
|
|
25
24
|
"dev:host": "tsx src/dashboard/host-server.ts",
|
|
26
25
|
"generate-host-key": "tsx scripts/generate-host-key.ts",
|
|
27
26
|
"import:channels": "tsx scripts/import-channels-to-supabase.ts",
|
|
28
27
|
"seed:test-user": "tsx scripts/seed-test-user.ts",
|
|
29
|
-
"build": "tsup
|
|
30
|
-
"build:web": "cd web && pnpm run build",
|
|
28
|
+
"build": "tsup",
|
|
31
29
|
"build:cli": "FLYSPACE_PUBLIC_BUILD=1 tsup",
|
|
32
30
|
"start": "node dist/cli.js start",
|
|
33
|
-
"test": "vitest run",
|
|
34
|
-
"test:watch": "vitest",
|
|
35
|
-
"reload": "pnpm run build && launchctl kickstart -k \"gui/$(id -u)/ai.flyspace.dashboard\"",
|
|
36
|
-
"reload:all": "pnpm run build && launchctl kickstart -k \"gui/$(id -u)/ai.flyspace.dashboard\" && launchctl kickstart -k \"gui/$(id -u)/ai.flyspace.flycoder\"",
|
|
37
|
-
"lint": "oxlint src/",
|
|
38
|
-
"format": "prettier --write src/",
|
|
39
|
-
"format:check": "prettier --check src/",
|
|
40
31
|
"prepublishOnly": "pnpm run build:cli",
|
|
41
32
|
"release": "pnpm version patch && npm publish && git push --follow-tags"
|
|
42
33
|
},
|
|
@@ -67,31 +58,18 @@
|
|
|
67
58
|
"web-push": "^3.6.7",
|
|
68
59
|
"ws": "^8.21.3"
|
|
69
60
|
},
|
|
61
|
+
"packageManager": "pnpm@10.24.0+sha512.01ff8ae71b4419903b65c60fb2dc9d34cf8bb6e06d03bde112ef38f7a34d6904c424ba66bea5cdcf12890230bf39f9580473140ed9c946fef328b6e5238a345a",
|
|
62
|
+
"publishConfig": {
|
|
63
|
+
"access": "public"
|
|
64
|
+
},
|
|
70
65
|
"devDependencies": {
|
|
66
|
+
"@flyspace/api": "workspace:*",
|
|
67
|
+
"@flyspace/core": "workspace:*",
|
|
71
68
|
"@types/better-sqlite3": "^7.6.13",
|
|
72
69
|
"@types/js-yaml": "^4.0.9",
|
|
73
70
|
"@types/node": "^25.2.3",
|
|
74
71
|
"@types/web-push": "^3.6.4",
|
|
75
72
|
"@types/ws": "^8.18.1",
|
|
76
|
-
"
|
|
77
|
-
"jsdom": "^30.0.0",
|
|
78
|
-
"oxlint": "^1.46.0",
|
|
79
|
-
"playwright": "^1.58.2",
|
|
80
|
-
"prettier": "^3.8.1",
|
|
81
|
-
"tsup": "^8.5.1",
|
|
82
|
-
"tsx": "^4.21.0",
|
|
83
|
-
"typescript": "^5.9.3",
|
|
84
|
-
"vitest": "^3.2.6"
|
|
85
|
-
},
|
|
86
|
-
"pnpm": {
|
|
87
|
-
"onlyBuiltDependencies": [
|
|
88
|
-
"better-sqlite3",
|
|
89
|
-
"esbuild",
|
|
90
|
-
"node-pty"
|
|
91
|
-
]
|
|
92
|
-
},
|
|
93
|
-
"packageManager": "pnpm@10.24.0+sha512.01ff8ae71b4419903b65c60fb2dc9d34cf8bb6e06d03bde112ef38f7a34d6904c424ba66bea5cdcf12890230bf39f9580473140ed9c946fef328b6e5238a345a",
|
|
94
|
-
"publishConfig": {
|
|
95
|
-
"access": "public"
|
|
73
|
+
"playwright": "^1.58.2"
|
|
96
74
|
}
|
|
97
75
|
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<!doctype html><html lang="en"><head><title>Working with the agent</title><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
|
|
2
|
+
<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&display=swap">
|
|
3
|
+
<style>
|
|
4
|
+
:root{--bg:#fff;--fg:#17171c;--muted:#6b6b76;--line:#e8e8ef;--card:#f6f6fb;--brand:#5052f2;--brand-soft:#ececfe}
|
|
5
|
+
@media (prefers-color-scheme:dark){:root{--bg:#141418;--fg:#ececf1;--muted:#9898a6;--line:#26262e;--card:#1b1b21;--brand:#7f81ff;--brand-soft:#23234a}}
|
|
6
|
+
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--fg);font:15px/1.6 'Plus Jakarta Sans','PingFang TC','Noto Sans TC',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}
|
|
7
|
+
main{max-width:680px;margin:0 auto;padding:0 20px 48px}
|
|
8
|
+
a{color:var(--brand)}
|
|
9
|
+
.hero{margin:0 -20px 8px;padding:20px 28px 28px;background:radial-gradient(120% 140% at 0% 0%,var(--brand-soft),transparent 60%);border-bottom:1px solid var(--line)}
|
|
10
|
+
.back{display:inline-block;font-size:13px;font-weight:500;color:var(--muted);text-decoration:none;margin-bottom:22px}.back:hover{color:var(--brand)}
|
|
11
|
+
.badge{width:44px;height:44px;border-radius:12px;background:var(--bg);border:1px solid var(--line);display:flex;align-items:center;justify-content:center;font-size:22px;margin-bottom:14px}
|
|
12
|
+
.eyebrow{font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--brand);font-weight:600}
|
|
13
|
+
h1{font-size:28px;line-height:1.2;margin:4px 0 8px;letter-spacing:-.02em}
|
|
14
|
+
.lead{color:var(--muted);font-size:15.5px;margin:0;max-width:540px}
|
|
15
|
+
h2{font-size:13px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin:32px 0 10px;font-weight:600}
|
|
16
|
+
p{margin:0 0 10px}
|
|
17
|
+
.list{list-style:none;padding:0;margin:0;border:1px solid var(--line);border-radius:10px;overflow:hidden}
|
|
18
|
+
.list li{padding:10px 14px;border-top:1px solid var(--line);font-size:14px;color:var(--muted)}.list li:first-child{border-top:0}
|
|
19
|
+
.list b{display:block;color:var(--fg);font-size:14px;font-weight:600}
|
|
20
|
+
.dots{list-style:none;padding:0;margin:0}.dots li{position:relative;padding:0 0 6px 20px;font-size:14.5px}
|
|
21
|
+
.dots li:before{content:"";position:absolute;left:4px;top:.62em;width:6px;height:6px;border-radius:50%;background:var(--brand)}
|
|
22
|
+
.prompt{display:flex;gap:10px;align-items:baseline;border:1px solid var(--line);border-radius:12px;padding:12px 14px;margin:8px 0}
|
|
23
|
+
.prompt i{font-style:normal;color:var(--brand);font-weight:700}
|
|
24
|
+
.note{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:12px 14px;font-size:14px;color:var(--muted)}
|
|
25
|
+
.note b{color:var(--fg)}
|
|
26
|
+
code{white-space:nowrap;font:13px ui-monospace,SFMono-Regular,Menlo,monospace;background:var(--card);border:1px solid var(--line);border-radius:5px;padding:1px 5px}
|
|
27
|
+
.pager{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:40px}
|
|
28
|
+
.pager a{display:block;border:1px solid var(--line);border-radius:10px;padding:10px 14px;text-decoration:none;color:var(--fg);font-weight:600;font-size:14px}
|
|
29
|
+
.pager a:hover{border-color:var(--brand)}.pager small{display:block;color:var(--muted);font-weight:500;font-size:12px}
|
|
30
|
+
.pager .next{grid-column:2;text-align:right}
|
|
31
|
+
@media (max-width:420px){.pager{grid-template-columns:1fr}.pager .next{grid-column:1}}
|
|
32
|
+
</style></head><body><main>
|
|
33
|
+
<section class="hero"><a class="back" href="README.html">← Welcome to Flyspace</a><div class="badge">🤖</div>
|
|
34
|
+
<div class="eyebrow">Guide 1 of 6</div><h1>Working with the agent</h1>
|
|
35
|
+
<p class="lead">Mention the agent in any topic, or reply inside a topic it is already part of. It answers in the same topic, so the context stays together.</p></section>
|
|
36
|
+
<h2>What it can do</h2><ul class="dots"><li>Read, write and organise files in the channel's folder.</li><li>Run commands and scripts on the machine connected to the workspace (your Host).</li><li>Summarise a long topic, draft a document, review code, research a question.</li><li>Schedule work for later with an automation.</li></ul><h2>Tips</h2><ul class="list"><li><b>One topic per task</b>A focused topic gives the agent focused context. Start a new topic when the subject changes.</li><li><b>Point at files</b>Name the file or folder you mean. The agent works from the real contents, not a guess.</li><li><b>Ask for a doc</b>For anything you want to keep (a plan, meeting notes, a spec), ask for it as a file. It shows up in the Docs pane.</li><li><b>Use the buttons</b>When the agent offers quick replies under a message, clicking one is the same as typing it.</li></ul><h2>Where it runs</h2><div class="note">The agent runs on the <b>Host</b>: the machine you connected during setup, using that machine's own agent CLI and login. If the Host is offline, chat still works, but the agent waits until the machine is back.</div>
|
|
37
|
+
<nav class="pager"><a href="README.html"><small>← Back to</small>Welcome</a><a class="next" href="03-channels-and-folders.html"><small>Next →</small>Channels and folders</a></nav>
|
|
38
|
+
</main></body></html>
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<!doctype html><html lang="en"><head><title>Channels and folders</title><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
|
|
2
|
+
<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&display=swap">
|
|
3
|
+
<style>
|
|
4
|
+
:root{--bg:#fff;--fg:#17171c;--muted:#6b6b76;--line:#e8e8ef;--card:#f6f6fb;--brand:#5052f2;--brand-soft:#ececfe}
|
|
5
|
+
@media (prefers-color-scheme:dark){:root{--bg:#141418;--fg:#ececf1;--muted:#9898a6;--line:#26262e;--card:#1b1b21;--brand:#7f81ff;--brand-soft:#23234a}}
|
|
6
|
+
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--fg);font:15px/1.6 'Plus Jakarta Sans','PingFang TC','Noto Sans TC',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}
|
|
7
|
+
main{max-width:680px;margin:0 auto;padding:0 20px 48px}
|
|
8
|
+
a{color:var(--brand)}
|
|
9
|
+
.hero{margin:0 -20px 8px;padding:20px 28px 28px;background:radial-gradient(120% 140% at 0% 0%,var(--brand-soft),transparent 60%);border-bottom:1px solid var(--line)}
|
|
10
|
+
.back{display:inline-block;font-size:13px;font-weight:500;color:var(--muted);text-decoration:none;margin-bottom:22px}.back:hover{color:var(--brand)}
|
|
11
|
+
.badge{width:44px;height:44px;border-radius:12px;background:var(--bg);border:1px solid var(--line);display:flex;align-items:center;justify-content:center;font-size:22px;margin-bottom:14px}
|
|
12
|
+
.eyebrow{font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--brand);font-weight:600}
|
|
13
|
+
h1{font-size:28px;line-height:1.2;margin:4px 0 8px;letter-spacing:-.02em}
|
|
14
|
+
.lead{color:var(--muted);font-size:15.5px;margin:0;max-width:540px}
|
|
15
|
+
h2{font-size:13px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin:32px 0 10px;font-weight:600}
|
|
16
|
+
p{margin:0 0 10px}
|
|
17
|
+
.list{list-style:none;padding:0;margin:0;border:1px solid var(--line);border-radius:10px;overflow:hidden}
|
|
18
|
+
.list li{padding:10px 14px;border-top:1px solid var(--line);font-size:14px;color:var(--muted)}.list li:first-child{border-top:0}
|
|
19
|
+
.list b{display:block;color:var(--fg);font-size:14px;font-weight:600}
|
|
20
|
+
.dots{list-style:none;padding:0;margin:0}.dots li{position:relative;padding:0 0 6px 20px;font-size:14.5px}
|
|
21
|
+
.dots li:before{content:"";position:absolute;left:4px;top:.62em;width:6px;height:6px;border-radius:50%;background:var(--brand)}
|
|
22
|
+
.prompt{display:flex;gap:10px;align-items:baseline;border:1px solid var(--line);border-radius:12px;padding:12px 14px;margin:8px 0}
|
|
23
|
+
.prompt i{font-style:normal;color:var(--brand);font-weight:700}
|
|
24
|
+
.note{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:12px 14px;font-size:14px;color:var(--muted)}
|
|
25
|
+
.note b{color:var(--fg)}
|
|
26
|
+
code{white-space:nowrap;font:13px ui-monospace,SFMono-Regular,Menlo,monospace;background:var(--card);border:1px solid var(--line);border-radius:5px;padding:1px 5px}
|
|
27
|
+
.pager{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:40px}
|
|
28
|
+
.pager a{display:block;border:1px solid var(--line);border-radius:10px;padding:10px 14px;text-decoration:none;color:var(--fg);font-weight:600;font-size:14px}
|
|
29
|
+
.pager a:hover{border-color:var(--brand)}.pager small{display:block;color:var(--muted);font-weight:500;font-size:12px}
|
|
30
|
+
.pager .next{grid-column:2;text-align:right}
|
|
31
|
+
@media (max-width:420px){.pager{grid-template-columns:1fr}.pager .next{grid-column:1}}
|
|
32
|
+
</style></head><body><main>
|
|
33
|
+
<section class="hero"><a class="back" href="README.html">← Welcome to Flyspace</a><div class="badge">📁</div>
|
|
34
|
+
<div class="eyebrow">Guide 2 of 6</div><h1>Channels and folders</h1>
|
|
35
|
+
<p class="lead">Every channel has a folder behind it. That folder is where the agent works and where the channel's docs live.</p></section>
|
|
36
|
+
<h2>Two kinds of folders</h2><ul class="list"><li><b>New folders</b>A channel you create from scratch gets its own empty folder under <code>~/Flyspace/<workspace>/</code>.</li><li><b>Linked projects</b>A channel made from an existing project folder links to it, so the agent works on the real project and its history.</li></ul><h2>Public and private</h2><ul class="list"><li><b>Public</b>Visible to everyone in the workspace. #general is always public, and it cannot be made private, renamed or deleted.</li><li><b>Private</b>Visible only to the members you add, and to admins.</li></ul><h2>Good habits</h2><ul class="dots"><li>One channel per project, team or recurring topic.</li><li>Keep the conversation in the channel and the lasting knowledge in its folder: decisions, plans and notes as docs, not buried in chat history.</li><li>Use the channel's settings to give its agent extra instructions, such as the project's conventions or the tone to use.</li></ul>
|
|
37
|
+
<nav class="pager"><a href="02-working-with-the-agent.html"><small>← Previous</small>Working with the agent</a><a class="next" href="04-docs.html"><small>Next →</small>Docs</a></nav>
|
|
38
|
+
</main></body></html>
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<!doctype html><html lang="en"><head><title>Docs</title><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
|
|
2
|
+
<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&display=swap">
|
|
3
|
+
<style>
|
|
4
|
+
:root{--bg:#fff;--fg:#17171c;--muted:#6b6b76;--line:#e8e8ef;--card:#f6f6fb;--brand:#5052f2;--brand-soft:#ececfe}
|
|
5
|
+
@media (prefers-color-scheme:dark){:root{--bg:#141418;--fg:#ececf1;--muted:#9898a6;--line:#26262e;--card:#1b1b21;--brand:#7f81ff;--brand-soft:#23234a}}
|
|
6
|
+
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--fg);font:15px/1.6 'Plus Jakarta Sans','PingFang TC','Noto Sans TC',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}
|
|
7
|
+
main{max-width:680px;margin:0 auto;padding:0 20px 48px}
|
|
8
|
+
a{color:var(--brand)}
|
|
9
|
+
.hero{margin:0 -20px 8px;padding:20px 28px 28px;background:radial-gradient(120% 140% at 0% 0%,var(--brand-soft),transparent 60%);border-bottom:1px solid var(--line)}
|
|
10
|
+
.back{display:inline-block;font-size:13px;font-weight:500;color:var(--muted);text-decoration:none;margin-bottom:22px}.back:hover{color:var(--brand)}
|
|
11
|
+
.badge{width:44px;height:44px;border-radius:12px;background:var(--bg);border:1px solid var(--line);display:flex;align-items:center;justify-content:center;font-size:22px;margin-bottom:14px}
|
|
12
|
+
.eyebrow{font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--brand);font-weight:600}
|
|
13
|
+
h1{font-size:28px;line-height:1.2;margin:4px 0 8px;letter-spacing:-.02em}
|
|
14
|
+
.lead{color:var(--muted);font-size:15.5px;margin:0;max-width:540px}
|
|
15
|
+
h2{font-size:13px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin:32px 0 10px;font-weight:600}
|
|
16
|
+
p{margin:0 0 10px}
|
|
17
|
+
.list{list-style:none;padding:0;margin:0;border:1px solid var(--line);border-radius:10px;overflow:hidden}
|
|
18
|
+
.list li{padding:10px 14px;border-top:1px solid var(--line);font-size:14px;color:var(--muted)}.list li:first-child{border-top:0}
|
|
19
|
+
.list b{display:block;color:var(--fg);font-size:14px;font-weight:600}
|
|
20
|
+
.dots{list-style:none;padding:0;margin:0}.dots li{position:relative;padding:0 0 6px 20px;font-size:14.5px}
|
|
21
|
+
.dots li:before{content:"";position:absolute;left:4px;top:.62em;width:6px;height:6px;border-radius:50%;background:var(--brand)}
|
|
22
|
+
.prompt{display:flex;gap:10px;align-items:baseline;border:1px solid var(--line);border-radius:12px;padding:12px 14px;margin:8px 0}
|
|
23
|
+
.prompt i{font-style:normal;color:var(--brand);font-weight:700}
|
|
24
|
+
.note{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:12px 14px;font-size:14px;color:var(--muted)}
|
|
25
|
+
.note b{color:var(--fg)}
|
|
26
|
+
code{white-space:nowrap;font:13px ui-monospace,SFMono-Regular,Menlo,monospace;background:var(--card);border:1px solid var(--line);border-radius:5px;padding:1px 5px}
|
|
27
|
+
.pager{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:40px}
|
|
28
|
+
.pager a{display:block;border:1px solid var(--line);border-radius:10px;padding:10px 14px;text-decoration:none;color:var(--fg);font-weight:600;font-size:14px}
|
|
29
|
+
.pager a:hover{border-color:var(--brand)}.pager small{display:block;color:var(--muted);font-weight:500;font-size:12px}
|
|
30
|
+
.pager .next{grid-column:2;text-align:right}
|
|
31
|
+
@media (max-width:420px){.pager{grid-template-columns:1fr}.pager .next{grid-column:1}}
|
|
32
|
+
</style></head><body><main>
|
|
33
|
+
<section class="hero"><a class="back" href="README.html">← Welcome to Flyspace</a><div class="badge">📄</div>
|
|
34
|
+
<div class="eyebrow">Guide 3 of 6</div><h1>Docs</h1>
|
|
35
|
+
<p class="lead">The Docs pane shows the files in the current channel's folder. Markdown and HTML render as pages; other files can be previewed or downloaded.</p></section>
|
|
36
|
+
<h2>Working with docs</h2><ul class="list"><li><b>Read and edit</b>Edit Markdown right in the pane.</li><li><b>Ask about a doc</b>Open the chat beside a doc to ask the agent about it, or to have it make changes.</li><li><b>Share</b>Publish a doc as a public page with its own link. See <a href="05-sharing-docs.html">Sharing docs</a>.</li><li><b>Let the agent write</b>Ask for a plan, a summary or a spec as a file, and it appears here.</li></ul><h2>Why docs live in folders</h2><div class="note">Files in the channel's folder are real files on disk, next to the project they describe. Nothing to sync, nothing to copy: the agent, your editor and your team all see the same thing.</div>
|
|
37
|
+
<nav class="pager"><a href="03-channels-and-folders.html"><small>← Previous</small>Channels and folders</a><a class="next" href="05-sharing-docs.html"><small>Next →</small>Sharing docs</a></nav>
|
|
38
|
+
</main></body></html>
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<!doctype html><html lang="en"><head><title>Sharing docs</title><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
|
|
2
|
+
<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&display=swap">
|
|
3
|
+
<style>
|
|
4
|
+
:root{--bg:#fff;--fg:#17171c;--muted:#6b6b76;--line:#e8e8ef;--card:#f6f6fb;--brand:#5052f2;--brand-soft:#ececfe}
|
|
5
|
+
@media (prefers-color-scheme:dark){:root{--bg:#141418;--fg:#ececf1;--muted:#9898a6;--line:#26262e;--card:#1b1b21;--brand:#7f81ff;--brand-soft:#23234a}}
|
|
6
|
+
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--fg);font:15px/1.6 'Plus Jakarta Sans','PingFang TC','Noto Sans TC',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}
|
|
7
|
+
main{max-width:680px;margin:0 auto;padding:0 20px 48px}
|
|
8
|
+
a{color:var(--brand)}
|
|
9
|
+
.hero{margin:0 -20px 8px;padding:20px 28px 28px;background:radial-gradient(120% 140% at 0% 0%,var(--brand-soft),transparent 60%);border-bottom:1px solid var(--line)}
|
|
10
|
+
.back{display:inline-block;font-size:13px;font-weight:500;color:var(--muted);text-decoration:none;margin-bottom:22px}.back:hover{color:var(--brand)}
|
|
11
|
+
.badge{width:44px;height:44px;border-radius:12px;background:var(--bg);border:1px solid var(--line);display:flex;align-items:center;justify-content:center;font-size:22px;margin-bottom:14px}
|
|
12
|
+
.eyebrow{font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--brand);font-weight:600}
|
|
13
|
+
h1{font-size:28px;line-height:1.2;margin:4px 0 8px;letter-spacing:-.02em}
|
|
14
|
+
.lead{color:var(--muted);font-size:15.5px;margin:0;max-width:540px}
|
|
15
|
+
h2{font-size:13px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin:32px 0 10px;font-weight:600}
|
|
16
|
+
p{margin:0 0 10px}
|
|
17
|
+
.list{list-style:none;padding:0;margin:0;border:1px solid var(--line);border-radius:10px;overflow:hidden}
|
|
18
|
+
.list li{padding:10px 14px;border-top:1px solid var(--line);font-size:14px;color:var(--muted)}.list li:first-child{border-top:0}
|
|
19
|
+
.list b{display:block;color:var(--fg);font-size:14px;font-weight:600}
|
|
20
|
+
.dots{list-style:none;padding:0;margin:0}.dots li{position:relative;padding:0 0 6px 20px;font-size:14.5px}
|
|
21
|
+
.dots li:before{content:"";position:absolute;left:4px;top:.62em;width:6px;height:6px;border-radius:50%;background:var(--brand)}
|
|
22
|
+
.prompt{display:flex;gap:10px;align-items:baseline;border:1px solid var(--line);border-radius:12px;padding:12px 14px;margin:8px 0}
|
|
23
|
+
.prompt i{font-style:normal;color:var(--brand);font-weight:700}
|
|
24
|
+
.note{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:12px 14px;font-size:14px;color:var(--muted)}
|
|
25
|
+
.note b{color:var(--fg)}
|
|
26
|
+
code{white-space:nowrap;font:13px ui-monospace,SFMono-Regular,Menlo,monospace;background:var(--card);border:1px solid var(--line);border-radius:5px;padding:1px 5px}
|
|
27
|
+
.pager{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:40px}
|
|
28
|
+
.pager a{display:block;border:1px solid var(--line);border-radius:10px;padding:10px 14px;text-decoration:none;color:var(--fg);font-weight:600;font-size:14px}
|
|
29
|
+
.pager a:hover{border-color:var(--brand)}.pager small{display:block;color:var(--muted);font-weight:500;font-size:12px}
|
|
30
|
+
.pager .next{grid-column:2;text-align:right}
|
|
31
|
+
@media (max-width:420px){.pager{grid-template-columns:1fr}.pager .next{grid-column:1}}
|
|
32
|
+
</style></head><body><main>
|
|
33
|
+
<section class="hero"><a class="back" href="README.html">← Welcome to Flyspace</a><div class="badge">🔗</div>
|
|
34
|
+
<div class="eyebrow">Guide 4 of 6</div><h1>Sharing docs</h1>
|
|
35
|
+
<p class="lead">Publish a doc as a public page when someone outside the workspace needs to read it. Anyone with the link can open it, without signing in.</p></section>
|
|
36
|
+
<h2>Publish a doc</h2><ul class="dots"><li>Open the doc in the Docs pane, open its menu and choose <b>Share</b>.</li><li>Publishing copies the doc and its images to a public page. Readers see the version you published, not today's file.</li><li>Changed the doc? Open Share again and choose <b>Update</b>.</li></ul><h2>Options</h2><ul class="list"><li><b>Choose a link</b>Swap the random link for a readable one, such as <code>q3-roadmap</code>.</li><li><b>Show who published it</b>Puts your name on the page.</li><li><b>Let readers share it</b>Adds buttons to pass the page on to X, LinkedIn or Threads.</li><li><b>Ask this article</b>Readers get a box that answers questions from the doc's text, and nothing else.</li><li><b>Other languages</b>Offers the page translated into other languages.</li><li><b>Narrated audio</b>Records the article aloud, once, a minute or two after publishing.</li></ul><h2>Keep track</h2><div class="note"><b>Shared docs</b>, in the header, lists every public link in the workspace. Revoke one there and the link stops working; the doc itself is untouched.</div>
|
|
37
|
+
<nav class="pager"><a href="04-docs.html"><small>← Previous</small>Docs</a><a class="next" href="06-inviting-your-team.html"><small>Next →</small>Inviting your team</a></nav>
|
|
38
|
+
</main></body></html>
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<!doctype html><html lang="en"><head><title>Inviting your team</title><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
|
|
2
|
+
<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&display=swap">
|
|
3
|
+
<style>
|
|
4
|
+
:root{--bg:#fff;--fg:#17171c;--muted:#6b6b76;--line:#e8e8ef;--card:#f6f6fb;--brand:#5052f2;--brand-soft:#ececfe}
|
|
5
|
+
@media (prefers-color-scheme:dark){:root{--bg:#141418;--fg:#ececf1;--muted:#9898a6;--line:#26262e;--card:#1b1b21;--brand:#7f81ff;--brand-soft:#23234a}}
|
|
6
|
+
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--fg);font:15px/1.6 'Plus Jakarta Sans','PingFang TC','Noto Sans TC',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}
|
|
7
|
+
main{max-width:680px;margin:0 auto;padding:0 20px 48px}
|
|
8
|
+
a{color:var(--brand)}
|
|
9
|
+
.hero{margin:0 -20px 8px;padding:20px 28px 28px;background:radial-gradient(120% 140% at 0% 0%,var(--brand-soft),transparent 60%);border-bottom:1px solid var(--line)}
|
|
10
|
+
.back{display:inline-block;font-size:13px;font-weight:500;color:var(--muted);text-decoration:none;margin-bottom:22px}.back:hover{color:var(--brand)}
|
|
11
|
+
.badge{width:44px;height:44px;border-radius:12px;background:var(--bg);border:1px solid var(--line);display:flex;align-items:center;justify-content:center;font-size:22px;margin-bottom:14px}
|
|
12
|
+
.eyebrow{font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--brand);font-weight:600}
|
|
13
|
+
h1{font-size:28px;line-height:1.2;margin:4px 0 8px;letter-spacing:-.02em}
|
|
14
|
+
.lead{color:var(--muted);font-size:15.5px;margin:0;max-width:540px}
|
|
15
|
+
h2{font-size:13px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin:32px 0 10px;font-weight:600}
|
|
16
|
+
p{margin:0 0 10px}
|
|
17
|
+
.list{list-style:none;padding:0;margin:0;border:1px solid var(--line);border-radius:10px;overflow:hidden}
|
|
18
|
+
.list li{padding:10px 14px;border-top:1px solid var(--line);font-size:14px;color:var(--muted)}.list li:first-child{border-top:0}
|
|
19
|
+
.list b{display:block;color:var(--fg);font-size:14px;font-weight:600}
|
|
20
|
+
.dots{list-style:none;padding:0;margin:0}.dots li{position:relative;padding:0 0 6px 20px;font-size:14.5px}
|
|
21
|
+
.dots li:before{content:"";position:absolute;left:4px;top:.62em;width:6px;height:6px;border-radius:50%;background:var(--brand)}
|
|
22
|
+
.prompt{display:flex;gap:10px;align-items:baseline;border:1px solid var(--line);border-radius:12px;padding:12px 14px;margin:8px 0}
|
|
23
|
+
.prompt i{font-style:normal;color:var(--brand);font-weight:700}
|
|
24
|
+
.note{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:12px 14px;font-size:14px;color:var(--muted)}
|
|
25
|
+
.note b{color:var(--fg)}
|
|
26
|
+
code{white-space:nowrap;font:13px ui-monospace,SFMono-Regular,Menlo,monospace;background:var(--card);border:1px solid var(--line);border-radius:5px;padding:1px 5px}
|
|
27
|
+
.pager{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:40px}
|
|
28
|
+
.pager a{display:block;border:1px solid var(--line);border-radius:10px;padding:10px 14px;text-decoration:none;color:var(--fg);font-weight:600;font-size:14px}
|
|
29
|
+
.pager a:hover{border-color:var(--brand)}.pager small{display:block;color:var(--muted);font-weight:500;font-size:12px}
|
|
30
|
+
.pager .next{grid-column:2;text-align:right}
|
|
31
|
+
@media (max-width:420px){.pager{grid-template-columns:1fr}.pager .next{grid-column:1}}
|
|
32
|
+
</style></head><body><main>
|
|
33
|
+
<section class="hero"><a class="back" href="README.html">← Welcome to Flyspace</a><div class="badge">👥</div>
|
|
34
|
+
<div class="eyebrow">Guide 5 of 6</div><h1>Inviting your team</h1>
|
|
35
|
+
<p class="lead">Invite people from Workspace Settings. Each person gets an email with a link to join.</p></section>
|
|
36
|
+
<h2>Roles</h2><ul class="list"><li><b>Admins</b>Manage the workspace: members, channels, settings and billing.</li><li><b>Members</b>Take part in the channels they can see, and work with the agent there.</li></ul><h2>What new members see</h2><div class="note">New members land in #general and see every public channel. Private channels stay hidden until someone adds them.</div><h2>Before you invite</h2><ul class="dots"><li>Write a short note in #general about what the workspace is for.</li><li>Check which channels are public. Anything in a public channel is visible to everyone you invite.</li></ul>
|
|
37
|
+
<nav class="pager"><a href="05-sharing-docs.html"><small>← Previous</small>Sharing docs</a><a class="next" href="07-automations.html"><small>Next →</small>Automations</a></nav>
|
|
38
|
+
</main></body></html>
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<!doctype html><html lang="en"><head><title>Automations</title><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
|
|
2
|
+
<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&display=swap">
|
|
3
|
+
<style>
|
|
4
|
+
:root{--bg:#fff;--fg:#17171c;--muted:#6b6b76;--line:#e8e8ef;--card:#f6f6fb;--brand:#5052f2;--brand-soft:#ececfe}
|
|
5
|
+
@media (prefers-color-scheme:dark){:root{--bg:#141418;--fg:#ececf1;--muted:#9898a6;--line:#26262e;--card:#1b1b21;--brand:#7f81ff;--brand-soft:#23234a}}
|
|
6
|
+
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--fg);font:15px/1.6 'Plus Jakarta Sans','PingFang TC','Noto Sans TC',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}
|
|
7
|
+
main{max-width:680px;margin:0 auto;padding:0 20px 48px}
|
|
8
|
+
a{color:var(--brand)}
|
|
9
|
+
.hero{margin:0 -20px 8px;padding:20px 28px 28px;background:radial-gradient(120% 140% at 0% 0%,var(--brand-soft),transparent 60%);border-bottom:1px solid var(--line)}
|
|
10
|
+
.back{display:inline-block;font-size:13px;font-weight:500;color:var(--muted);text-decoration:none;margin-bottom:22px}.back:hover{color:var(--brand)}
|
|
11
|
+
.badge{width:44px;height:44px;border-radius:12px;background:var(--bg);border:1px solid var(--line);display:flex;align-items:center;justify-content:center;font-size:22px;margin-bottom:14px}
|
|
12
|
+
.eyebrow{font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--brand);font-weight:600}
|
|
13
|
+
h1{font-size:28px;line-height:1.2;margin:4px 0 8px;letter-spacing:-.02em}
|
|
14
|
+
.lead{color:var(--muted);font-size:15.5px;margin:0;max-width:540px}
|
|
15
|
+
h2{font-size:13px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin:32px 0 10px;font-weight:600}
|
|
16
|
+
p{margin:0 0 10px}
|
|
17
|
+
.list{list-style:none;padding:0;margin:0;border:1px solid var(--line);border-radius:10px;overflow:hidden}
|
|
18
|
+
.list li{padding:10px 14px;border-top:1px solid var(--line);font-size:14px;color:var(--muted)}.list li:first-child{border-top:0}
|
|
19
|
+
.list b{display:block;color:var(--fg);font-size:14px;font-weight:600}
|
|
20
|
+
.dots{list-style:none;padding:0;margin:0}.dots li{position:relative;padding:0 0 6px 20px;font-size:14.5px}
|
|
21
|
+
.dots li:before{content:"";position:absolute;left:4px;top:.62em;width:6px;height:6px;border-radius:50%;background:var(--brand)}
|
|
22
|
+
.prompt{display:flex;gap:10px;align-items:baseline;border:1px solid var(--line);border-radius:12px;padding:12px 14px;margin:8px 0}
|
|
23
|
+
.prompt i{font-style:normal;color:var(--brand);font-weight:700}
|
|
24
|
+
.note{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:12px 14px;font-size:14px;color:var(--muted)}
|
|
25
|
+
.note b{color:var(--fg)}
|
|
26
|
+
code{white-space:nowrap;font:13px ui-monospace,SFMono-Regular,Menlo,monospace;background:var(--card);border:1px solid var(--line);border-radius:5px;padding:1px 5px}
|
|
27
|
+
.pager{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:40px}
|
|
28
|
+
.pager a{display:block;border:1px solid var(--line);border-radius:10px;padding:10px 14px;text-decoration:none;color:var(--fg);font-weight:600;font-size:14px}
|
|
29
|
+
.pager a:hover{border-color:var(--brand)}.pager small{display:block;color:var(--muted);font-weight:500;font-size:12px}
|
|
30
|
+
.pager .next{grid-column:2;text-align:right}
|
|
31
|
+
@media (max-width:420px){.pager{grid-template-columns:1fr}.pager .next{grid-column:1}}
|
|
32
|
+
</style></head><body><main>
|
|
33
|
+
<section class="hero"><a class="back" href="README.html">← Welcome to Flyspace</a><div class="badge">⏰</div>
|
|
34
|
+
<div class="eyebrow">Guide 6 of 6</div><h1>Automations</h1>
|
|
35
|
+
<p class="lead">Automations run the agent without anyone typing a message.</p></section>
|
|
36
|
+
<h2>Kinds</h2><ul class="list"><li><b>Schedules</b>Run a prompt on a timetable, such as a daily digest every weekday at 9am.</li><li><b>Triggers</b>Run when a message in a channel matches a pattern, such as triaging every new bug report.</li></ul><h2>Setting one up</h2><p>The quickest way is to ask the agent in the channel where the results should go:</p><div class="prompt"><i>@</i>Post a summary of yesterday's topics in this channel every weekday at 9am.</div><p style="color:var(--muted);font-size:14px;margin-top:10px">You can also create and edit automations from the channel's settings.</p><h2>Tips</h2><ul class="dots"><li>Start with one schedule you would actually read, then add more.</li><li>Keep the prompt specific about what to include and what to leave out.</li></ul>
|
|
37
|
+
<nav class="pager"><a href="06-inviting-your-team.html"><small>← Previous</small>Inviting your team</a></nav>
|
|
38
|
+
</main></body></html>
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
<!doctype html><html lang="en"><head><title>Welcome to Flyspace</title><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
|
|
2
|
+
<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&display=swap">
|
|
3
|
+
<style>
|
|
4
|
+
:root{--bg:#fff;--fg:#17171c;--muted:#6b6b76;--line:#e8e8ef;--card:#f6f6fb;--brand:#5052f2;--brand-soft:#ececfe}
|
|
5
|
+
@media (prefers-color-scheme:dark){:root{--bg:#141418;--fg:#ececf1;--muted:#9898a6;--line:#26262e;--card:#1b1b21;--brand:#7f81ff;--brand-soft:#23234a}}
|
|
6
|
+
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--fg);font:15px/1.6 'Plus Jakarta Sans','PingFang TC','Noto Sans TC',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}
|
|
7
|
+
main{max-width:680px;margin:0 auto;padding:0 20px 56px}
|
|
8
|
+
.hero{margin:0 -20px 32px;padding:44px 28px 36px;background:radial-gradient(120% 140% at 0% 0%,var(--brand-soft),transparent 60%);border-bottom:1px solid var(--line)}
|
|
9
|
+
.mark{width:44px;height:44px;margin-bottom:18px}.mark svg{width:100%;height:100%}
|
|
10
|
+
.eyebrow{font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--brand);font-weight:600}
|
|
11
|
+
h1{font-size:32px;line-height:1.15;margin:6px 0 10px;letter-spacing:-.02em}
|
|
12
|
+
.lead{color:var(--muted);font-size:16px;margin:0;max-width:520px}
|
|
13
|
+
h2{font-size:13px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin:36px 0 12px;font-weight:600}
|
|
14
|
+
.grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
|
|
15
|
+
.card{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:10px 12px}
|
|
16
|
+
.card b{display:flex;align-items:center;gap:7px;font-size:13.5px;line-height:1.3;margin-bottom:4px}.card span{display:block;color:var(--muted);font-size:12.5px;line-height:1.45}
|
|
17
|
+
.ic{flex:none;font-style:normal;display:inline-flex;width:22px;height:22px;border-radius:6px;background:var(--brand-soft);color:var(--brand);align-items:center;justify-content:center;font-weight:700;font-size:12px}
|
|
18
|
+
.steps{counter-reset:s;list-style:none;padding:0;margin:0}
|
|
19
|
+
.steps li{counter-increment:s;position:relative;padding:0 0 16px 26px;border-left:1px dashed var(--line);margin-left:14px}
|
|
20
|
+
.steps li:last-child{border-color:transparent}
|
|
21
|
+
.steps li:before{content:counter(s);position:absolute;left:-15px;top:-2px;width:30px;height:30px;border-radius:50%;background:var(--brand);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:600;font-size:14px}
|
|
22
|
+
.steps b{display:block}.steps span{color:var(--muted);font-size:14px}
|
|
23
|
+
.prompt{display:flex;gap:10px;align-items:baseline;border:1px solid var(--line);border-radius:12px;padding:12px 14px;margin-bottom:8px;background:var(--bg)}
|
|
24
|
+
.prompt i{font-style:normal;color:var(--brand);font-weight:700}
|
|
25
|
+
.guides{display:grid;grid-template-columns:1fr 1fr;gap:8px}
|
|
26
|
+
.guide{display:flex;gap:10px;align-items:flex-start;border:1px solid var(--line);border-radius:10px;padding:10px 12px;color:var(--fg);text-decoration:none;font-weight:500;font-size:14px}
|
|
27
|
+
.guide:last-child:nth-child(odd){grid-column:1/-1}.guide:hover{border-color:var(--brand)}.guide .e{flex:none;width:30px;height:30px;border-radius:8px;background:var(--card);display:flex;align-items:center;justify-content:center;font-size:16px}
|
|
28
|
+
.guide .t,.guide em{line-height:20px;padding-top:5px}.guide em{margin-left:auto;font-style:normal;color:var(--muted)}
|
|
29
|
+
.foot{margin-top:36px;color:var(--muted);font-size:13px}
|
|
30
|
+
@media (max-width:600px){.grid{grid-template-columns:1fr 1fr}}@media (max-width:420px){.grid,.guides{grid-template-columns:1fr}}
|
|
31
|
+
</style></head><body><main>
|
|
32
|
+
<section class="hero"><img class="mark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMDI0IDEwMjQiPgo8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjAwMDAwMCwxMDI0LjAwMDAwMCkgc2NhbGUoMC4xMDAwMDAsLTAuMTAwMDAwKSIgZmlsbD0iIzUwNTJmMiIgc3Ryb2tlPSJub25lIj4KPHBhdGggZD0iTTgyMzcgODY2NCBjLTQgLTQgLTcgLTE2IC03IC0yNyAwIC0xMiAtNSAtMzQgLTEwIC01MSAtNiAtMTcgLTI2Ci04MyAtNDUgLTE0NiAtMTkgLTYzIC00MCAtMTMzIC00NyAtMTU1IC03IC0yNCAtMzQgLTYyIC02OCAtOTYgLTQ3IC00NyAtNjcKLTU5IC0xNDAgLTgzIC03NSAtMjUgLTE5OCAtNjAgLTI5OCAtODYgLTE5IC00IC0zNiAtMTEgLTM5IC0xMyAtOSAtMTAgOCAtMjcKMjYgLTI3IDEwIDAgNDEgLTcgNjcgLTE1IDI3IC04IDk2IC0yOSAxNTQgLTQ2IDE1MyAtNDcgMjAwIC03MCAyNDYgLTEyMiA0MgotNDggNzUgLTEzNSAxMjkgLTM0MiA0MyAtMTY0IDQ4IC0xNjUgODUgLTIwIDQyIDE2NSA5NiAzMTQgMTI3IDM1NCA0NyA2MCAxNzMKMTEzIDQwOCAxNzMgMTM2IDM1IDEzMyA0MCAtNTAgODggLTE3NCA0NiAtMjkyIDkzIC0zMzIgMTMyIC0xOCAxOCAtNDQgNTUgLTU3CjgzIC0yNiA1NSAtMTA5IDMyMSAtMTE4IDM3OSAtMyAyMSAtMjAgMzEgLTMxIDIweiBtMzEgLTg3IGM2IC02IDE0IC0yNiAxNwotNDIgOSAtMzggNTIgLTE3NiA3MyAtMjM1IDI0IC02OSA2OCAtMTI3IDExNyAtMTU1IDQ3IC0yOCAyMDUgLTg1IDI5NSAtMTA2CjY0IC0xNSA5MCAtMzMgNzIgLTUxIC02IC02IC02NCAtMjYgLTEyOSAtNDUgLTE4NiAtNTMgLTI2MiAtOTEgLTMwNyAtMTUzIC0zMgotNDMgLTEwNSAtMjQ1IC0xMjEgLTMzMiAtMTYgLTgzIC01MSAtNjQgLTc5IDQyIC02MSAyMjYgLTEwMSAzMDggLTE3MyAzNTMKLTQzIDI3IC0yMzkgOTUgLTMyMCAxMTIgLTE3IDMgLTM3IDEzIC00NCAyMSAtMTkgMjMgNSAzOSA4NiA1OSA4MyAyMSAyMjMgNjgKMjYzIDg5IDcwIDM2IDExNSAxMTMgMTYyIDI3NiAxMiA0MSAyNSA4NSAzMSA5OCA1IDEzIDkgMzEgOSA0MCAwIDE4IDE4IDQyIDMxCjQyIDQgMCAxMSAtNiAxNyAtMTN6IE03ODU1IDc2MTkgYy00NyAtMzAgLTIyNSAtMTA1IC0zNTMgLTE1MCAtNDc3IC0xNjUKLTExMzMgLTI3NSAtMTkwNyAtMzIwIC0xMDQgLTYgLTUyOSAtMTMgLTk0MiAtMTYgLTYwMCAtNCAtNzUzIC04IC03NTMgLTE4IDAKLTcgLTM5IC0xMzQgLTg2IC0yODEgLTQ3IC0xNDggLTEyMCAtMzc1IC0xNjEgLTUwNCAtNDEgLTEyOSAtMTEwIC0zNDUgLTE1MwotNDgwIC00MyAtMTM1IC0xNDYgLTQ2MSAtMjMwIC03MjUgLTgzIC0yNjQgLTE5NCAtNjE1IC0yNDcgLTc4MCAtNTIgLTE2NQotMTIyIC0zODUgLTE1NSAtNDkwIC0zMiAtMTA0IC05MCAtMjg3IC0xMjggLTQwNSAtNzAgLTIyMCAtMzQzIC0xMDgxIC00MzEKLTEzNjEgLTI3IC04NiAtNDkgLTE1OSAtNDkgLTE2MiAwIC0zIDcwIDQyIDE1NSAxMDEgNDI1IDI5NCA2MDEgNDE1IDEwODUgNzQ2CjEzNSA5MyAyNTUgMTc4IDI2NyAxOTAgMTMgMTMgMzkgNzYgNjYgMTYxIDE2MyA1MDYgMjk3IDkzMyAyOTcgOTQzIDAgMTUgLTE5CjE1IC0xNzUgLTMgLTEzMiAtMTYgLTMwNiAtNTMgLTM2OSAtNzkgLTMwIC0xMiAtMzcgLTEyIC00NiAtMSAtMzIgMzggMzA3IDE5NAo1NTAgMjU0IDQ3IDExIDE3MiAzNyAyNzkgNTYgMzA4IDU2IDQ5NiAxMDkgNzQ2IDIxMCA1OTAgMjM4IDExNDIgNjU0IDE1MTkKMTE0NCAzMSA0MSA1NCA3NiA1MiA3OCAtMyAzIC0xOSAtNSAtMzUgLTE3IC04MCAtNTYgLTM1MyAtMTYzIC01NzEgLTIyNCAtMzQxCi05NCAtODIxIC0xNjAgLTEzNTUgLTE4NSAtMTMxIC02IC0xNzMgLTUgLTE4NCA0IC0xMSAxMSAyIDYwIDc4IDI5NSA1MCAxNTUKOTEgMjg3IDkxIDI5MiAwIDI2IC0zNTAgLTE5IC01MDggLTY1IC02NSAtMTkgLTg0IC0yMSAtOTIgLTExIC0xNCAxNSAxNiAzNwoxMjUgOTEgMjAyIDEwMSA0NDMgMTY5IDcyMCAyMDMgMzM0IDQwIDU1OSA4MyA4MTMgMTU2IDc0OSAyMTMgMTQyNCA2MTcgMTk0OAoxMTY2IDExNSAxMjEgMTkwIDIwOCAxNzcgMjA3IC00IDAgLTIxIC05IC0zOCAtMjB6Ii8+CjwvZz4KPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC4wMDAwMDAsMTAyNC4wMDAwMDApIHNjYWxlKDAuMTAwMDAwLC0wLjEwMDAwMCkiIGZpbGw9IiM5ZGE3ZmUiIHN0cm9rZT0ibm9uZSI+CjxwYXRoIGQ9Ik04MjQ3IDg2NDAgYy00IC04IC0xMyAtNDAgLTIxIC03MCAtOCAtMzAgLTIyIC03NyAtMzAgLTEwNSAtOCAtMjcKLTIxIC03MyAtMjkgLTEwMCAtMzMgLTExOSAtODQgLTE5NyAtMTUxIC0yMzIgLTQyIC0yMiAtMTU2IC02MCAtMjYxIC04OCAtNTAKLTEzIC0xMDQgLTI5IC0xMjAgLTM1IGwtMzAgLTEyIDY1IC0xOSBjMzYgLTExIDgzIC0yNCAxMDUgLTMxIDEwMiAtMjkgMjIzCi03MyAyNTggLTk1IDc1IC00NyAxMTMgLTEyOSAxODIgLTM4OCAxNCAtNTUgMjkgLTEwNyAzMiAtMTE1IDMgLTggMTYgMjYgMjgKNzUgNDMgMTY5IDk3IDMxOSAxMzEgMzY1IDMwIDQxIDU0IDU4IDE1MSAxMDMgMTggOCAxMDIgMzUgMTg4IDU5IDg1IDIzIDE1NQo0NiAxNTUgNDkgMCAzIC00MiAxNiAtOTIgMjggLTEyOSAzMiAtMjgxIDg1IC0zMzMgMTE2IC00NyAyNyAtOTMgODYgLTExNCAxNDUKLTI3IDc1IC04MSAyNTcgLTEwMSAzMzUgLTUgMjEgLTkgMjUgLTEzIDE1eiIvPgo8L2c+Cjwvc3ZnPg==" alt="">
|
|
33
|
+
<div class="eyebrow">Getting started</div><h1>Welcome to Flyspace</h1>
|
|
34
|
+
<p class="lead">Team chat with an AI agent in every channel. Talk with your team and the agent in one place, and let the agent do real work on your files.</p></section>
|
|
35
|
+
<h2>How it fits together</h2>
|
|
36
|
+
<div class="grid">
|
|
37
|
+
<div class="card"><b><i class="ic">#</i>Channels</b><span>Each message starts a topic. Replies stay inside it.</span></div>
|
|
38
|
+
<div class="card"><b><i class="ic">▤</i>Folders</b><span>Every channel is a real folder the agent works in.</span></div>
|
|
39
|
+
<div class="card"><b><i class="ic">✦</i>The agent</b><span>Mention it in any topic. It reads, writes and runs things for you.</span></div>
|
|
40
|
+
<div class="card"><b><i class="ic">❐</i>Docs</b><span>The files in this folder. You are reading one now.</span></div>
|
|
41
|
+
</div>
|
|
42
|
+
<h2>Three steps to start</h2>
|
|
43
|
+
<ol class="steps">
|
|
44
|
+
<li><b>Talk to the agent</b><span>Start a topic in any channel and mention the agent.</span></li>
|
|
45
|
+
<li><b>Keep what matters as docs</b><span>Ask for a plan, notes or a spec as a file. It shows up here.</span></li>
|
|
46
|
+
<li><b>Invite your team</b><span>From Workspace Settings. Everyone joins #general first.</span></li>
|
|
47
|
+
</ol>
|
|
48
|
+
<h2>Try asking</h2>
|
|
49
|
+
<div class="prompt"><i>@</i>Summarise what's in this channel's folder.</div>
|
|
50
|
+
<div class="prompt"><i>@</i>Post a summary of yesterday's topics here every weekday at 9am.</div>
|
|
51
|
+
<h2>Guides</h2>
|
|
52
|
+
<div class="guides">
|
|
53
|
+
<a class="guide" href="02-working-with-the-agent.html"><span class="e">🤖</span><span class="t">Working with the agent</span><em>→</em></a>
|
|
54
|
+
<a class="guide" href="03-channels-and-folders.html"><span class="e">📁</span><span class="t">Channels and folders</span><em>→</em></a>
|
|
55
|
+
<a class="guide" href="04-docs.html"><span class="e">📄</span><span class="t">Docs</span><em>→</em></a>
|
|
56
|
+
<a class="guide" href="05-sharing-docs.html"><span class="e">🔗</span><span class="t">Sharing docs</span><em>→</em></a>
|
|
57
|
+
<a class="guide" href="06-inviting-your-team.html"><span class="e">👥</span><span class="t">Inviting your team</span><em>→</em></a>
|
|
58
|
+
<a class="guide" href="07-automations.html"><span class="e">⏰</span><span class="t">Automations</span><em>→</em></a>
|
|
59
|
+
</div>
|
|
60
|
+
<p class="foot">This page is an ordinary file, README.html. Make it your team's own welcome, or delete it when you no longer need it.</p>
|
|
61
|
+
</main></body></html>
|
package/README.md
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
# Flyspace CLI
|
|
2
|
-
|
|
3
|
-
**The AI native workspace.** `flyspace-cli` turns your machine into a Host that runs Claude Code agents for your [Flyspace](https://flyspace.ai) workspaces. Each channel maps to a real folder on disk, and the agent works inside it.
|
|
4
|
-
|
|
5
|
-
## Requirements
|
|
6
|
-
|
|
7
|
-
- macOS or Linux. On Windows, use [WSL2](https://learn.microsoft.com/windows/wsl/install) with systemd enabled (`systemd=true` in `/etc/wsl.conf`). WSL does not start with Windows, so open it once after each reboot. Native Windows is not supported yet.
|
|
8
|
-
- Node.js 20 or later
|
|
9
|
-
- [Claude Code](https://docs.anthropic.com/en/docs/claude-code), installed and signed in. Run `claude` once to finish the browser sign-in before starting the Host.
|
|
10
|
-
- A Flyspace account at [flyspace.ai](https://flyspace.ai)
|
|
11
|
-
|
|
12
|
-
## Get Started
|
|
13
|
-
|
|
14
|
-
```bash
|
|
15
|
-
npm install -g flyspace-cli
|
|
16
|
-
flyspace auth login # link this machine to your workspace
|
|
17
|
-
flyspace dashboard --mode host # start the agent Host and leave it running
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
`auth login` opens a browser to approve this device. Use `--no-browser` to only print the approval URL, or `--name <name>` to set the device name shown in the Workspace (default: hostname).
|
|
21
|
-
|
|
22
|
-
Then open your workspace, pick a channel, and talk to the agent.
|
|
23
|
-
|
|
24
|
-
## Keep It Running
|
|
25
|
-
|
|
26
|
-
```bash
|
|
27
|
-
flyspace service install # run as a background service (launchd on macOS, systemd on Linux)
|
|
28
|
-
flyspace restart
|
|
29
|
-
flyspace stop
|
|
30
|
-
flyspace logs # tail the service log (-e for the error log)
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
## Commands
|
|
34
|
-
|
|
35
|
-
| Command | What it does |
|
|
36
|
-
|---|---|
|
|
37
|
-
| `flyspace auth login \| status \| logout` | Register, inspect or revoke this device |
|
|
38
|
-
| `flyspace dashboard` | Start the Workspace web UI and agent Host |
|
|
39
|
-
| `flyspace start` | Start the agent Host in the foreground |
|
|
40
|
-
| `flyspace workspace create <slug>` | Provision a workspace (safe to re-run as a repair) |
|
|
41
|
-
| `flyspace reconcile` | Repair a workspace's local files against the server |
|
|
42
|
-
| `flyspace config` | Show resolved config (`--edit`, `--path`) |
|
|
43
|
-
| `flyspace automation` | Manage scheduled tasks and triggers |
|
|
44
|
-
| `flyspace usage` | Show agent token usage and cost |
|
|
45
|
-
| `flyspace profiles` | List instances and their service status |
|
|
46
|
-
| `flyspace mcp` | Run one of Flyspace's own MCP servers on stdio |
|
|
47
|
-
| `flyspace slack` | Optional Slack sync channel (channels, users, post) |
|
|
48
|
-
| `flyspace upgrade` | Upgrade to the latest version |
|
|
49
|
-
|
|
50
|
-
Run `flyspace --help` or `flyspace <command> --help` for options.
|
|
51
|
-
|
|
52
|
-
## Update
|
|
53
|
-
|
|
54
|
-
```bash
|
|
55
|
-
flyspace upgrade
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
## Uninstall
|
|
59
|
-
|
|
60
|
-
```bash
|
|
61
|
-
flyspace uninstall
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
This revokes the device, removes every background service, and deletes the CLI, config and local data. Your channel folders under `~/Flyspace` are kept.
|
|
65
|
-
|
|
66
|
-
## License
|
|
67
|
-
|
|
68
|
-
See [LICENSE](./LICENSE).
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
# Welcome to Flyspace
|
|
2
|
-
|
|
3
|
-
Flyspace is team chat with an AI agent working inside every channel. You talk with your team and with the agent in the same place, and the agent does real work: reading and editing files, running scripts, answering questions about your projects.
|
|
4
|
-
|
|
5
|
-
## How a workspace is laid out
|
|
6
|
-
|
|
7
|
-
- **Channels** hold the conversation. Each message starts a topic, and replies stay inside that topic.
|
|
8
|
-
- **Every channel is a folder.** The agent in a channel works inside that channel's folder, so a channel linked to a project can read and change the real files.
|
|
9
|
-
- **#general** is the one channel everyone in the workspace can see. New members land here first.
|
|
10
|
-
- **Docs** are the files in a channel's folder. You are reading one now, in the Docs pane of #general.
|
|
11
|
-
|
|
12
|
-
## Where to go next
|
|
13
|
-
|
|
14
|
-
1. [Working with the agent](02-working-with-the-agent.md)
|
|
15
|
-
2. [Channels and folders](03-channels-and-folders.md)
|
|
16
|
-
3. [Docs](04-docs.md)
|
|
17
|
-
4. [Inviting your team](05-inviting-your-team.md)
|
|
18
|
-
5. [Automations](06-automations.md)
|
|
19
|
-
|
|
20
|
-
These guides are ordinary files. Edit them, add your own team notes next to them, or delete them once you no longer need them.
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
# Working with the agent
|
|
2
|
-
|
|
3
|
-
Start a topic in any channel and mention the agent, or reply inside a topic it is already part of. It answers in the same topic, so the context stays together.
|
|
4
|
-
|
|
5
|
-
## What it can do
|
|
6
|
-
|
|
7
|
-
- Read, write and organise files in the channel's folder.
|
|
8
|
-
- Run commands and scripts on the machine connected to the workspace (your Host).
|
|
9
|
-
- Summarise a long topic, draft a document, review code, research a question.
|
|
10
|
-
- Schedule work for later with an automation.
|
|
11
|
-
|
|
12
|
-
## Tips
|
|
13
|
-
|
|
14
|
-
- **One topic per task.** A focused topic gives the agent focused context. Start a new topic when the subject changes.
|
|
15
|
-
- **Point at files.** Name the file or folder you mean; the agent works from the real contents, not a guess.
|
|
16
|
-
- **Ask for a doc.** For anything you want to keep (a plan, meeting notes, a spec), ask the agent to write it as a file. It then shows up in the Docs pane.
|
|
17
|
-
- **Use the buttons.** When the agent offers quick replies under a message, clicking one is the same as typing it.
|
|
18
|
-
|
|
19
|
-
## Where it runs
|
|
20
|
-
|
|
21
|
-
The agent runs on the Host: the machine you connected during setup, using that machine's own agent CLI and login. If the Host is offline, chat still works, but the agent waits until the machine is back.
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
# Channels and folders
|
|
2
|
-
|
|
3
|
-
Every channel has a folder behind it. That folder is where the agent works and where the channel's docs live.
|
|
4
|
-
|
|
5
|
-
## Two kinds of channel folders
|
|
6
|
-
|
|
7
|
-
- **New folders.** A channel you create from scratch gets its own empty folder under `~/Flyspace/<workspace>/`.
|
|
8
|
-
- **Linked projects.** A channel made from an existing project folder links to that folder, so the agent works on the real project and its history.
|
|
9
|
-
|
|
10
|
-
## Public and private
|
|
11
|
-
|
|
12
|
-
- **Public** channels are visible to everyone in the workspace. #general is always public, and it cannot be made private, renamed or deleted.
|
|
13
|
-
- **Private** channels are visible only to the members you add (and to admins).
|
|
14
|
-
|
|
15
|
-
## Good habits
|
|
16
|
-
|
|
17
|
-
- One channel per project, team or recurring topic.
|
|
18
|
-
- Keep the conversation in the channel and the lasting knowledge in its folder: decisions, plans and notes as docs, not buried in a chat history.
|
|
19
|
-
- Use the channel's settings to give its agent extra instructions, for example the project's conventions or the tone to use.
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
# Docs
|
|
2
|
-
|
|
3
|
-
The Docs pane shows the files in the current channel's folder. Markdown files render as articles; other files can be previewed or downloaded.
|
|
4
|
-
|
|
5
|
-
## Working with docs
|
|
6
|
-
|
|
7
|
-
- **Read and edit** Markdown right in the pane.
|
|
8
|
-
- **Ask about a doc.** Open the chat beside a doc to ask the agent about it, or to have it make changes.
|
|
9
|
-
- **Share.** Publish a doc as a public page with its own link when someone outside the workspace needs to read it.
|
|
10
|
-
- **Let the agent write.** Ask for a plan, a summary or a spec as a file, and it appears here.
|
|
11
|
-
|
|
12
|
-
## Why docs live in folders
|
|
13
|
-
|
|
14
|
-
Files in the channel's folder are real files on disk, next to the project they describe. Nothing to sync, nothing to copy: the agent, your editor and your team all see the same thing.
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
# Inviting your team
|
|
2
|
-
|
|
3
|
-
Invite people from Workspace Settings. Each person gets an email with a link to join.
|
|
4
|
-
|
|
5
|
-
## Roles
|
|
6
|
-
|
|
7
|
-
- **Admins** manage the workspace: members, channels, settings and billing.
|
|
8
|
-
- **Members** take part in the channels they can see, and can work with the agent there.
|
|
9
|
-
|
|
10
|
-
## What new members see
|
|
11
|
-
|
|
12
|
-
New members land in #general and see every public channel. Private channels stay hidden until someone adds them.
|
|
13
|
-
|
|
14
|
-
## Before you invite
|
|
15
|
-
|
|
16
|
-
- Write a short note in #general about what the workspace is for.
|
|
17
|
-
- Check which channels are public. Anything in a public channel is visible to everyone you invite.
|