@agent-link/server 0.1.536 → 0.1.538

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.
@@ -1,593 +1,233 @@
1
1
  <!DOCTYPE html>
2
2
  <html lang="en">
3
3
  <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>msclaude — Run coding agents from anywhere</title>
7
- <meta name="description" content="msclaude gives Copilot, Claude Code, Codex, and other coding agents a clean remote workspace with multi-directory sessions, file preview and editing, remote terminal, and end-to-end encryption.">
8
- <meta name="keywords" content="msclaude, Copilot, Claude Code, Codex, coding agents, remote workspace, browser IDE, end-to-end encrypted, remote terminal, file editor">
9
- <link rel="canonical" href="https://msclaude.ai/">
10
- <link rel="alternate" hreflang="en" href="https://msclaude.ai/">
11
- <link rel="alternate" hreflang="zh" href="https://msclaude.ai/zh">
12
- <link rel="alternate" hreflang="x-default" href="https://msclaude.ai/">
13
- <meta property="og:type" content="website">
14
- <meta property="og:title" content="msclaude — Run coding agents from anywhere">
15
- <meta property="og:description" content="A clean remote workspace for Copilot, Claude Code, Codex, and other coding agents. Multi-directory sessions, files, terminal, and end-to-end encryption.">
16
- <meta property="og:url" content="https://msclaude.ai/">
17
- <meta property="og:image" content="https://msclaude.ai/iPad.png">
18
- <meta property="og:site_name" content="msclaude">
19
- <meta name="twitter:card" content="summary_large_image">
20
- <meta name="twitter:title" content="msclaude Run coding agents from anywhere">
21
- <meta name="twitter:description" content="A clean remote workspace for Copilot, Claude Code, Codex, and other coding agents.">
22
- <meta name="twitter:image" content="https://msclaude.ai/iPad.png">
23
- <link rel="icon" type="image/svg+xml" href="/favicon.svg">
24
- <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
25
- <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
26
- <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
27
- <script type="application/ld+json">
28
- {
29
- "@context": "https://schema.org",
30
- "@type": "SoftwareApplication",
31
- "name": "msclaude",
32
- "description": "A clean remote workspace for Copilot, Claude Code, Codex, and other coding agents with end-to-end encryption.",
33
- "url": "https://msclaude.ai/",
34
- "applicationCategory": "DeveloperApplication",
35
- "operatingSystem": "Windows, macOS, Linux",
36
- "offers": { "@type": "Offer", "price": "0", "priceCurrency": "USD" },
37
- "screenshot": "https://msclaude.ai/iPad.png"
38
- }
39
- </script>
40
- <style>
41
- @font-face {
42
- font-family: 'Space Grotesk';
43
- font-style: normal;
44
- font-weight: 300 700;
45
- font-display: swap;
46
- src: url('/vendor/SpaceGrotesk-latin.woff2') format('woff2');
47
- }
48
-
49
- * { box-sizing: border-box; margin: 0; padding: 0; }
50
-
51
- :root {
52
- --bg: #fbfcff;
53
- --card: #ffffff;
54
- --surface: #f3f6fb;
55
- --border: #e4e9f2;
56
- --text: #111827;
57
- --muted: #64748b;
58
- --accent: #018B8D;
59
- --accent-soft: #e6f7f7;
60
- --green: #16a34a;
61
- --code: #101827;
62
- }
63
-
64
- body {
65
- min-height: 100vh;
66
- background:
67
- radial-gradient(circle at top left, rgba(1, 139, 141, 0.12), transparent 32rem),
68
- linear-gradient(180deg, #ffffff 0%, var(--bg) 55%, #ffffff 100%);
69
- color: var(--text);
70
- font-family: 'Space Grotesk', system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
71
- line-height: 1.6;
72
- -webkit-font-smoothing: antialiased;
73
- }
74
-
75
- a { color: inherit; text-decoration: none; }
76
-
77
- nav, main, footer {
78
- width: min(1120px, calc(100% - 32px));
79
- margin: 0 auto;
80
- }
81
-
82
- nav {
83
- display: flex;
84
- align-items: center;
85
- justify-content: space-between;
86
- padding: 24px 0;
87
- }
88
-
89
- .logo {
90
- display: inline-flex;
91
- align-items: center;
92
- gap: 10px;
93
- font-weight: 700;
94
- letter-spacing: -0.03em;
95
- }
96
-
97
- .logo img { width: 28px; height: 28px; border-radius: 8px; }
98
-
99
- .nav-actions {
100
- align-items: center;
101
- display: flex;
102
- gap: 10px;
103
- }
104
-
105
- .repo-link,
106
- .nav-lang {
107
- border: 1px solid var(--border);
108
- border-radius: 999px;
109
- color: var(--muted);
110
- font-size: 0.86rem;
111
- font-weight: 600;
112
- padding: 8px 13px;
113
- }
114
-
115
- .repo-link:hover,
116
- .nav-lang:hover { color: var(--text); background: #fff; }
117
-
118
- .hero {
119
- display: grid;
120
- grid-template-columns: minmax(0, 1.1fr) minmax(320px, 0.9fr);
121
- gap: 56px;
122
- align-items: center;
123
- padding: 70px 0 42px;
124
- }
125
-
126
- .eyebrow {
127
- display: inline-flex;
128
- align-items: center;
129
- gap: 8px;
130
- background: var(--accent-soft);
131
- border: 1px solid #c8eeee;
132
- border-radius: 999px;
133
- color: var(--accent);
134
- font-size: 0.82rem;
135
- font-weight: 700;
136
- margin-bottom: 22px;
137
- padding: 7px 13px;
138
- }
139
-
140
- .eyebrow::before {
141
- content: "";
142
- width: 7px;
143
- height: 7px;
144
- background: var(--green);
145
- border-radius: 999px;
146
- box-shadow: 0 0 0 4px rgba(22, 163, 74, 0.12);
147
- }
148
-
149
- h1 {
150
- max-width: 720px;
151
- font-size: clamp(2.75rem, 6vw, 5.6rem);
152
- letter-spacing: -0.07em;
153
- line-height: 0.96;
154
- }
155
-
156
- h1 span { color: var(--accent); }
157
-
158
- h1 .preposition {
159
- color: var(--text);
160
- font-size: 0.48em;
161
- letter-spacing: -0.04em;
162
- vertical-align: 0.18em;
163
- }
164
-
165
- .lead {
166
- max-width: 640px;
167
- color: var(--muted);
168
- font-size: clamp(1rem, 2vw, 1.2rem);
169
- margin: 24px 0 30px;
170
- }
171
-
172
- .agent-row {
173
- display: flex;
174
- flex-wrap: wrap;
175
- gap: 10px;
176
- margin-bottom: 32px;
177
- }
178
-
179
- .agent-pill {
180
- align-items: center;
181
- background: rgba(255, 255, 255, 0.78);
182
- border: 1px solid var(--border);
183
- border-radius: 999px;
184
- color: #334155;
185
- display: inline-flex;
186
- font-size: 0.92rem;
187
- font-weight: 650;
188
- gap: 8px;
189
- padding: 9px 14px;
190
- }
191
-
192
- .agent-pill::before {
193
- content: "";
194
- width: 8px;
195
- height: 8px;
196
- border-radius: 99px;
197
- background: var(--accent);
198
- }
199
-
200
- .cta-row {
201
- display: flex;
202
- align-items: flex-start;
203
- flex-direction: column;
204
- gap: 14px;
205
- }
206
-
207
- .cta-primary {
208
- align-items: center;
209
- background: var(--text);
210
- border: 0;
211
- border-radius: 14px;
212
- color: #fff;
213
- cursor: pointer;
214
- display: inline-flex;
215
- font: inherit;
216
- font-size: 0.95rem;
217
- font-weight: 700;
218
- gap: 8px;
219
- padding: 13px 18px;
220
- }
221
-
222
- .install-command {
223
- background: #fff;
224
- border: 1px solid var(--border);
225
- border-radius: 14px;
226
- color: #334155;
227
- cursor: pointer;
228
- font-family: Consolas, 'Courier New', monospace;
229
- font-size: 0.9rem;
230
- overflow-x: auto;
231
- padding: 12px 14px;
232
- width: min(100%, 560px);
233
- }
234
-
235
- .install-command span { display: block; white-space: nowrap; }
236
-
237
- .panel {
238
- background: rgba(255, 255, 255, 0.82);
239
- border: 1px solid var(--border);
240
- border-radius: 28px;
241
- box-shadow: 0 24px 80px rgba(15, 23, 42, 0.10);
242
- padding: 18px;
243
- }
244
-
245
- .workspace {
246
- background: #fff;
247
- border: 1px solid var(--border);
248
- border-radius: 22px;
249
- overflow: hidden;
250
- }
251
-
252
- .workspace-top {
253
- align-items: center;
254
- background: var(--surface);
255
- border-bottom: 1px solid var(--border);
256
- color: var(--muted);
257
- display: flex;
258
- font-size: 0.78rem;
259
- font-weight: 700;
260
- justify-content: space-between;
261
- padding: 13px 16px;
262
- }
263
-
264
- .workspace-body {
265
- display: grid;
266
- grid-template-columns: 0.95fr 1.4fr;
267
- min-height: 330px;
268
- }
269
-
270
- .sidebar {
271
- background: #f8fafc;
272
- border-right: 1px solid var(--border);
273
- padding: 16px;
274
- }
275
-
276
- .session {
277
- border: 1px solid transparent;
278
- border-radius: 14px;
279
- color: var(--muted);
280
- font-size: 0.82rem;
281
- margin-bottom: 10px;
282
- padding: 10px;
283
- }
284
-
285
- .session strong { color: var(--text); display: block; font-size: 0.9rem; }
286
- .session.active { background: #fff; border-color: var(--border); box-shadow: 0 8px 24px rgba(15, 23, 42, 0.05); }
287
-
288
- .content { display: flex; flex-direction: column; padding: 16px; gap: 12px; }
289
-
290
- .chat-card, .file-card, .terminal {
291
- border: 1px solid var(--border);
292
- border-radius: 16px;
293
- padding: 14px;
294
- }
295
-
296
- .chat-card { background: linear-gradient(135deg, #eef4ff, #ffffff); }
297
- .chat-card b, .file-card b { display: block; font-size: 0.86rem; margin-bottom: 4px; }
298
- .chat-card p, .file-card p { color: var(--muted); font-size: 0.82rem; }
299
-
300
- .terminal {
301
- background: var(--code);
302
- color: #dbeafe;
303
- cursor: pointer;
304
- font-family: Consolas, 'Courier New', monospace;
305
- font-size: 0.78rem;
306
- line-height: 1.8;
307
- }
308
-
309
- .terminal span { color: #86efac; }
310
-
311
- .section-head {
312
- margin: 72px auto 26px;
313
- max-width: 680px;
314
- text-align: center;
315
- }
316
-
317
- .section-head h2 {
318
- font-size: clamp(1.8rem, 3.6vw, 3rem);
319
- letter-spacing: -0.05em;
320
- line-height: 1.05;
321
- }
322
-
323
- .section-head p {
324
- color: var(--muted);
325
- margin-top: 12px;
326
- }
327
-
328
- .features {
329
- display: grid;
330
- gap: 16px;
331
- grid-template-columns: repeat(4, 1fr);
332
- }
333
-
334
- .feature-card {
335
- background: var(--card);
336
- border: 1px solid var(--border);
337
- border-radius: 22px;
338
- padding: 22px;
339
- }
340
-
341
- .feature-card h3 {
342
- font-size: 1rem;
343
- letter-spacing: -0.02em;
344
- margin: 14px 0 7px;
345
- }
346
-
347
- .feature-card p {
348
- color: var(--muted);
349
- font-size: 0.9rem;
350
- }
351
-
352
- .feature-icon {
353
- align-items: center;
354
- background: var(--accent-soft);
355
- border-radius: 14px;
356
- color: var(--accent);
357
- display: flex;
358
- height: 42px;
359
- justify-content: center;
360
- width: 42px;
361
- }
362
-
363
- .feature-icon svg {
364
- fill: none;
365
- height: 21px;
366
- stroke: currentColor;
367
- stroke-linecap: round;
368
- stroke-linejoin: round;
369
- stroke-width: 2;
370
- width: 21px;
371
- }
372
-
373
- .security {
374
- align-items: center;
375
- background: #0f172a;
376
- border-radius: 28px;
377
- color: #fff;
378
- display: grid;
379
- gap: 28px;
380
- grid-template-columns: 1.1fr 0.9fr;
381
- margin-top: 18px;
382
- padding: 30px;
383
- }
384
-
385
- .security h2 { font-size: clamp(1.6rem, 3vw, 2.5rem); letter-spacing: -0.05em; line-height: 1.05; }
386
- .security p { color: #b6c3d7; margin-top: 12px; }
387
-
388
- .encrypt-flow {
389
- background: rgba(255, 255, 255, 0.06);
390
- border: 1px solid rgba(255, 255, 255, 0.12);
391
- border-radius: 20px;
392
- color: #cbd5e1;
393
- display: grid;
394
- font-family: Consolas, 'Courier New', monospace;
395
- gap: 10px;
396
- padding: 16px;
397
- }
398
-
399
- .encrypt-flow div {
400
- align-items: center;
401
- display: flex;
402
- justify-content: space-between;
403
- gap: 14px;
404
- }
405
-
406
- .encrypt-flow span:last-child { color: #86efac; }
407
-
408
- footer {
409
- border-top: 1px solid var(--border);
410
- color: var(--muted);
411
- display: flex;
412
- font-size: 0.86rem;
413
- justify-content: space-between;
414
- margin-top: 76px;
415
- padding: 28px 0;
416
- }
417
-
418
- .toast {
419
- background: var(--text);
420
- border-radius: 999px;
421
- bottom: 24px;
422
- color: #fff;
423
- font-size: 0.84rem;
424
- font-weight: 700;
425
- left: 50%;
426
- opacity: 0;
427
- padding: 10px 18px;
428
- pointer-events: none;
429
- position: fixed;
430
- transform: translate(-50%, 16px);
431
- transition: opacity 0.22s, transform 0.22s;
432
- }
433
-
434
- .toast.show { opacity: 1; transform: translate(-50%, 0); }
435
-
436
- @media (max-width: 900px) {
437
- .hero, .security { grid-template-columns: 1fr; }
438
- .hero { padding-top: 44px; }
439
- .features { grid-template-columns: repeat(2, 1fr); }
440
- }
441
-
442
- @media (max-width: 620px) {
443
- nav, main, footer { width: min(100% - 24px, 1120px); }
444
- h1 { font-size: clamp(2.35rem, 15vw, 4rem); }
445
- .workspace-body { grid-template-columns: 1fr; }
446
- .sidebar { border-right: 0; border-bottom: 1px solid var(--border); }
447
- .features { grid-template-columns: 1fr; }
448
- .security { padding: 22px; }
449
- footer { flex-direction: column; gap: 8px; }
450
- }
451
- </style>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>msclaude — Remote Control for Local Coding Agents</title>
7
+ <meta name="description" content="Control Pi, GitHub Copilot, Claude Code, and OpenAI Codex on your development machine from a browser. Manage parallel sessions with end-to-end encryption.">
8
+ <meta name="robots" content="index, follow, max-image-preview:large">
9
+ <meta name="application-name" content="msclaude">
10
+ <meta name="theme-color" content="#f2efe8">
11
+ <link rel="canonical" href="https://msclaude.ai/">
12
+ <link rel="alternate" hreflang="en" href="https://msclaude.ai/">
13
+ <link rel="alternate" hreflang="zh-CN" href="https://msclaude.ai/zh">
14
+ <link rel="alternate" hreflang="x-default" href="https://msclaude.ai/">
15
+ <meta property="og:type" content="website">
16
+ <meta property="og:site_name" content="msclaude">
17
+ <meta property="og:locale" content="en_US">
18
+ <meta property="og:locale:alternate" content="zh_CN">
19
+ <meta property="og:title" content="msclaude — Remote Control for Local Coding Agents">
20
+ <meta property="og:description" content="Use multiple coding agents and working directories from one browser workspace. Code and execution stay on your development machine.">
21
+ <meta property="og:url" content="https://msclaude.ai/">
22
+ <meta property="og:image" content="https://msclaude.ai/iPad.png">
23
+ <meta property="og:image:alt" content="msclaude browser workspace showing parallel coding agent sessions">
24
+ <meta name="twitter:card" content="summary_large_image">
25
+ <meta name="twitter:title" content="msclaude Remote Control for Local Coding Agents">
26
+ <meta name="twitter:description" content="Manage Pi, Copilot, Claude Code, and Codex sessions on your development machine from a browser.">
27
+ <meta name="twitter:image" content="https://msclaude.ai/iPad.png">
28
+ <meta name="twitter:image:alt" content="msclaude browser workspace showing parallel coding agent sessions">
29
+ <link rel="icon" type="image/svg+xml" href="/favicon.svg">
30
+ <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
31
+ <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
32
+ <link rel="manifest" href="/site.webmanifest">
33
+ <link rel="preload" href="/vendor/SpaceGrotesk-latin.woff2" as="font" type="font/woff2" crossorigin>
34
+ <link rel="stylesheet" href="/landing/landing.css">
35
+ <script src="/landing/landing.js" defer></script>
36
+ <script type="application/ld+json">
37
+ {
38
+ "@context": "https://schema.org",
39
+ "@type": "SoftwareApplication",
40
+ "name": "msclaude",
41
+ "url": "https://msclaude.ai/",
42
+ "description": "A browser workspace for remotely controlling coding agents running on your development machine.",
43
+ "applicationCategory": "DeveloperApplication",
44
+ "operatingSystem": "Windows, macOS, Linux",
45
+ "isAccessibleForFree": true,
46
+ "downloadUrl": "https://www.npmjs.com/package/@agent-link/agent",
47
+ "softwareRequirements": "Node.js 18 or later",
48
+ "featureList": [
49
+ "Parallel coding agent sessions",
50
+ "Multiple working directories",
51
+ "Pi, GitHub Copilot, Claude Code, and OpenAI Codex support",
52
+ "Files, Git, terminal, and local port access",
53
+ "End-to-end encrypted messages",
54
+ "Self-hosted relay server"
55
+ ],
56
+ "offers": {
57
+ "@type": "Offer",
58
+ "price": "0",
59
+ "priceCurrency": "USD"
60
+ },
61
+ "sameAs": [
62
+ "https://github.com/kailunshi_microsoft/AgenticWorker",
63
+ "https://www.npmjs.com/package/@agent-link/agent"
64
+ ]
65
+ }
66
+ </script>
452
67
  </head>
453
- <body>
454
- <header>
455
- <nav>
456
- <a class="logo" href="/">
457
- <img src="/favicon.svg" alt="msclaude">
458
- <span>msclaude</span>
459
- </a>
460
- <div class="nav-actions">
461
- <a href="https://github.com/kailunshi_microsoft/AgenticWorker" class="repo-link" rel="noopener">GitHub</a>
462
- <a href="/zh" class="nav-lang">中文</a>
463
- </div>
464
- </nav>
465
- </header>
466
-
467
- <main>
468
- <section class="hero">
469
- <div>
470
- <div class="eyebrow">Remote workspace for coding agents</div>
471
- <h1>Remote control <span class="preposition">for</span><br><span>coding agents.</span></h1>
472
- <p class="lead">msclaude connects your local project to a private web workspace, so you can drive Copilot, Claude Code, Codex, and other agents from any device.</p>
473
- <div class="agent-row" aria-label="Supported agents">
474
- <span class="agent-pill">GitHub Copilot</span>
475
- <span class="agent-pill">Claude Code</span>
476
- <span class="agent-pill">OpenAI Codex</span>
477
- <span class="agent-pill">More agent backends</span>
68
+ <body
69
+ data-install-command="npm install -g @agent-link/agent &amp;&amp; agentlink-client start --daemon"
70
+ data-copy-success="Install command copied"
71
+ data-copy-failure="Copy failed — select the command manually"
72
+ >
73
+ <a class="skip-link" href="#main">Skip to content</a>
74
+
75
+ <header class="site-header">
76
+ <nav class="nav-shell" aria-label="Primary navigation">
77
+ <a class="brand" href="/" aria-label="msclaude home">
78
+ <img class="brand-mark" src="/landing/icons/msclaude-animated.svg" alt="">
79
+ <span>msclaude</span>
80
+ </a>
81
+ <div class="nav-actions">
82
+ <a class="text-link github-link" href="https://github.com/kailunshi_microsoft/AgenticWorker" target="_blank" rel="noopener">GitHub</a>
83
+ <a class="language-link" href="/zh" lang="zh-CN" hreflang="zh-CN">中文</a>
478
84
  </div>
479
- <div class="cta-row">
480
- <button class="cta-primary" onclick="copyInstall()">
481
- <svg width="17" height="17" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="4 17 10 11 4 5"></polyline><line x1="12" y1="19" x2="20" y2="19"></line></svg>
482
- Copy install command
483
- </button>
484
- <code class="install-command" onclick="copyInstall()">
485
- <span>npm install -g @agent-link/agent</span>
486
- <span>agentlink-client start -D --entra</span>
487
- </code>
85
+ </nav>
86
+ </header>
87
+
88
+ <main id="main">
89
+ <section class="hero" aria-labelledby="hero-title">
90
+ <div class="hero-copy">
91
+ <p class="eyebrow"><span></span> Open Source Remote workspace for local agents</p>
92
+ <h1 id="hero-title">Control coding agents on your development machine <em>from a browser.</em></h1>
93
+ <p class="hero-lead">msclaude connects your browser to coding agents running locally. Continue development work remotely while your code, tools, and execution environment remain on your machine.</p>
94
+
95
+ <div class="agent-list" aria-label="Supported coding agents">
96
+ <span><i class="provider-icon"><img src="/landing/icons/agent-pi.svg" alt=""></i> Pi</span>
97
+ <span><i class="provider-icon"><img src="/landing/icons/agent-copilot.svg" alt=""></i> GitHub Copilot</span>
98
+ <span><i class="provider-icon"><img src="/landing/icons/agent-claude.svg" alt=""></i> Claude Code</span>
99
+ <span><i class="provider-icon"><img src="/landing/icons/agent-codex.svg" alt=""></i> OpenAI Codex</span>
100
+ </div>
101
+
102
+ <div class="hero-actions">
103
+ <button class="install-command" type="button" data-copy-install>
104
+ <span class="install-prompt" aria-hidden="true">$</span>
105
+ <code><span>npm install -g @agent-link/agent</span><span>agentlink-client start --daemon</span></code>
106
+ <span class="copy-label">Copy</span>
107
+ </button>
108
+ </div>
109
+ <p class="compatibility">Windows · macOS · Linux · Node.js 18+</p>
488
110
  </div>
489
- </div>
490
111
 
491
- <div class="panel" aria-label="msclaude workspace preview">
492
- <div class="workspace">
493
- <div class="workspace-top">
494
- <span>msclaude.ai/s/abc123</span>
495
- <span>encrypted</span>
112
+ <div class="product-window" aria-label="Illustration of parallel coding agent sessions">
113
+ <div class="window-bar">
114
+ <span class="window-dots" aria-hidden="true"><i></i><i></i><i></i></span>
115
+ <span>msclaude · 4 sessions</span>
116
+ <span class="encrypted-label">● E2E encrypted</span>
496
117
  </div>
497
- <div class="workspace-body">
498
- <div class="sidebar">
499
- <div class="session active"><strong>Q:\src\msclaude</strong>Copilot fixing UI copy</div>
500
- <div class="session"><strong>D:\work\api</strong>Claude Code reviewing diffs</div>
501
- <div class="session"><strong>C:\repo\mobile</strong>Codex summarizing screenshots</div>
502
- <div class="session"><strong>C:\repo\mobile</strong>Terminal + file edits</div>
503
- </div>
504
- <div class="content">
505
- <div class="chat-card">
506
- <b>Agent conversation</b>
507
- <p>Ask for changes, review plans, and keep sessions tied to each directory.</p>
508
- </div>
509
- <div class="file-card">
510
- <b>Preview and edit files</b>
511
- <p>Open source files, inspect diffs, and make focused edits without leaving the browser.</p>
118
+ <div class="provider-switcher" aria-label="Four supported agents">
119
+ <span class="provider-switcher-label">Agents on this page</span>
120
+ <span class="active"><i class="provider-icon"><img src="/landing/icons/agent-pi.svg" alt=""></i>Pi <b>1</b></span>
121
+ <span><i class="provider-icon"><img src="/landing/icons/agent-copilot.svg" alt=""></i>Copilot <b>1</b></span>
122
+ <span><i class="provider-icon"><img src="/landing/icons/agent-claude.svg" alt=""></i>Claude Code <b>1</b></span>
123
+ <span><i class="provider-icon"><img src="/landing/icons/agent-codex.svg" alt=""></i>Codex <b>1</b></span>
124
+ </div>
125
+ <div class="workspace-ui">
126
+ <aside class="session-sidebar">
127
+ <div class="sidebar-title"><strong>Sessions</strong><span>+</span></div>
128
+ <div class="directory-label">Q:\src\frontend</div>
129
+ <div class="session-row active"><i class="provider-icon"><img src="/landing/icons/agent-pi.svg" alt=""></i><span><strong>Landing page copy</strong><small>Pi · working</small></span><b></b></div>
130
+ <div class="session-row"><i class="provider-icon"><img src="/landing/icons/agent-copilot.svg" alt=""></i><span><strong>Fix auth callback</strong><small>Copilot · done</small></span></div>
131
+ <div class="directory-label">D:\work\api</div>
132
+ <div class="session-row"><i class="provider-icon"><img src="/landing/icons/agent-claude.svg" alt=""></i><span><strong>Review API changes</strong><small>Claude Code · working</small></span><b></b></div>
133
+ <div class="session-row"><i class="provider-icon"><img src="/landing/icons/agent-codex.svg" alt=""></i><span><strong>Update unit tests</strong><small>Codex · done</small></span></div>
134
+ </aside>
135
+ <div class="chat-ui">
136
+ <div class="chat-head">
137
+ <div><strong>Landing page copy</strong><small>Q:\src\frontend · Pi</small></div>
138
+ <div class="chat-actions"><span>Files</span><span>Git</span><span>Terminal</span></div>
512
139
  </div>
513
- <div class="terminal" onclick="copyCmd('agentlink-client start -D --entra')">
514
- $ <span>agentlink-client start -D --entra</span>
140
+ <div class="chat-body">
141
+ <div class="message user-message">Update the landing page copy and keep the layout compact.</div>
142
+ <div class="message agent-message">
143
+ <span class="message-author"><i class="provider-icon"><img src="/landing/icons/agent-pi.svg" alt=""></i> Pi</span>
144
+ <p>I’ll revise the product description, keep the supported agents visible, and fit the main content within two screens.</p>
145
+ <div class="tool-call"><span>✓</span><div><strong>apply_patch</strong><small>Updated landing.html and landing.css</small></div></div>
146
+ </div>
515
147
  </div>
148
+ <div class="chat-input"><span>Ask Pi to continue...</span><button aria-label="Send message">↑</button></div>
516
149
  </div>
517
150
  </div>
518
151
  </div>
519
- </div>
520
- </section>
521
-
522
- <section aria-labelledby="features-title">
523
- <div class="section-head">
524
- <h2 id="features-title">Everything needed for remote agent work.</h2>
525
- <p>Small surface area, focused controls, and the tools an agent needs to operate on real projects.</p>
526
- </div>
152
+ </section>
153
+
154
+ <section class="capabilities" id="sessions" aria-labelledby="capabilities-title">
155
+ <div class="section-intro">
156
+ <p class="section-label">Workspace</p>
157
+ <div>
158
+ <h2 id="capabilities-title">Multiple agents and projects, on one page.</h2>
159
+ <p>Keep sessions from different agents and working directories open at the same time. Check progress and send follow-up instructions without switching terminals or browser tabs.</p>
160
+ </div>
161
+ </div>
527
162
 
528
- <div class="features">
529
- <article class="feature-card">
530
- <div class="feature-icon"><svg viewBox="0 0 24 24"><path d="M4 6h16M4 12h16M4 18h10"></path></svg></div>
531
- <h3>Multi-directory sessions</h3>
532
- <p>Manage separate conversations and agent state across multiple local workspaces.</p>
533
- </article>
534
- <article class="feature-card">
535
- <div class="feature-icon"><svg viewBox="0 0 24 24"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><path d="M14 2v6h6"></path></svg></div>
536
- <h3>File preview and editing</h3>
537
- <p>Browse project files, preview content, and apply edits directly from the web UI.</p>
163
+ <div class="capability-grid">
164
+ <article class="capability-card sessions-card">
165
+ <div class="card-icon">▦</div>
166
+ <div>
167
+ <h3>Parallel sessions</h3>
168
+ <p>Run several agent sessions, organize them by working directory, and search previous conversations.</p>
169
+ </div>
170
+ <div class="session-stack" aria-hidden="true">
171
+ <span><i class="provider-icon"><img src="/landing/icons/agent-pi.svg" alt=""></i><b>Pi</b><small>Q:\src\frontend</small><em>Working</em></span>
172
+ <span><i class="provider-icon"><img src="/landing/icons/agent-claude.svg" alt=""></i><b>Claude Code</b><small>D:\work\api</small><em>Working</em></span>
173
+ <span><i class="provider-icon"><img src="/landing/icons/agent-codex.svg" alt=""></i><b>Codex</b><small>C:\repo\mobile</small><em>Done</em></span>
174
+ </div>
175
+ </article>
176
+
177
+ <article class="capability-card tools-card" id="tools">
178
+ <div class="card-icon">&gt;_</div>
179
+ <h3>Chat and developer tools</h3>
180
+ <p>Chat is the main workflow. Project tools stay available alongside the conversation when more context or control is needed.</p>
181
+ <ul class="tool-list">
182
+ <li>Files <small>Browse, preview, edit</small></li>
183
+ <li>Git <small>Status and diffs</small></li>
184
+ <li>Terminal <small>Run local commands</small></li>
185
+ <li>Port Proxy <small>Open local servers</small></li>
186
+ </ul>
187
+ </article>
188
+
189
+ <article class="capability-card steps-card">
190
+ <p class="section-label">How it works</p>
191
+ <ol>
192
+ <li><span>1</span><div><strong>Start locally</strong><small>Run msclaude in a working directory.</small></div></li>
193
+ <li><span>2</span><div><strong>Open the URL</strong><small>Use the generated session link on another device.</small></div></li>
194
+ <li><span>3</span><div><strong>Continue working</strong><small>Use chat, files, Git, and terminal remotely.</small></div></li>
195
+ </ol>
196
+ </article>
197
+ </div>
198
+ </section>
199
+
200
+ <section class="trust-section" aria-label="Security and self-hosting">
201
+ <article class="trust-card" id="security">
202
+ <div>
203
+ <p class="section-label">End-to-end encryption</p>
204
+ <h2>The relay cannot read your work.</h2>
205
+ <p>Messages are encrypted between the browser and local agent. The relay cannot read prompts, responses, tool output, or file contents. Code and execution remain on your development machine.</p>
206
+ </div>
538
207
  </article>
539
- <article class="feature-card">
540
- <div class="feature-icon"><svg viewBox="0 0 24 24"><path d="m4 17 6-6-6-6"></path><path d="M12 19h8"></path></svg></div>
541
- <h3>Remote terminal</h3>
542
- <p>Run project commands, inspect output, and unblock agents without SSH or screen sharing.</p>
208
+ <article class="trust-card">
209
+ <div>
210
+ <p class="section-label">Access from any device</p>
211
+ <h2>Continue agent sessions from your browser.</h2>
212
+ <p>Open the same session URL on a computer, tablet, or phone to check progress, send follow-up instructions, and use the related development tools.</p>
213
+ </div>
543
214
  </article>
544
- <article class="feature-card">
545
- <div class="feature-icon"><svg viewBox="0 0 24 24"><rect x="3" y="11" width="18" height="10" rx="2"></rect><path d="M7 11V7a5 5 0 0 1 10 0v4"></path></svg></div>
546
- <h3>End-to-end encrypted</h3>
547
- <p>Messages are encrypted between your browser and local agent; the relay only passes ciphertext.</p>
215
+ <article class="trust-card" id="self-hosting">
216
+ <div>
217
+ <p class="section-label">Self-hosting</p>
218
+ <h2>Run your own relay server.</h2>
219
+ <p>The hosted relay is the simplest setup, but it is not required. The lightweight msclaude relay can be deployed on your own infrastructure with the same browser experience and encryption model.</p>
220
+ </div>
548
221
  </article>
549
- </div>
550
- </section>
551
-
552
- <section class="security" aria-label="Security">
553
- <div>
554
- <h2>Private by design.</h2>
555
- <p>Your code stays on your machine. msclaude creates a secure relay path to the browser, while the local agent keeps control of project files, commands, and credentials.</p>
556
- </div>
557
- <div class="encrypt-flow">
558
- <div><span>browser</span><span>sealed message</span></div>
559
- <div><span>relay</span><span>ciphertext only</span></div>
560
- <div><span>local agent</span><span>decrypted locally</span></div>
561
- </div>
562
- </section>
563
- </main>
564
-
565
- <footer>
566
- <span><strong>msclaude</strong></span>
567
- <span>
568
- <a href="https://github.com/kailunshi_microsoft/AgenticWorker" rel="noopener">GitHub</a>
569
- ·
570
- <a href="https://www.linkedin.com/in/shikailun/" rel="noopener">LinkedIn</a>
571
- </span>
572
- </footer>
573
-
574
- <div class="toast" id="copyToast">Copied to clipboard</div>
575
-
576
- <script>
577
- function copyCmd(text) {
578
- navigator.clipboard.writeText(text);
579
- showToast();
580
- }
222
+ </section>
223
+ </main>
581
224
 
582
- function copyInstall() {
583
- copyCmd('npm install -g @agent-link/agent && agentlink-client start -D --entra');
584
- }
225
+ <footer class="site-footer">
226
+ <a class="brand footer-brand" href="/"><img class="brand-mark" src="/landing/icons/msclaude-animated.svg" alt=""><span>msclaude</span></a>
227
+ <p>Remote access for coding agents running on your development machine.</p>
228
+ <div><a href="https://github.com/kailunshi_microsoft/AgenticWorker" target="_blank" rel="noopener">GitHub</a><a href="/zh" lang="zh-CN" hreflang="zh-CN">中文</a></div>
229
+ </footer>
585
230
 
586
- function showToast() {
587
- const toast = document.getElementById('copyToast');
588
- toast.classList.add('show');
589
- setTimeout(() => toast.classList.remove('show'), 1800);
590
- }
591
- </script>
231
+ <div class="toast" role="status" aria-live="polite">Install command copied</div>
592
232
  </body>
593
233
  </html>