@vefimov/crew 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +55 -50
  2. package/dist/crew.js +1 -1
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -4,18 +4,16 @@
4
4
 
5
5
  # Crew
6
6
 
7
- **Your AI colleagues, at home.**
7
+ Your AI colleagues, at home.
8
8
 
9
- A lightweight, local-first workspace where persistent AI agents live.
10
- They remember everything, work with your files, and talk to you in the browser, the terminal and Telegram.
9
+ A local-first workspace for AI agents that stick around. They remember what you tell them, can work with files in folders you share, and answer in the browser, the terminal or Telegram.
11
10
 
12
11
  [![npm](https://img.shields.io/npm/v/@vefimov/crew?color=8b5cf6&label=npm)](https://www.npmjs.com/package/@vefimov/crew)
13
12
  [![CI](https://img.shields.io/github/actions/workflow/status/valyefimov/crew/ci.yml?branch=main&label=ci)](https://github.com/valyefimov/crew/actions)
14
13
  [![License: MIT](https://img.shields.io/badge/license-MIT-22d3ee)](https://github.com/valyefimov/crew/blob/main/LICENSE)
15
14
  [![Node](https://img.shields.io/badge/node-%E2%89%A522.13-8b5cf6)](https://github.com/valyefimov/crew/blob/main/.nvmrc)
16
- [![Local first](https://img.shields.io/badge/local--first-100%25-22d3ee)](#why-crew)
17
15
 
18
- [**Docs**](https://valyefimov.github.io/crew/) ·
16
+ [Docs](https://valyefimov.github.io/crew/) ·
19
17
  [Русский](https://valyefimov.github.io/crew/ru/) ·
20
18
  [Українська](https://valyefimov.github.io/crew/uk/) ·
21
19
  [Roadmap](https://valyefimov.github.io/crew/guide/roadmap)
@@ -30,7 +28,7 @@ npx @vefimov/crew
30
28
  <img src="https://raw.githubusercontent.com/valyefimov/crew/main/media/demo.gif" alt="Crew demo" width="860" />
31
29
  </a>
32
30
 
33
- **▶ Watch the 90-second demo with voice-over:**
31
+ The full 90-second demo with voice-over:
34
32
  [English](https://valyefimov.github.io/crew/media/demo.mp4) ·
35
33
  [Русский](https://valyefimov.github.io/crew/media/demo-ru.mp4) ·
36
34
  [Українська](https://valyefimov.github.io/crew/media/demo-uk.mp4)
@@ -39,34 +37,35 @@ npx @vefimov/crew
39
37
 
40
38
  ---
41
39
 
42
- ## Why Crew
40
+ ## What it is
43
41
 
44
- Most "AI assistants" are a chat box that forgets you the moment you close the tab. Crew is the opposite: a small team of **persistent colleagues** that live on your machine.
42
+ Most AI assistants forget you when you close the tab. Crew keeps a small team of agents on your own machine instead. Each one has a name, a role, a personality and its own long-term memory, so a conversation can pick up where it stopped last week.
45
43
 
46
- | | |
47
- |---|---|
48
- | 🏠 **Local-first** | Runs on [Ollama](https://ollama.com) (or any OpenAI-compatible server). One SQLite file. No cloud, no accounts, no telemetry. |
49
- | 🧠 **Real memory** | Each agent keeps long-term facts, decisions and preferences. Hybrid full-text + vector search, auto-extracted after every chat. |
50
- | 🎭 **Characters** | Name, role, personality, instructions, even a different model per agent. Start from templates: backend dev, designer, PM, writer, coach. |
51
- | 📁 **Your files** | Share a folder read-only or read-write. Agents list, read and write files — symlink- and `../`-proof. |
52
- | ✈️ **Telegram** | Paste a bot token, pair with a one-time code, chat with your crew from your phone. Memory is shared with the web UI. |
53
- | 🌍 **Three languages** | UI and docs in English, Русский and Українська. |
54
- | ⚡ **One command** | Web UI, CLI, REST + WebSocket API and a background worker — all in a single `npx`. |
44
+ It runs on [Ollama](https://ollama.com) or any OpenAI-compatible server. State lives in one SQLite file, and nothing is sent anywhere unless you use Telegram or point Crew at a remote provider.
45
+
46
+ What you get:
47
+
48
+ - Agents with a role, a personality, instructions and, if you want, their own model. Five templates to start from: backend developer, frontend developer, product manager, writer, coach.
49
+ - Long-term memory for each agent. It is stored in SQLite, searched with full text and vectors, and filled in automatically after every chat.
50
+ - Shared folders, read-only or read-write. An agent can list, read and write files inside them and nowhere else.
51
+ - A web UI, a CLI and a Telegram bot. All three talk to the same agents and share the same memory.
52
+ - A REST and WebSocket API and a background task queue.
53
+ - An interface and docs in English, Russian and Ukrainian.
55
54
 
56
55
  ## Screenshots
57
56
 
58
57
  <table>
59
58
  <tr>
60
- <td width="50%"><img src="https://raw.githubusercontent.com/valyefimov/crew/main/media/dashboard.png" alt="Dashboard — who's doing what" /><br /><sub><b>Dashboard</b> — who's doing what, live</sub></td>
61
- <td width="50%"><img src="https://raw.githubusercontent.com/valyefimov/crew/main/media/chat-memory.png" alt="Chat with memory panel" /><br /><sub><b>Chat + memory</b> — browse and edit what an agent remembers</sub></td>
59
+ <td width="50%"><img src="https://raw.githubusercontent.com/valyefimov/crew/main/media/dashboard.png" alt="Dashboard" /><br /><sub>The dashboard shows what each agent is doing right now.</sub></td>
60
+ <td width="50%"><img src="https://raw.githubusercontent.com/valyefimov/crew/main/media/chat-memory.png" alt="Chat with memory panel" /><br /><sub>A chat with the memory panel open. You can search, add and delete memories.</sub></td>
62
61
  </tr>
63
62
  <tr>
64
- <td width="50%"><img src="https://raw.githubusercontent.com/valyefimov/crew/main/media/files.png" alt="Agent reading files" /><br /><sub><b>Files</b> — shared folders and visible tool calls</sub></td>
65
- <td width="50%"><img src="https://raw.githubusercontent.com/valyefimov/crew/main/media/new-agent.png" alt="New colleague dialog" /><br /><sub><b>Templates</b> — hire a new colleague in seconds</sub></td>
63
+ <td width="50%"><img src="https://raw.githubusercontent.com/valyefimov/crew/main/media/files.png" alt="Agent reading files" /><br /><sub>An agent reading a file from a shared folder. Tool calls show up in the chat.</sub></td>
64
+ <td width="50%"><img src="https://raw.githubusercontent.com/valyefimov/crew/main/media/new-agent.png" alt="New colleague dialog" /><br /><sub>Creating an agent from a template.</sub></td>
66
65
  </tr>
67
66
  <tr>
68
- <td width="50%"><img src="https://raw.githubusercontent.com/valyefimov/crew/main/media/dashboard-ru.png" alt="Russian UI" /><br /><sub><b>Русский</b></sub></td>
69
- <td width="50%"><img src="https://raw.githubusercontent.com/valyefimov/crew/main/media/dashboard-uk.png" alt="Ukrainian UI" /><br /><sub><b>Українська</b></sub></td>
67
+ <td width="50%"><img src="https://raw.githubusercontent.com/valyefimov/crew/main/media/dashboard-ru.png" alt="Russian UI" /><br /><sub>Russian interface</sub></td>
68
+ <td width="50%"><img src="https://raw.githubusercontent.com/valyefimov/crew/main/media/dashboard-uk.png" alt="Ukrainian UI" /><br /><sub>Ukrainian interface</sub></td>
70
69
  </tr>
71
70
  </table>
72
71
 
@@ -74,7 +73,7 @@ Most "AI assistants" are a chat box that forgets you the moment you close the ta
74
73
 
75
74
  ## Quick start
76
75
 
77
- You need **Node.js 22.13+** and **Ollama**:
76
+ You need Node.js 22.13 or newer and Ollama:
78
77
 
79
78
  ```bash
80
79
  ollama pull qwen2.5:3b
@@ -83,10 +82,11 @@ ollama pull nomic-embed-text
83
82
  npx @vefimov/crew
84
83
  ```
85
84
 
86
- Open <http://localhost:3000>, hire your first colleague, say hi. Close the tab, come back tomorrow — they still know who you are.
85
+ Open <http://localhost:3000>, create an agent and say hi. Close the tab and come back tomorrow. The agent still knows who you are.
86
+
87
+ The same thing from the terminal:
87
88
 
88
89
  ```bash
89
- # or from the terminal
90
90
  npm i -g @vefimov/crew
91
91
  crew agent create Artem --template backend --folder ~/code/my-api
92
92
  crew chat Artem
@@ -94,7 +94,7 @@ crew doctor # check your setup
94
94
  ```
95
95
 
96
96
  <details>
97
- <summary><b>Docker</b></summary>
97
+ <summary>Docker</summary>
98
98
 
99
99
  ```bash
100
100
  docker compose -f docker/docker-compose.yml up
@@ -105,22 +105,24 @@ docker compose -f docker/docker-compose.yml exec ollama ollama pull nomic-embed-
105
105
  </details>
106
106
 
107
107
  <details>
108
- <summary><b>Telegram</b></summary>
108
+ <summary>Telegram</summary>
109
+
110
+ Create a bot with @BotFather, then:
109
111
 
110
112
  ```bash
111
- crew config set telegramToken 123456:ABC... # from @BotFather
113
+ crew config set telegramToken 123456:ABC...
112
114
  crew start
113
115
  # ✔ Telegram bot online — send /pair 482913 to it
114
116
  ```
115
117
 
116
- `/agents`, `/use <name>`, `/memory`, `/forget` — or just address someone: *"Lena, how does this look?"*
118
+ The bot understands `/agents`, `/use <name>`, `/memory` and `/forget`. You can also address an agent by name in a message: "Lena, how does this look?"
117
119
 
118
120
  </details>
119
121
 
120
122
  <details>
121
- <summary><b>Use a different model provider</b></summary>
123
+ <summary>Another model provider</summary>
122
124
 
123
- LM Studio, llama.cpp, vLLM, OpenRouter, OpenAI — anything OpenAI-compatible:
125
+ LM Studio, llama.cpp, vLLM, OpenRouter and OpenAI all work, since they speak the same API:
124
126
 
125
127
  ```bash
126
128
  CREW_PROVIDER=openai OPENAI_BASE_URL=http://127.0.0.1:1234/v1 crew start
@@ -141,43 +143,46 @@ CREW_PROVIDER=openai OPENAI_BASE_URL=http://127.0.0.1:1234/v1 crew start
141
143
  background worker ──▶ memory extraction, embeddings
142
144
  ```
143
145
 
144
- - **No native dependencies** — uses Node's built-in `node:sqlite`, so `npx` just works.
145
- - **Hybrid memory in SQLite** — FTS5 (BM25) + cosine over embeddings, fused with reciprocal-rank fusion, nudged by importance and recency. Near-duplicates are skipped.
146
- - **Provider-agnostic** — a tiny `Provider` interface with streaming and tool calls.
147
- - **Safe files** — paths are resolved with `realpath` *before* the permission check; writes need an explicit `rw` grant.
146
+ Crew uses Node's built-in `node:sqlite`, so there is nothing to compile and `npx` works anywhere Node 22.13 does.
147
+
148
+ Memory search combines SQLite FTS5 (BM25) with cosine similarity over embeddings. The two rankings are merged with reciprocal-rank fusion and adjusted a little for importance and age. A new memory that is nearly identical to an existing one is skipped.
149
+
150
+ Providers sit behind a small interface with streaming and tool calls, so adding another one is a short file.
151
+
152
+ For files, Crew resolves every path with `realpath` before checking permissions, which stops `../` and symlink escapes. Writing needs an explicit `rw` grant.
148
153
 
149
- Read more in the [architecture docs](https://valyefimov.github.io/crew/guide/architecture).
154
+ More in the [architecture docs](https://valyefimov.github.io/crew/guide/architecture).
150
155
 
151
156
  ## Repository
152
157
 
153
158
  ```
154
- apps/server Hono — REST + WebSocket
155
- apps/web React 19 · Vite · Tailwind v4
156
- packages/core agent runtime, providers, tools, worker
157
- packages/memory SQLite store, FTS5 + vectors, task queue
159
+ apps/server Hono: REST + WebSocket
160
+ apps/web React 19, Vite, Tailwind v4
161
+ packages/core agent runtime, providers, tools, worker
162
+ packages/memory SQLite store, FTS5 + vectors, task queue
158
163
  packages/channels Telegram (grammY)
159
- cli `crew` — published as @vefimov/crew
160
- docs VitePress site (en · ru · uk)
164
+ cli the `crew` command, published as @vefimov/crew
165
+ docs VitePress site in English, Russian and Ukrainian
161
166
  ```
162
167
 
163
168
  ```bash
164
169
  git clone https://github.com/valyefimov/crew && cd crew
165
170
  pnpm install
166
- pnpm dev # API :3001, web UI :5173
171
+ pnpm dev # API on :3001, web UI on :5173
167
172
  pnpm test
168
173
  ```
169
174
 
170
175
  ## Roadmap
171
176
 
172
- - [x] **v1.0** — agents, memory, web UI, files, Ollama, CLI, Telegram, background tasks
173
- - [ ] **v1.1** — local voice (Whisper.cpp + Piper/Kokoro), scheduled tasks, sandboxed commands
174
- - [ ] **v1.2** — Slack, multiple workspaces, agents talking to each other
175
- - [ ] **v2.0** — team mode, marketplace of characters and skills, PWA, plugins
177
+ - [x] v1.0: agents, memory, web UI, files, Ollama, CLI, Telegram, background tasks
178
+ - [ ] v1.1: local voice (Whisper.cpp and Piper or Kokoro), scheduled tasks, sandboxed commands
179
+ - [ ] v1.2: Slack, multiple workspaces, agents talking to each other
180
+ - [ ] v2.0: team mode, a marketplace of characters and skills, PWA, plugins
176
181
 
177
182
  ## Security
178
183
 
179
- Crew listens on `127.0.0.1` by default and its API has **no authentication**. Don't expose it to the internet without a reverse proxy that adds auth.
184
+ Crew listens on `127.0.0.1` by default, and its API has no authentication. If you expose it beyond your machine, put a reverse proxy with auth in front of it.
180
185
 
181
186
  ## License
182
187
 
183
- [MIT](https://github.com/valyefimov/crew/blob/main/LICENSE) © Valentyn Yefimov
188
+ [MIT](https://github.com/valyefimov/crew/blob/main/LICENSE), © Valentyn Yefimov
package/dist/crew.js CHANGED
@@ -1356,7 +1356,7 @@ import { serveStatic } from "@hono/node-server/serve-static";
1356
1356
  import { createNodeWebSocket } from "@hono/node-ws";
1357
1357
 
1358
1358
  // ../apps/server/src/version.ts
1359
- var VERSION = "1.0.1";
1359
+ var VERSION = "1.0.2";
1360
1360
 
1361
1361
  // ../apps/server/src/app.ts
1362
1362
  var SECRET_KEYS = /* @__PURE__ */ new Set(["openaiApiKey", "telegramToken"]);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vefimov/crew",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "A lightweight local-first workspace for your persistent AI colleagues. Memory, files, Telegram — one command.",
5
5
  "type": "module",
6
6
  "license": "MIT",