-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathquick-notes.html
More file actions
178 lines (172 loc) · 10.5 KB
/
Copy pathquick-notes.html
File metadata and controls
178 lines (172 loc) · 10.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="robots" content="index, follow">
<meta name="description" content="Quick notes on PickleShell's growth from a small personal bridge to a distributed AI workstation.">
<title>Quick Notes — PickleShell</title>
<link rel="icon" href="favicon.ico" sizes="48x48">
<link rel="icon" href="favicon-32x32.png" type="image/png" sizes="32x32">
<link rel="apple-touch-icon" href="apple-touch-icon.png">
<style>
:root {
--pickle: #7cb342;
--pickle-light: #aed581;
--pickle-dark: #558b2f;
--teal: #00796b;
--teal-deep: #004d40;
--cream: #fefcf3;
--cream-dark: #f5f0e0;
--ink: #1a1a2e;
--ink-muted: #6b6b80;
--white: #ffffff;
--max: 760px;
}
@media (prefers-color-scheme: dark) {
:root {
--cream: #111122;
--cream-dark: #1a1a30;
--ink: #e8e8f0;
--ink-muted: #8888a0;
--white: #1e1e34;
}
}
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
body {
color: var(--ink);
background: var(--cream);
font: 17px/1.65 system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
-webkit-font-smoothing: antialiased;
overflow-x: hidden;
}
a { color: var(--teal); text-decoration-skip-ink: auto; }
a:focus-visible { outline: 3px solid var(--pickle); outline-offset: 3px; border-radius: 4px; }
.wrap { width: min(var(--max), calc(100% - 32px)); margin: 0 auto; }
header {
position: sticky; top: 0; z-index: 100;
background: color-mix(in srgb, var(--cream) 85%, transparent);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);
border-bottom: 1px solid color-mix(in srgb, var(--pickle-light) 25%, transparent);
}
nav { display: flex; align-items: center; justify-content: space-between; padding: 14px 0; gap: 16px; }
.brand { display: inline-flex; align-items: center; gap: 10px; color: var(--ink); font-weight: 800; font-size: 1.15rem; letter-spacing: -.02em; text-decoration: none; }
.brand img { width: 36px; height: 36px; border-radius: 8px; }
.nav-links { display: flex; gap: 8px; list-style: none; }
.nav-links a { padding: 6px 14px; border-radius: 999px; color: var(--teal); font-size: .92rem; font-weight: 600; text-decoration: none; transition: background .2s, color .2s; }
.nav-links a:hover, .nav-links a[aria-current="page"] { background: var(--pickle-light); color: var(--teal-deep); }
.nav-links .gh-link { background: var(--ink); color: var(--cream); }
.nav-links .gh-link:hover { background: var(--teal-deep); color: var(--cream); }
main { padding: 72px 0 88px; }
.intro { border-bottom: 1px solid color-mix(in srgb, var(--pickle-light) 35%, transparent); padding-bottom: 40px; }
.eyebrow { color: var(--pickle-dark); font-size: .78rem; font-weight: 750; letter-spacing: .08em; text-transform: uppercase; }
h1 { font-size: clamp(2.4rem, 6vw, 4rem); line-height: 1.08; letter-spacing: -.035em; margin: 12px 0 20px; }
.lead { max-width: 650px; color: var(--ink-muted); font-size: 1.15rem; line-height: 1.6; }
.entries { padding-top: 8px; }
article { border-bottom: 1px solid color-mix(in srgb, var(--pickle-light) 35%, transparent); padding: 28px 0; }
article:last-child { border-bottom: 0; }
time { display: block; color: var(--pickle-dark); font-size: .9rem; font-weight: 750; letter-spacing: .02em; margin-bottom: 8px; }
article p { color: var(--ink-muted); font-style: italic; }
footer { border-top: 1px solid color-mix(in srgb, var(--pickle-light) 20%, transparent); color: var(--ink-muted); font-size: .88rem; padding: 32px 0 48px; text-align: center; }
footer a { color: var(--pickle-dark); font-weight: 600; }
@media (max-width: 540px) {
nav { align-items: flex-start; }
.nav-links { flex-wrap: wrap; justify-content: flex-end; gap: 4px; }
.nav-links a { font-size: .84rem; padding: 5px 10px; }
main { padding: 52px 0 64px; }
}
</style>
</head>
<body>
<header>
<div class="wrap">
<nav aria-label="Primary navigation">
<a class="brand" href="index.html#top">
<img src="pickleshell-logo.png" alt="" width="36" height="36">
<span>PickleShell</span>
</a>
<ul class="nav-links">
<li><a href="index.html">Home</a></li>
<li><a href="quick-notes.html" aria-current="page">Quick Notes</a></li>
<li><a href="https://github.com/pickleshell/pickleshell" class="gh-link">GitHub</a></li>
</ul>
</nav>
</div>
</header>
<main>
<div class="wrap">
<section class="intro" aria-labelledby="page-title">
<p class="eyebrow">A work in progress</p>
<h1 id="page-title">Quick Notes</h1>
<p class="lead"><em>Development Log</em></p>
</section>
<section class="entries" aria-label="Quick notes on project development">
<article id="the-first-idea">
<time datetime="2026-07-23">23 July 2026</time>
<p>PickleShell started with a simple idea: give ChatGPT a safe way to work with a real local machine instead of stopping at advice. The first version was still a small personal experiment, but the direction was clear.</p>
</article>
<article id="the-repository">
<time datetime="2026-07-26">26 July 2026</time>
<p>The idea became a repository. PickleShell's secure monorepo appeared with the Gateway, MCP server, deployment documentation, security boundaries, and the first working bridge between ChatGPT and a local agent.</p>
</article>
<article id="the-first-release">
<time datetime="2026-07-27">27 July 2026</time>
<p>The first public release, v0.1.0, made long-running work practical. A request could return immediately, report progress through polling, be cancelled safely, and later provide its complete result instead of making ChatGPT wait on one fragile connection.</p>
</article>
<article id="reliability-as-product">
<time datetime="2026-07-27">27 July 2026</time>
<p>Reliability became part of the product rather than an afterthought. Explicit idempotency, structured metadata, session locking, safe file transfer, 209 concurrency tests, and 40 file-transfer tests gave the first release a much stronger foundation.</p>
</article>
<article id="the-public-home">
<time datetime="2026-07-27">27 July 2026</time>
<p>PickleShell got its public home on the web. The site began as a small explanation of the idea: ChatGPT can reason about a task, while PickleShell helps carry that task into a controlled local workspace.</p>
</article>
<article id="beyond-one-machine">
<time datetime="2026-07-28">28 July 2026</time>
<p>The project grew beyond a single-machine story. The multi-machine use case made the larger ambition visible: one ChatGPT session coordinating different capabilities and destinations while each workstation remains locally controlled.</p>
</article>
<article id="multiple-workstations">
<time datetime="2026-07-29">29 July 2026</time>
<p>A new workstation connection changed the shape of the project. PickleShell was no longer just a local bridge on one computer; it was becoming a way to name, reach, and coordinate multiple workstations.</p>
</article>
<article id="the-browser">
<time datetime="2026-07-30">30 July 2026</time>
<p>The Browser arrived with v0.1.1. Playwright gave PickleShell a new sense: the assistant could not only inspect code and run agent tasks, but also interact with the web and verify browser-facing behavior.</p>
</article>
<article id="from-the-car">
<time datetime="2026-08-01">1 August 2026</time>
<p>The idea proved itself far away from a desk. Sitting in a car with only a mobile phone, the operator used ChatGPT and PickleShell to guide agents through two difficult server fixes. The human stayed in control without becoming a manual relay, exactly the problem PickleShell was created to solve.</p>
</article>
<article id="codex-adapter">
<time datetime="2026-08-02">2 August 2026</time>
<p>PickleShell learned to speak to Codex natively. The new adapter kept the same MCP contract while making the underlying agent replaceable, so the bridge could evolve without forcing the public interface to change.</p>
</article>
<article id="the-terminal">
<time datetime="2026-08-03">3 August 2026</time>
<p>The Terminal became a real interactive capability rather than a one-shot command runner. Persistent PTYs, reconnect behavior, lifecycle handling, signals, resizing, and isolation brought PickleShell closer to a complete workstation.</p>
</article>
<article id="the-system-gate">
<time datetime="2026-08-04">4 August 2026</time>
<p>A clean installation on a fresh workstation passed the full system gate: Gateway, Terminal, tunnel, PTY reconnect, cgroup behavior, and Chromium E2E. The architecture had now been tested as one reproducible system rather than as a collection of successful components.</p>
</article>
<article id="security-maintenance">
<time datetime="2026-08-04">4 August 2026</time>
<p>The project paused to clean its foundations. Vulnerable MCP dependencies were updated, all dependency audits returned zero reported vulnerabilities, and security maintenance became part of the normal development rhythm.</p>
</article>
<article id="release-v0-1-2">
<time datetime="2026-08-05">5 August 2026</time>
<p>PickleShell v0.1.2 was the project's longest and most demanding release so far. It brought the native Codex runtime, the persistent interactive Terminal, immutable deployment and rollback, and a much stronger release gate: native PTY CI on Node 20, 22, and 24, systemd cgroup integration, a clean installation on a separate machine, and final production smoke tests for the Agent, Browser, and Terminal.</p>
</article>
</section>
</div>
</main>
<footer>
<div class="wrap">
PickleShell · <a href="index.html">Home</a> · <a href="https://github.com/pickleshell/pickleshell">GitHub</a>
<br>
<small>A secure bridge from ChatGPT to a local OpenCode agent.</small>
</div>
</footer>
</body>
</html>