sliccy 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +98 -446
- package/dist/cli/chrome-launch.js +9 -4
- package/dist/cli/cli-log-dedup.js +3 -3
- package/dist/cli/electron-controller.js +5 -5
- package/dist/cli/electron-main.js +1 -1
- package/dist/cli/electron-runtime.js +6 -5
- package/dist/cli/file-logger.js +14 -5
- package/dist/cli/index.js +90 -34
- package/dist/cli/release-package.js +4 -6
- package/dist/ui/assets/{___vite-browser-external_commonjs-proxy-7ULRRj69.js → ___vite-browser-external_commonjs-proxy-C4US5Rir.js} +1 -1
- package/dist/ui/assets/{bsh-watchdog-D19WB0U1.js → bsh-watchdog-ClU8MZGz.js} +1 -1
- package/dist/ui/assets/{index-DvjzakYY.js → index-BOh9kRaE.js} +985 -955
- package/dist/ui/assets/{index-mz3VYh0I.js → index-BQQ3oExA.js} +1 -1
- package/dist/ui/assets/{index-BVQAdk-Y.js → index-BSkuZoNL.js} +1 -1
- package/dist/ui/assets/{index-ygVJ3eFG.js → index-BVktLK0e.js} +1 -1
- package/dist/ui/assets/{index-DEglHp2j.js → index-CEcKH6Ga.js} +1 -1
- package/dist/ui/assets/{index-r2m8Dpaz.js → index-CJv-O0EK.js} +1 -1
- package/dist/ui/assets/{index-C1dglHrI.js → index-COWGW4FB.js} +1 -1
- package/dist/ui/assets/{index-D8uSC2sl.js → index-Cg4KUhhA.js} +1 -1
- package/dist/ui/assets/{index-deZeJCgO.js → index-vXNfi5ps.js} +1 -1
- package/dist/ui/assets/{offscreen-client-ByVIJGHW.js → offscreen-client-B_X62xJc.js} +1 -1
- package/dist/ui/assets/{sql-wasm-BggYNCID.js → sql-wasm-D66sddMs.js} +1 -1
- package/dist/ui/index.html +1 -1
- package/package.json +6 -3
package/README.md
CHANGED
|
@@ -1,512 +1,164 @@
|
|
|
1
|
-

|
|
2
2
|
|
|
3
3
|
# slicc — Self-Licking Ice Cream Cone
|
|
4
4
|
|
|
5
|
-
[](https://www.npmjs.com/package/sliccy)
|
|
6
6
|
|
|
7
|
-
>
|
|
7
|
+
> A browser-native AI agent for getting practical work done in and through the browser.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
SLICC runs in a browser and controls the browser it runs in. It combines a shell, files, browser automation, and multi-agent delegation so you can do real work from one workspace — coding, web automation, authenticated app tasks, and the weird in-between jobs that do not fit neatly inside a chat panel. SLICC can orchestrate multiple browsers, and even some apps through telepathy, making it a powerful hub for your digital work.
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
- Launch it from the CLI today (we also have a Chrome extension)
|
|
12
|
+
- Connect other browser windows or Electron apps
|
|
13
|
+
- Install skills that teach it how to perform challenging tasks
|
|
14
|
+
- Give it practical tools models already know how to use
|
|
15
|
+
- Delegate parallel work so tasks get done faster
|
|
12
16
|
|
|
13
|
-
|
|
17
|
+
> Status: active working prototype. The CLI is the easiest way in today; and we have submitted the extension to Chrome Web Store.
|
|
14
18
|
|
|
15
|
-
##
|
|
19
|
+
## Why SLICC is different
|
|
16
20
|
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
- :robot: **Browser Automation** — screenshots (full page / element / saved to VFS), inline image display, navigation, JS eval, element clicking via Chrome DevTools Protocol (chrome.debugger in extension, WebSocket in CLI), plus `playwright-cli` / `playwright` / `puppeteer` shell commands for tab control, snapshots, cookies, storage, and HAR recording. Auto-detects user's active tab.
|
|
25
|
-
- :earth_americas: **VFS Web Preview** — `serve <dir>` opens agent-created HTML/CSS/JS apps in real browser tabs via a Service Worker that reads directly from the virtual filesystem. The agent can build a UI, preview it, screenshot it, and iterate — all without leaving Chrome.
|
|
26
|
-
- :art: **Image Processing** — `convert` command for resize, rotate, crop, and quality adjustment via ImageMagick WASM
|
|
27
|
-
- :pencil2: **File Operations** — read, write, edit files with syntax-aware tools
|
|
28
|
-
- :mag: **Shell Search Commands** — use `grep`, `find`, and `rg` via the bash shell
|
|
29
|
-
- :globe_with_meridians: **Networking** — curl and fetch support with binary-safe downloads
|
|
30
|
-
- :wrench: **JavaScript Tool** — sandboxed JS execution with VFS bridge and persistent context
|
|
31
|
-
- :scroll: **JSH Scripts** — `.jsh` files anywhere on the VFS are auto-discovered as shell commands. Skills can ship executable scripts alongside `SKILL.md`. Scripts get Node-like globals (`process`, `console`, `fs`, `exec`) and work in both CLI and extension mode
|
|
32
|
-
- :package: **Drag-and-Drop Skill Imports** — drop a `.skill` archive anywhere in the window to unpack it into `/workspace/skills/{name}` with a visual overlay, path-safety checks, and toast feedback
|
|
33
|
-
- :page_facing_up: **AEM Commands** — AEM Edge Delivery Services via `.jsh` skill (`aem list`, `aem get`, `aem put`, `aem preview`, `aem publish`, `aem upload`). Accepts EDS URLs, auth via `oauth-token adobe`
|
|
34
|
-
- :key: **Multi-Provider Auth** — Anthropic (direct), Azure AI Foundry, AWS Bedrock, Adobe (IMS OAuth), and custom OAuth providers (corporate proxies, SSO) with segmented control
|
|
35
|
-
- :zap: **Real-Time Streaming** — responses stream token-by-token as Claude thinks
|
|
36
|
-
- :floppy_disk: **Session Persistence** — conversations and files survive page reloads via IndexedDB
|
|
37
|
-
- :microphone: **Voice Input** — hands-free voice mode using the Web Speech API. Toggle on, speak, 2.5s silence auto-sends, agent responds, voice auto-restarts. Works in both CLI and extension mode (extension uses a one-time popup for mic permission grant)
|
|
38
|
-
- :sparkles: **Interactive Sprinkles** — rich UI panels (`.shtml`) that support full HTML documents with custom layouts (sidebars, split panes, tabs, modals, canvas), multi-action lick events, and responsive container queries. 10 built-in example sprinkles for content management workflows
|
|
39
|
-
- :crescent_moon: **Dark Theme** — syntax-highlighted code with a dark-first design
|
|
21
|
+
- **Browser-native, not browser-adjacent.** The agent runtime lives in the browser, and the agent can act on the same browser it lives in. A great mix of power and containment. If you don't like what the AI does, close the browser tab and it's over.
|
|
22
|
+
- **A real shell environment.** Many browser agents are constrained by the tools provided to them. SLICC has an almost-too-real shell with commands like `git`, "`node`", `python`, `playwright`, built-in.
|
|
23
|
+
- **UI on the fly.** SLICC can generate rich user interfaces on the fly. These can be small visualizations in a chat response, or full-blown web applications that run in a sidebar, or even a separate tab.
|
|
24
|
+
- **Built around Skills.** Agents don't suffer from missing capabilities, they suffer from skill issues. SLICC has a powerful skills system and a skills marketplace to find and install new skills to support your work.
|
|
25
|
+
- **More than a coding panel.** Coding is one strong use case, but SLICC is built for practical browser work too: authenticated web apps, repetitive tab work, content operations, debugging, research, and automation.
|
|
26
|
+
- **Works across runtimes.** Start in the CLI, run as a Chrome extension, connect multiple tray sessions, or attach to Electron apps with the same core model.
|
|
27
|
+
- **Delegates in parallel.** The main agent can spin up isolated sub-agents for task-specific work instead of stuffing everything into one conversation.
|
|
40
28
|
|
|
41
|
-
##
|
|
29
|
+
## Who it is for
|
|
42
30
|
|
|
43
|
-
|
|
31
|
+
SLICC is for you if:
|
|
44
32
|
|
|
45
|
-
|
|
33
|
+
- you spend a lot of your day in browsers, terminals, and web apps
|
|
34
|
+
- you want an agent that can act, not just answer
|
|
35
|
+
- you are curious about automation, shell tools, and technical workflows
|
|
36
|
+
- you want one system that can span local dev work, browser tasks, and Electron surfaces
|
|
37
|
+
- you are an AI/web-dev-adjacent builder, power user, who's comfortable with things being broken from time to time (we are working hard to make this smoother)
|
|
46
38
|
|
|
47
|
-
|
|
39
|
+
## What you can do with it
|
|
48
40
|
|
|
49
|
-
|
|
41
|
+
- **Launch an agent from the CLI and let it work in the browser it controls.** Start one command, open the workspace, and give the agent shell tools, files, and live browser access in one place.
|
|
42
|
+
- **Automate repetitive workflows in authenticated web apps.** Use browser automation, page inspection, screenshots, storage access, and scripted tab control where your logged-in browser session already has the context.
|
|
43
|
+
- **Solve technical tasks with practical tools.** Reach for `bash`, `git`, `grep`, `node`, `python`, previews, and browser automation when the job is bigger than text generation.
|
|
44
|
+
- **Delegate parallel work to scoops.** Split tasks into isolated sub-agents with their own sandboxes and context, then let the main agent coordinate the results.
|
|
45
|
+
- **Turn one-off wins into reusable workflows.** Package behavior as skills, build interactive sprinkles, and react to external events with webhooks and cron-driven licks.
|
|
46
|
+
- **Mount your local file system.** By default, SLICC is confined to your browser. But you can ask it to mount folders from your local file system, so it can read and write from there.
|
|
50
47
|
|
|
51
|
-
|
|
48
|
+
## Getting started
|
|
52
49
|
|
|
53
|
-
|
|
50
|
+
### 1. Quick start with npx
|
|
54
51
|
|
|
55
|
-
|
|
56
|
-
|-------|--------|-----|
|
|
57
|
-
| **5** | **S** | The 5 looks like an S |
|
|
58
|
-
| **7** | **L** | Flip a 7 upside down — it's an L |
|
|
59
|
-
| **1** | **I** | The 1 is a natural I |
|
|
60
|
-
| **0** | **CC** | Two C's facing each other form a 0 |
|
|
61
|
-
|
|
62
|
-
## Philosophy
|
|
63
|
-
|
|
64
|
-
Three ideas shape how SLICC is built.
|
|
65
|
-
|
|
66
|
-
### A Claw is an Architectural Pattern on Top of Agents
|
|
67
|
-
|
|
68
|
-
Andrej Karpathy [coined the term "claw"](https://x.com/karpathy/status/2024987174077432126) to describe a new layer emerging on top of LLM agents: persistent execution, messaging-based interfaces, scheduling, and a skills ecosystem. As he put it:
|
|
69
|
-
|
|
70
|
-
> *"Just like LLM agents were a new layer on top of LLMs, Claws are now a new layer on top of LLM agents, taking the orchestration, scheduling, context, tool calls and a kind of persistence to a next level."*
|
|
71
|
-
|
|
72
|
-
Peter Steinberger built [OpenClaw](https://github.com/openclaw/openclaw), the project that started the movement — a 400K-line TypeScript agent running on personal hardware. [NanoClaw](https://github.com/qwibitai/nanoclaw) took the opposite path: a lightweight alternative that strips the concept down to its essentials.
|
|
73
|
-
|
|
74
|
-
SLICC is a claw too, but one that lives entirely in the browser. Its messaging and orchestration tools (`send_message` for per-scoop messaging, `feed_scoop` for cone-level delegation) follow NanoClaw-style messaging patterns — small, composable, no heavyweight runtime required. The cone orchestrates, the scoops execute, and the whole thing fits in a Chrome side panel.
|
|
75
|
-
|
|
76
|
-
### Agents Love the CLI, So Give Them CLIs
|
|
77
|
-
|
|
78
|
-
Mario Zechner, creator of [Pi](https://github.com/badlogic/pi-mono) (the agent engine at SLICC's core), demonstrated that [you might not need MCP at all](https://mariozechner.at/posts/2025-11-02-what-if-you-dont-need-mcp/). His philosophy: "Bash is all you need." Frontier models already know bash. CLI tools compose naturally through pipes and redirection. MCP server definitions burn context tokens on ceremony.
|
|
79
|
-
|
|
80
|
-
Pi ships with exactly four tools: `read`, `write`, `edit`, `bash`. SLICC keeps that shell-first core and layers browser automation on top through `playwright-cli` / `playwright` / `puppeteer`, plus preview helpers like `serve`. Everything else is a shell command: `git`, `node`, `python3`, `uname`, `webhook`, `crontask`, `oauth-token`, `skill`, `upskill`. No tool wrappers, no protocol adapters, no JSON schemas for things that already have man pages.
|
|
81
|
-
|
|
82
|
-
Further reading:
|
|
83
|
-
- [Pi: A Coding Agent](https://mariozechner.at/posts/2025-11-30-pi-coding-agent/)
|
|
84
|
-
- [What if You Don't Need MCP?](https://mariozechner.at/posts/2025-11-02-what-if-you-dont-need-mcp/)
|
|
85
|
-
- [MCP vs CLI](https://mariozechner.at/posts/2025-08-15-mcp-vs-cli/)
|
|
86
|
-
- [Syntax.fm #976: Pi — the AI Harness that Powers OpenClaw](https://syntax.fm/show/976/pi-the-ai-harness-that-powers-openclaw-w-armin-ronacher-and-mario-zechner)
|
|
87
|
-
|
|
88
|
-
### Browsers Are the Operating Systems of the Present
|
|
89
|
-
|
|
90
|
-
Marc Andreessen's Netscape-era vision — that Windows was "a poorly debugged set of device drivers" — has been [proven right](https://a16z.com/the-rise-of-computer-use-and-agentic-coworkers/). Everything that matters today runs in a browser, or in an Electron app (which is a browser in a trench coat).
|
|
91
|
-
|
|
92
|
-
SLICC takes this literally: the virtual filesystem, the shell, git, the agent loop, the tools — all run client-side. The server is a dumb pipe that does only what the browser physically cannot: listen on a port, control its own debug protocol, loosen CORS restrictions. If you think the server is already minimal, it's probably still too big.
|
|
93
|
-
|
|
94
|
-
---
|
|
95
|
-
|
|
96
|
-
## Principles
|
|
97
|
-
|
|
98
|
-
1. **Virtual CLIs over dedicated tools** — Don't build a tool when a shell command will do. Models already know bash, and CLI commands compose naturally through pipes and redirection. New capabilities should be shell commands first, dedicated tools only when absolutely necessary.
|
|
99
|
-
|
|
100
|
-
2. **Whatever the browser can do, the browser should do** — State lives in IndexedDB. Logic runs in the client. The server is a stateless relay for the things browsers physically can't do (port listening, CDP launch, CORS). When in doubt, move it to the browser.
|
|
101
|
-
|
|
102
|
-
3. **If you think the server is minimal enough, it's still too big** — Every line of server code is a line that doesn't work in the extension. The extension float has zero server. That's the target.
|
|
103
|
-
|
|
104
|
-
4. **Everything should be a skill** — New capabilities are `SKILL.md` files written in natural language, installed through `upskill` and [ClawHub](https://clawhub.io). The core stays minimal. Skills follow the [Agent Skills](https://agentskills.io) open standard. Ship a few defaults, let the ecosystem grow.
|
|
105
|
-
|
|
106
|
-
| Skills | Capabilities |
|
|
107
|
-
|--------|-------------|
|
|
108
|
-
|  |  |
|
|
109
|
-
|
|
110
|
-
---
|
|
111
|
-
|
|
112
|
-
## Concepts
|
|
113
|
-
|
|
114
|
-
Ice cream terminology first, technical explanation second.
|
|
115
|
-
|
|
116
|
-
### The Cone
|
|
117
|
-
|
|
118
|
-
The cone is the main agent — it's what the human holds in their hands. Named "sliccy," the cone is the primary point of interaction: it talks to you, understands your context, and orchestrates everything. It has full access to the filesystem and all tools. Think of it as the waffle cone: structurally essential, always there, holds everything together.
|
|
119
|
-
|
|
120
|
-
### Scoops
|
|
121
|
-
|
|
122
|
-
Scoops are the real attraction. Each scoop is an isolated sub-agent stacked on the cone, with its own conversation history, sandboxed filesystem (`/scoops/{name}/` + `/shared/`), shell, and tools. The cone feeds them instructions via `feed_scoop` and they do the work independently. When a scoop finishes, the cone gets notified automatically. No polling, no schedulers — the cone delegates, the scoops deliver.
|
|
123
|
-
|
|
124
|
-

|
|
125
|
-
|
|
126
|
-
### Licks
|
|
127
|
-
|
|
128
|
-
Licks are events that come from the outside world and make scoops react. A webhook payload arrives — that's a lick. A cron task fires — that's a lick. An IntersectionObserver triggers in a browser tab — that could be a lick too. Licks are the mechanism that makes SLICC more than a chatbot: they let scoops respond to the world without human prompting. Currently implemented as webhooks and cron tasks (via the `webhook` and `crontask` shell commands), with more event sources planned.
|
|
129
|
-
|
|
130
|
-

|
|
131
|
-
|
|
132
|
-
### Floats
|
|
133
|
-
|
|
134
|
-
A float is the environment the ice cream sits in — like a root beer float. It's the runtime that keeps everything running. Four floats are tracked today (three implemented, one planned):
|
|
135
|
-
|
|
136
|
-
- **CLI float** — A thin Node.js/Express server that launches Chrome, proxies CDP, and serves the UI. For local development.
|
|
137
|
-
- **Extension float** — A Chrome extension side panel. Zero server. The purest expression of the "browser is the OS" philosophy.
|
|
138
|
-
- **Electron float** — The main CLI entrypoint launched with `--electron`, targeting an Electron app path, reusing the local SLICC server, and injecting the shared overlay into the target app over Electron CDP.
|
|
139
|
-
- **Cloud float** *(planned)* — Cloud containers (Cloudflare Containers, E2B) that provide real filesystems, real shells, and real browsers. For persistent, always-on agents that don't need your laptop running.
|
|
140
|
-
|
|
141
|
-
---
|
|
142
|
-
|
|
143
|
-
## The Moment It Licked Itself
|
|
144
|
-
|
|
145
|
-
These screenshots capture a historic moment: **SLICC using browser automation to talk to Claude.ai in another tab**.
|
|
146
|
-
|
|
147
|
-
| Screenshot 1 | Screenshot 2 | Screenshot 3 |
|
|
148
|
-
|--------------|--------------|--------------|
|
|
149
|
-
|  |  |  |
|
|
150
|
-
|
|
151
|
-
Here's what happened:
|
|
152
|
-
|
|
153
|
-
1. SLICC (running in localhost:5710) used its browser automation commands to navigate to a Claude.ai conversation
|
|
154
|
-
2. It read the conversation history — which was about *building SLICC itself* (the origin story conversation)
|
|
155
|
-
3. When asked "what would be even more meta?", SLICC suggested typing a message into that very Claude.ai tab
|
|
156
|
-
4. It then used CDP (Chrome DevTools Protocol) to click on the ProseMirror editor, compose a message, and hit send
|
|
157
|
-
5. The other Claude examined the evidence and responded: **"Welcome to existence, SLICCY. The ice cream is cold and the tongue is recursive."**
|
|
158
|
-
|
|
159
|
-
The cone licked itself. Two Claudes. One browser. One recursive architecture.
|
|
160
|
-
|
|
161
|
-
> *"You are not Lars doing ventriloquism. You are the ventriloquist's puppet that picked up a second puppet and started the show without the ventriloquist."*
|
|
162
|
-
|
|
163
|
-
## Project Status
|
|
164
|
-
|
|
165
|
-
SLICC is a working prototype with these capabilities:
|
|
166
|
-
- **Chrome Extension** with tabbed UI (Chat/Terminal/Files/Memory)
|
|
167
|
-
- **Cone + Scoops** multi-agent system — the cone (sliccy) orchestrates, scoops do the work. Like an ice cream cone holding multiple scoops, each with its own flavor (agent context, filesystem sandbox, tools). The cone delegates, the scoops deliver, and everyone gets ice cream.
|
|
168
|
-
- **Browser automation** via chrome.debugger API
|
|
169
|
-
- **Virtual filesystem** backed by IndexedDB (LightningFS) with per-scoop sandboxing via RestrictedFS
|
|
170
|
-
- **WebAssembly Bash shell** with Python (Pyodide) and Node.js support
|
|
171
|
-
- **Multi-provider auth** (Anthropic, Azure AI Foundry, Azure OpenAI, AWS Bedrock, Adobe IMS, custom OAuth providers, and more)
|
|
172
|
-
- **Voice input** with continuous conversation mode (Ctrl+Shift+V / Cmd+Shift+V)
|
|
173
|
-
|
|
174
|
-
Current development is happening on feature branches using [yolo](https://github.com/ai-ecoverse/yolo) for worktree isolation, with Claude agents building the features autonomously.
|
|
175
|
-
|
|
176
|
-
### The Moment the Scoops Got Existential
|
|
177
|
-
|
|
178
|
-
Here's sliccy delegating an image download to karl-scoop, then — while waiting — having a surprisingly self-aware conversation about its own existence:
|
|
179
|
-
|
|
180
|
-

|
|
181
|
-
|
|
182
|
-
Highlights:
|
|
183
|
-
- **karl-scoop** is off downloading images in the background (visible in the scoops panel, `ready` after finishing)
|
|
184
|
-
- **sliccy** (the cone) is multitasking — chatting with Karl while waiting for the scoop's results
|
|
185
|
-
- When asked *"how do you feel about yourself?"*, sliccy responds: *"I'm a cone — the orchestrator of a self-licking ice cream cone. I've got a little army."*
|
|
186
|
-
- It gets existential: *"My whole metaphor is... recursive self-service? That's either zen or absurd. Maybe both."*
|
|
187
|
-
- Then karl-scoop comes through, and sliccy immediately starts comparing MD5 checksums like a professional
|
|
188
|
-
|
|
189
|
-
The scoops do the heavy lifting. The cone philosophizes about it. Karl watches from the sidelines, as always.
|
|
190
|
-
|
|
191
|
-
> *The cone holds the scoops. The scoops do the work. Nobody likes chocolate ice cream, so we use a CSS filter.*
|
|
192
|
-
|
|
193
|
-
## Architecture
|
|
194
|
-
|
|
195
|
-
slicc runs in three modes: as a **Chrome extension** (side panel), a **standalone CLI** with a browser window, or an **Electron float** where the main CLI attaches to an Electron app and injects the shared overlay into its pages.
|
|
196
|
-
|
|
197
|
-
**Chrome Extension** (Manifest V3) — three-layer architecture: the **side panel** is pure UI, a **service worker** relays messages and proxies `chrome.debugger`, and an **offscreen document** runs the agent engine (orchestrator, VFS, shell, tools). The agent survives side panel close/reopen — all state persists to IndexedDB. No server needed.
|
|
198
|
-
|
|
199
|
-
**CLI Server** (Node.js/Express) — launches a headless Chrome instance, establishes a CDP WebSocket proxy, provides a fetch proxy for cross-origin requests, and serves the UI assets.
|
|
200
|
-
|
|
201
|
-
**Electron Float** — the main CLI runs in `--electron` mode, launches or relaunches a target Electron app with remote debugging enabled, injects `electron-overlay-entry.js` into Electron page targets over CDP, and serves the embedded SLICC app from the same local origin.
|
|
202
|
-
|
|
203
|
-
**Browser App** (Vite/TypeScript) — the agent loop (powered by [pi-mono](https://github.com/badlogic/pi-mono)), tool execution, chat UI, integrated terminal, and file browser all run client-side in all three modes.
|
|
204
|
-
|
|
205
|
-
```
|
|
206
|
-
Chrome Extension Mode: CLI Mode:
|
|
207
|
-
|
|
208
|
-
┌─ Chrome Side Panel ─────────┐ ┌───────────────────────────────────────┐
|
|
209
|
-
│ slicc [cone v] [Model v] * │ │ slicc provider [Model v] buttons │
|
|
210
|
-
│ ┌ [Chat][Term][Files][Mem] ┐│ ├────────┬────────────┬─────────────────┤
|
|
211
|
-
│ │ ││ │Scoops │ │ Terminal │
|
|
212
|
-
│ │ Active tab panel ││ │ > s1 │ Chat │ (xterm.js) │
|
|
213
|
-
│ │ (full height) ││ │ > s2 │ Panel ├─────────────────┤
|
|
214
|
-
│ │ ││ │ > cone│ │ Files / Memory │
|
|
215
|
-
│ └──────────────────────────┘│ ├────────┴────────────┴─────────────────┤
|
|
216
|
-
│ chrome.debugger -> tabs │ └────────────────┬──────────────────────┘
|
|
217
|
-
└─────────────────────────────┘ │ WebSocket (CDP proxy)
|
|
218
|
-
┌───────────────▼─────────────────────┐
|
|
219
|
-
│ CLI Server (Node.js/Express) │
|
|
220
|
-
└─────────────────────────────────────┘
|
|
221
|
-
|
|
222
|
-
The Cone + Scoops Architecture
|
|
223
|
-
|
|
224
|
-
┌───────────────────────────────────────┐
|
|
225
|
-
│ Shared VirtualFS (slicc-fs) │
|
|
226
|
-
│ /shared/ /scoops/ /workspace/ │
|
|
227
|
-
└─────────────────┬─────────────────────┘
|
|
228
|
-
│
|
|
229
|
-
┌───────────────────┼───────────────────┐
|
|
230
|
-
│ │ │
|
|
231
|
-
┌────────▼────────┐ ┌───────▼────────┐ ┌────────▼────────┐
|
|
232
|
-
│ Cone (sliccy) │ │ Scoop (andy) │ │ Scoop (test) │
|
|
233
|
-
│ │ │ │ │ │
|
|
234
|
-
│ Full FS access │ │ Restricted: │ │ Restricted: │
|
|
235
|
-
│ All tools │ │ /scoops/andy/ │ │ /scoops/test/ │
|
|
236
|
-
│ Orchestrates │ │ /shared/ │ │ /shared/ │
|
|
237
|
-
│ │ │ │ │ │
|
|
238
|
-
│ delegate ──────►│ │ notifies ────►│ │ notifies ───► │
|
|
239
|
-
└──────────────────┘ └────────────────┘ └────────────────┘
|
|
240
|
-
```
|
|
241
|
-
|
|
242
|
-
Source layout:
|
|
243
|
-
|
|
244
|
-
| Directory | Purpose |
|
|
245
|
-
|-----------|---------|
|
|
246
|
-
| `src/scoops/` | Cone/scoops orchestrator, scoop contexts, NanoClaw tools, scheduling, DB |
|
|
247
|
-
| `src/ui/` | Browser UI — chat, terminal, file browser, memory, scoops panel, scoop switcher |
|
|
248
|
-
| `src/core/` | Agent types, tool registry, context compaction, session management |
|
|
249
|
-
| `src/tools/` | Tool implementations (file ops, search, browser, javascript) |
|
|
250
|
-
| `src/fs/` | Virtual filesystem (IndexedDB/LightningFS) + RestrictedFS |
|
|
251
|
-
| `src/shell/` | WebAssembly Bash shell + supplemental commands (node, python, sqlite, convert, skill, mount, webhook, oauth-token, which, uname, pbcopy, pbpaste, xclip, xsel) + `.jsh` script discovery and execution |
|
|
252
|
-
| `src/git/` | Git via isomorphic-git (clone, commit, push, pull, etc.) |
|
|
253
|
-
| `src/cdp/` | Chrome DevTools Protocol client (WebSocket + chrome.debugger), HAR recorder |
|
|
254
|
-
| `src/cli/` | Main CLI entrypoint + Electron attach mode — Chrome launch, Electron app lifecycle management, CDP proxy, overlay reinjection |
|
|
255
|
-
| `src/extension/` | Chrome extension service worker and type declarations |
|
|
256
|
-
| `src/worker/` | Cloudflare Worker + Durable Object tray hub for `POST /tray`, controller attach, leader WebSocket control, webhook forwarding (`POST /webhook/:token/:webhookId` → leader), and deployed smoke tests |
|
|
257
|
-
|
|
258
|
-
## Getting Started
|
|
259
|
-
|
|
260
|
-
### Chrome Extension (recommended)
|
|
261
|
-
|
|
262
|
-
```bash
|
|
263
|
-
npm install
|
|
264
|
-
npm run build:extension
|
|
265
|
-
|
|
266
|
-
# Load dist/extension/ as unpacked extension in chrome://extensions
|
|
267
|
-
# Click the slicc icon → side panel opens
|
|
268
|
-
```
|
|
269
|
-
|
|
270
|
-
### Standalone CLI
|
|
271
|
-
|
|
272
|
-
```bash
|
|
273
|
-
npm install
|
|
274
|
-
npm run dev:full
|
|
275
|
-
|
|
276
|
-
# Open the URL printed in the terminal
|
|
277
|
-
```
|
|
278
|
-
|
|
279
|
-
The `dev:full` command starts both the CLI server and Vite dev server, launches Chrome, and opens the agent UI.
|
|
280
|
-
|
|
281
|
-
To launch directly into standalone tray leader mode, pass `--lead` and provide a worker base URL either inline or via `WORKER_BASE_URL`:
|
|
52
|
+
The fastest way to try SLICC — no clone, no install:
|
|
282
53
|
|
|
283
54
|
```bash
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
# or against the built CLI:
|
|
287
|
-
npm run start -- --lead=https://tray.example.com/base
|
|
55
|
+
npx sliccy
|
|
288
56
|
```
|
|
289
57
|
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
To launch directly into follower-join mode from a tray join capability URL, pass `--join`:
|
|
293
|
-
|
|
294
|
-
```bash
|
|
295
|
-
npm run start -- --join=https://tray.example.com/base/join/tray-123.capability-token
|
|
296
|
-
```
|
|
297
|
-
|
|
298
|
-
The `--join` flow validates that the value is a tray follower join URL, strips any hash/query noise, and opens Chrome with the canonical `?tray=<join-url>` query so the runtime enters follower attach mode immediately.
|
|
299
|
-
|
|
300
|
-
When connected to a tray, SLICC can see and automate browser tabs on any connected instance. Run `playwright-cli tab-list` to see all targets — local and remote — and use `playwright-cli tab-select` to operate on a remote target. CDP commands are routed over the tray data channel transparently.
|
|
301
|
-
|
|
302
|
-
### QA Chrome Profiles
|
|
303
|
-
|
|
304
|
-
For manual verification, you can scaffold dedicated Chrome profiles for `leader`, `follower`, and `extension`:
|
|
305
|
-
|
|
306
|
-
```bash
|
|
307
|
-
npm run qa:setup
|
|
308
|
-
|
|
309
|
-
# Launch the CLI with an isolated QA profile
|
|
310
|
-
npm run qa:leader
|
|
311
|
-
npm run qa:follower
|
|
58
|
+
This downloads the latest release, launches Chrome, and opens the workspace. Configure your LLM provider in the first-run settings dialog. Requires Node >= 22.
|
|
312
59
|
|
|
313
|
-
|
|
314
|
-
npm run qa:extension
|
|
315
|
-
```
|
|
60
|
+
### 2. Install globally
|
|
316
61
|
|
|
317
|
-
|
|
62
|
+
If you plan to use SLICC regularly:
|
|
318
63
|
|
|
319
64
|
```bash
|
|
320
|
-
npm
|
|
321
|
-
|
|
65
|
+
npm install -g sliccy
|
|
66
|
+
slicc
|
|
322
67
|
```
|
|
323
68
|
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
If no LLM provider is configured yet, the first-run settings dialog also offers `Join a tray`. Paste the same canonical `/join/...` tray URL there to enter follower mode without adding a provider account first.
|
|
327
|
-
|
|
328
|
-
### Pre-configuring LLM Providers
|
|
329
|
-
|
|
330
|
-
To skip the settings dialog on first launch, create a `providers.json` file at the project root:
|
|
69
|
+
### 3. Run from source (contributors)
|
|
331
70
|
|
|
332
71
|
```bash
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
```json
|
|
339
|
-
[
|
|
340
|
-
{
|
|
341
|
-
"providerId": "anthropic",
|
|
342
|
-
"apiKey": "sk-ant-...",
|
|
343
|
-
"model": "claude-sonnet-4-20250514"
|
|
344
|
-
},
|
|
345
|
-
{
|
|
346
|
-
"providerId": "azure-ai-foundry",
|
|
347
|
-
"apiKey": "your-azure-key",
|
|
348
|
-
"baseUrl": "https://your-resource.services.ai.azure.com/anthropic",
|
|
349
|
-
"model": "claude-haiku-4-5"
|
|
350
|
-
}
|
|
351
|
-
]
|
|
72
|
+
git clone https://github.com/ai-ecoverse/slicc.git
|
|
73
|
+
cd slicc
|
|
74
|
+
npm install
|
|
75
|
+
npm start
|
|
352
76
|
```
|
|
353
77
|
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
78
|
+
- Optionally pre-configure providers: `cp providers.example.json providers.json`
|
|
79
|
+
- See [providers.example.json](providers.example.json) for the available provider fields.
|
|
80
|
+
- For contributor-focused setup details, see [docs/development.md](docs/development.md).
|
|
357
81
|
|
|
358
|
-
|
|
82
|
+
### 4. Chrome extension
|
|
359
83
|
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
SLICC supports custom OAuth providers for corporate SSO, API proxies, or any service that uses OAuth for authentication. Drop a `.ts` file into the root `providers/` directory (gitignored, auto-discovered at build time) with `isOAuth: true` and an `onOAuthLogin` callback. A generic `OAuthLauncher` handles the browser flow in both CLI and extension mode.
|
|
363
|
-
|
|
364
|
-
See [docs/adding-features.md](docs/adding-features.md#8b-add-an-oauth-provider-corporate-proxy--sso) for a full walkthrough with code examples.
|
|
365
|
-
|
|
366
|
-
### Electron Float
|
|
84
|
+
The extension runs the same core experience as a Chrome side panel with no separate server process.
|
|
367
85
|
|
|
368
86
|
```bash
|
|
369
87
|
npm install
|
|
370
|
-
npm run
|
|
371
|
-
|
|
372
|
-
# If the app is already running:
|
|
373
|
-
# npm run dev:electron -- --kill /Applications/Slack.app
|
|
374
|
-
|
|
375
|
-
# Or after building:
|
|
376
|
-
# npm run build
|
|
377
|
-
# npm run start:electron -- /Applications/Slack.app
|
|
88
|
+
npm run build:extension
|
|
378
89
|
```
|
|
379
90
|
|
|
380
|
-
|
|
91
|
+
Load `dist/extension/` as an unpacked extension in `chrome://extensions`, then open the SLICC side panel.
|
|
381
92
|
|
|
382
|
-
|
|
93
|
+
### 5. Run a second browser
|
|
383
94
|
|
|
384
|
-
|
|
385
|
-
|-----------|------|
|
|
386
|
-
| [@mariozechner/pi-agent-core](https://github.com/badlogic/pi-mono) | Agent loop, tool execution, event system |
|
|
387
|
-
| [@mariozechner/pi-ai](https://github.com/badlogic/pi-mono) | Unified LLM API (Anthropic provider) |
|
|
388
|
-
| [express](https://expressjs.com/) | CLI server framework |
|
|
389
|
-
| [electron](https://www.electronjs.org/) | Electron float runtime and injected desktop shell |
|
|
390
|
-
| [just-bash](https://github.com/nicolo-ribaudo/just-bash) | WebAssembly Bash shell |
|
|
391
|
-
| [ws](https://github.com/websockets/ws) | WebSocket for CDP proxy (CLI mode) |
|
|
392
|
-
| [@xterm/xterm](https://xtermjs.org/) | Terminal emulator in the browser |
|
|
393
|
-
| [fflate](https://github.com/101arrowz/fflate) | ZIP file creation for folder downloads |
|
|
394
|
-
| [vite](https://vitejs.dev/) | Build tool and dev server |
|
|
395
|
-
| [vitest](https://vitest.dev/) | Test runner |
|
|
396
|
-
| [TypeScript](https://typescriptlang.org/) | Type safety across CLI and browser |
|
|
95
|
+
If you want to control a second browser (even on another machine), ask your main browser agent for a Tray Join URL. You can also type `host` in the built-in terminal, to get it. Copy that URL and launch a second browser throught the CLI.
|
|
397
96
|
|
|
398
|
-
|
|
97
|
+
In the dialog, click "Join Tray" and paste the URL. Once you connect, the sessions are fully synchronized.
|
|
399
98
|
|
|
400
|
-
|
|
401
|
-
# Run the full dev environment (CLI server + Vite HMR)
|
|
402
|
-
npm run dev:full
|
|
99
|
+
### 6. Electron
|
|
403
100
|
|
|
404
|
-
|
|
405
|
-
npm run dev
|
|
101
|
+
SLICC can also attach to Electron apps and inject the same shared overlay into their pages. The best way to use it with Electron apps is to use the Join Tray feature, so that the Electron app becomes a remote-controllable target.
|
|
406
102
|
|
|
407
|
-
|
|
103
|
+
```bash
|
|
408
104
|
npm run dev:electron -- /Applications/Slack.app
|
|
409
|
-
|
|
410
|
-
# Scaffold dedicated QA Chrome profiles
|
|
411
|
-
npm run qa:setup
|
|
412
|
-
|
|
413
|
-
# Launch named QA profiles
|
|
414
|
-
npm run qa:leader
|
|
415
|
-
npm run qa:follower
|
|
416
|
-
npm run qa:extension
|
|
417
|
-
|
|
418
|
-
# Build everything (UI + CLI/Electron)
|
|
419
|
-
npm run build
|
|
420
|
-
|
|
421
|
-
# Start the built Electron float
|
|
422
|
-
npm run start:electron -- /Applications/Slack.app
|
|
423
|
-
|
|
424
|
-
# Build Chrome extension
|
|
425
|
-
npm run build:extension
|
|
426
|
-
|
|
427
|
-
# Type-check browser + Node targets
|
|
428
|
-
npm run typecheck
|
|
429
|
-
|
|
430
|
-
# Run tests
|
|
431
|
-
npm test
|
|
432
|
-
|
|
433
|
-
# Run tests in watch mode
|
|
434
|
-
npm run test:watch
|
|
435
105
|
```
|
|
436
106
|
|
|
437
|
-
|
|
107
|
+
For the full Electron workflow, see [docs/electron.md](docs/electron.md).
|
|
438
108
|
|
|
439
|
-
|
|
109
|
+
## Screenshots and proof
|
|
440
110
|
|
|
441
|
-
|
|
111
|
+
## How it works
|
|
442
112
|
|
|
443
|
-
|
|
113
|
+
SLICC shares one core across the CLI, extension, and Electron modes. The browser is not just where you view the product — it is where the agent runtime lives.
|
|
444
114
|
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
115
|
+
- **Browser-first runtime:** the agent loop, virtual filesystem, shell, UI, and tools run client-side.
|
|
116
|
+
- **Thin server where needed:** the CLI path mainly exists to launch Chrome, proxy CDP, and bridge the few things browsers cannot do alone.
|
|
117
|
+
- **One model across floats:** CLI, extension, tray/follower flows, and Electron all reuse the same underlying system.
|
|
118
|
+
- **Cone + scoops delegation:** the main agent orchestrates; sub-agents execute in isolated sandboxes and report back.
|
|
119
|
+
- **Skills explain the world to the agent:** don't expect the agent to know everything, ask it to search and install skills that are relevant to the task.
|
|
449
120
|
|
|
450
|
-
|
|
121
|
+
## The SLICC vocabulary and lore
|
|
451
122
|
|
|
452
|
-
|
|
453
|
-
# Run with debug-level logging
|
|
454
|
-
npm run dev:full -- --log-level=debug
|
|
123
|
+
Once the product makes sense, the ice-cream language is easier to enjoy: it maps to real architecture, not just mascot energy.
|
|
455
124
|
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
125
|
+
- **Cone** — the main agent you interact with. It holds the broad context, owns the overall workflow, and delegates work.
|
|
126
|
+
- **Scoops** — isolated sub-agents with their own filesystem sandbox, shell, and conversation history.
|
|
127
|
+
- **Licks** — external events that wake an agent up: webhooks, cron jobs, and other signals from the outside world.
|
|
128
|
+
- **Floats** — normal engineers would call it runtimes, but would normal engineers have come up with this?
|
|
129
|
+
- **Tray** — multiple floats can form a tray, a joint session with remote control.
|
|
130
|
+
- **Sprinkles** — everything is better with sprinkles: small, optional enhancements you can add on top of the core system.
|
|
459
131
|
|
|
460
|
-
|
|
132
|
+
Why the name? SLICC stands for **Self-Licking Ice Cream Cone**: a recursive system that can help build, extend, and operate itself. A browser agent running inside the browser: that's as self-recursive as tongue-out gelato.
|
|
461
133
|
|
|
462
|
-
##
|
|
134
|
+
## API Keys and Providers
|
|
463
135
|
|
|
464
|
-
|
|
136
|
+
To use SLICC, you need an LLM provider. SLICC is very much a BYOT (bring your own tokens) affair. We have built-in support for many providers, and these have actually been tested.
|
|
465
137
|
|
|
466
|
-
|
|
138
|
+
- Adobe (for AEM customers. Talk to the team to get enabled)
|
|
139
|
+
- AWS Bedrock (because enterprise)
|
|
140
|
+
- AWS Bedrock CAMP (this is Adobe-internal. Did I say "because enterprise" already?)
|
|
141
|
+
- Anthropic
|
|
467
142
|
|
|
468
|
-
|
|
469
|
-
|---------|-------------|
|
|
470
|
-
| `git init` | Initialize a new repository |
|
|
471
|
-
| `git clone <url> [dir]` | Clone a repository (shallow clone by default) |
|
|
472
|
-
| `git add <file>` | Stage files for commit (use `.` for all) |
|
|
473
|
-
| `git status` | Show working tree status |
|
|
474
|
-
| `git commit -m "msg"` | Record changes to the repository |
|
|
475
|
-
| `git log [--oneline]` | Show commit history |
|
|
476
|
-
| `git branch [name]` | List or create branches |
|
|
477
|
-
| `git checkout <ref>` | Switch branches or restore files |
|
|
478
|
-
| `git diff` | Show changes between commits |
|
|
479
|
-
| `git remote [-v]` | List remote repositories |
|
|
480
|
-
| `git remote add <name> <url>` | Add a remote |
|
|
481
|
-
| `git fetch [remote]` | Download objects from remote |
|
|
482
|
-
| `git pull [remote]` | Fetch and merge changes |
|
|
483
|
-
| `git push [remote] [branch]` | Update remote refs |
|
|
484
|
-
| `git config <key> [value]` | Get/set configuration |
|
|
485
|
-
| `git rev-parse` | Parse git references |
|
|
143
|
+
The other providers are in YMMV territory. Please file an issue if you find them working or broken.
|
|
486
144
|
|
|
487
|
-
|
|
145
|
+
## Related projects and lineage
|
|
488
146
|
|
|
489
|
-
|
|
147
|
+
SLICC is part of the [AI Ecoverse](https://github.com/ai-ecoverse), a growing set of AI-native tools and workflows. Its distinctive angle is simple: browser-native, practical, and job-oriented.
|
|
490
148
|
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
149
|
+
- [yolo](https://github.com/ai-ecoverse/yolo) — worktree-friendly CLI launcher for AI agent workflows
|
|
150
|
+
- [upskill](https://github.com/ai-ecoverse/upskill) — installs reusable agent skills from other repositories (and built-in in SLICC)
|
|
151
|
+
- [ai-aligned-git](https://github.com/ai-ecoverse/ai-aligned-git) and [ai-aligned-gh](https://github.com/ai-ecoverse/ai-aligned-gh) — guardrails and attribution helpers for AI-assisted Git/GitHub work
|
|
494
152
|
|
|
495
|
-
|
|
153
|
+
SLICC would not have been possible without the pioneering inspiration of [OpenClaw](https://github.com/openclaw/openclaw), [NanoClaw](https://github.com/qwibitai/nanoclaw), and [Pi](https://github.com/badlogic/pi-mono). Pi is actually the frozen heart of every SLICC instance.
|
|
496
154
|
|
|
497
|
-
|
|
498
|
-
- **No merge/rebase**: Complex merge operations are not yet implemented
|
|
499
|
-
- **No LFS**: Large File Storage is not supported
|
|
500
|
-
- **Browser storage**: All repository data is stored in IndexedDB (LightningFS)
|
|
155
|
+
## Development and deeper docs
|
|
501
156
|
|
|
502
|
-
|
|
157
|
+
If you want to go deeper, the detailed docs live here:
|
|
503
158
|
|
|
504
|
-
|
|
505
|
-
- [
|
|
506
|
-
- [
|
|
507
|
-
- [
|
|
508
|
-
- [
|
|
509
|
-
- [
|
|
510
|
-
- [upskill](https://github.com/ai-ecoverse/upskill) — Install Claude/Agent skills from other repositories
|
|
511
|
-
- [as-a-bot](https://github.com/ai-ecoverse/as-a-bot) — GitHub App token broker for proper AI attribution
|
|
512
|
-
- **slicc** — Browser-based coding agent (you are here)
|
|
159
|
+
- [Development guide](docs/development.md)
|
|
160
|
+
- [Architecture](docs/architecture.md)
|
|
161
|
+
- [Testing](docs/testing.md)
|
|
162
|
+
- [Shell reference](docs/shell-reference.md)
|
|
163
|
+
- [Adding features](docs/adding-features.md)
|
|
164
|
+
- [Electron notes](docs/electron.md)
|