@workscribe/cli 1.15.4 → 1.15.6
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 +33 -101
- package/dist/index.js +5 -5
- package/package.json +23 -8
package/README.md
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
# Workscribe
|
|
2
2
|
|
|
3
|
+
[](https://www.npmjs.com/package/@workscribe/cli)
|
|
4
|
+
[](https://www.npmjs.com/package/@workscribe/cli)
|
|
5
|
+
[](https://www.npmjs.com/package/@workscribe/cli)
|
|
6
|
+
|
|
3
7
|
> Your work, automatically documented.
|
|
4
8
|
|
|
5
|
-
Workscribe is a CLI tool that passively captures your terminal activity and transforms it into readable daily work summaries — without you having to write anything.
|
|
9
|
+
[Workscribe](https://workscribe.co) is a CLI tool that passively captures your terminal activity and transforms it into readable daily work summaries — without you having to write anything.
|
|
6
10
|
|
|
7
11
|
```
|
|
8
12
|
$ workscribe summary
|
|
@@ -17,6 +21,8 @@ $ workscribe summary
|
|
|
17
21
|
- Investigated and resolved Docker networking issue in compose setup
|
|
18
22
|
```
|
|
19
23
|
|
|
24
|
+
**[Full documentation →](https://workscribe.mintlify.site)** — commands, configuration, AI providers, troubleshooting. This README covers getting started; everything else lives there and is kept current as the product changes.
|
|
25
|
+
|
|
20
26
|
## How it works
|
|
21
27
|
|
|
22
28
|
A shell hook captures every command you run. At the end of the day, `workscribe summary` groups your activity into work sessions and sends structured event data (never raw commands) to your configured AI provider, which returns a standup-ready narrative.
|
|
@@ -47,12 +53,16 @@ source ~/.zshrc # or restart your terminal
|
|
|
47
53
|
|
|
48
54
|
`workscribe init` walks you through choosing an AI provider, installs the shell hook, and offers to install a Claude Code session capture hook if Claude Code is detected. Safe to re-run — updates outdated hooks and skips steps already complete.
|
|
49
55
|
|
|
56
|
+
## Also capturing in your editor?
|
|
57
|
+
|
|
58
|
+
The [Workscribe VS Code extension](https://marketplace.visualstudio.com/items?itemName=workscribe.workscribe) feeds file saves, debug sessions, and test/build runs into the same summary — activity pure terminal capture misses entirely. It also adds a status bar item that surfaces the last summary for a file you haven't touched in 24+ hours. Uses this CLI under the hood; no separate setup beyond installing it.
|
|
59
|
+
|
|
50
60
|
## Uninstalling
|
|
51
61
|
|
|
52
62
|
If the CLI is still installed:
|
|
53
63
|
|
|
54
64
|
```bash
|
|
55
|
-
workscribe uninstall # removes shell hooks, optionally deletes
|
|
65
|
+
workscribe uninstall # removes shell hooks, optionally deletes local data
|
|
56
66
|
npm uninstall -g @workscribe/cli
|
|
57
67
|
```
|
|
58
68
|
|
|
@@ -64,128 +74,48 @@ If you've already removed the binary and still see `_workscribe_precmd` errors i
|
|
|
64
74
|
|
|
65
75
|
## AI providers
|
|
66
76
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
| Provider | Config value | Requires |
|
|
70
|
-
|---|---|---|
|
|
71
|
-
| Anthropic (Claude) | `anthropic` | API key |
|
|
72
|
-
| OpenAI | `openai` | API key |
|
|
73
|
-
| Ollama (local) | `ollama` | Ollama running locally — free, offline |
|
|
74
|
-
| OpenAI-compatible | `openai-compatible` | API key + base URL (Groq, Together, Mistral…) |
|
|
77
|
+
Anthropic, OpenAI, Gemini, Groq, Ollama (fully offline), or any OpenAI-compatible endpoint.
|
|
75
78
|
|
|
76
79
|
```bash
|
|
77
|
-
workscribe config set ai.provider
|
|
78
|
-
workscribe config set ai.provider anthropic # switch to Anthropic
|
|
80
|
+
workscribe config set ai.provider anthropic
|
|
79
81
|
workscribe config set ai.apiKey <your-key>
|
|
80
82
|
```
|
|
81
83
|
|
|
84
|
+
**[Provider setup, defaults, and model overrides →](https://workscribe.mintlify.site/providers)**
|
|
85
|
+
|
|
82
86
|
## Commands
|
|
83
87
|
|
|
88
|
+
A few of the most common:
|
|
89
|
+
|
|
84
90
|
| Command | Description |
|
|
85
91
|
|---|---|
|
|
86
|
-
| `workscribe init` | Set up Workscribe, install shell hooks, configure AI provider |
|
|
87
|
-
| `workscribe uninstall` | Remove shell hooks and optionally delete all local data |
|
|
88
92
|
| `workscribe summary` | Generate today's work summary |
|
|
89
|
-
| `workscribe
|
|
90
|
-
| `workscribe summary --week` | Summary for the current week |
|
|
91
|
-
| `workscribe summary --fresh` | Bypass cache and regenerate |
|
|
92
|
-
| `workscribe summary --verbose` | Show all captured events (including those excluded from AI) |
|
|
93
|
-
| `workscribe summary --slack` | Post summary to configured Slack channel |
|
|
94
|
-
| `workscribe summary --webhook <url>` | Post summary to a custom webhook URL |
|
|
95
|
-
| `workscribe sessions` | List detected work sessions for today |
|
|
96
|
-
| `workscribe sessions --date 2026-05-20` | Sessions for a specific date |
|
|
97
|
-
| `workscribe events` | List captured events for today |
|
|
98
|
-
| `workscribe events --date 2026-05-20` | Events for a specific date |
|
|
99
|
-
| `workscribe events --limit 20` | Show only the most recent N events |
|
|
100
|
-
| `workscribe export` | Save today's summary as a markdown file |
|
|
101
|
-
| `workscribe export --date 2026-05-20` | Export summary for a specific date |
|
|
102
|
-
| `workscribe export --output <path>` | Write to a custom file path |
|
|
93
|
+
| `workscribe week` | Generate this week's digest |
|
|
103
94
|
| `workscribe status` | Check capture is active and show event counts |
|
|
104
|
-
| `workscribe
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
| `workscribe clear` | Delete all captured events for today |
|
|
108
|
-
| `workscribe clear --date 2026-05-20` | Delete all events for a specific date |
|
|
109
|
-
| `workscribe clear --dry-run` | Preview what would be cleared without deleting |
|
|
110
|
-
| `workscribe clear --yes` | Skip the confirmation prompt |
|
|
111
|
-
| `workscribe pause` | Pause capture temporarily |
|
|
112
|
-
| `workscribe resume` | Resume capture after a pause |
|
|
113
|
-
| `workscribe config` | View current configuration |
|
|
114
|
-
| `workscribe config get KEY` | Print a single config value |
|
|
115
|
-
| `workscribe config set KEY VALUE` | Update a config value |
|
|
95
|
+
| `workscribe config` | View or update configuration |
|
|
96
|
+
|
|
97
|
+
**[Full command reference →](https://workscribe.mintlify.site/commands)** — every command and every flag.
|
|
116
98
|
|
|
117
99
|
## Privacy
|
|
118
100
|
|
|
119
|
-
- All captured data is stored locally
|
|
101
|
+
- All captured activity data is stored locally on your machine — nothing is written anywhere else
|
|
120
102
|
- Credentials are redacted before any event is written to disk (tokens, API keys, passwords, JWTs)
|
|
121
|
-
-
|
|
122
|
-
-
|
|
123
|
-
-
|
|
103
|
+
- Your captured activity (commands, sessions) is never sent anywhere except your configured AI provider, and only when you run `workscribe summary`
|
|
104
|
+
- Use Ollama to keep that data fully on-device with zero external transmission
|
|
105
|
+
- Separately, Workscribe sends an anonymous install ping (a random ID, CLI version, OS platform, Node version — no activity data, ever), disclosed during `workscribe init`. Opt out anytime: `workscribe config set telemetry.enabled false`
|
|
106
|
+
|
|
107
|
+
**[Full privacy & security details →](https://workscribe.mintlify.site/privacy)**
|
|
124
108
|
|
|
125
109
|
## Configuration
|
|
126
110
|
|
|
127
111
|
```bash
|
|
128
|
-
workscribe config set
|
|
129
|
-
workscribe config set
|
|
130
|
-
workscribe config set redact.extra "MY_PATTERN" # add a custom redaction regex
|
|
131
|
-
workscribe config set summary.format json # output summary as JSON instead of markdown
|
|
132
|
-
workscribe config set capture.ignore "mycommand" # suppress a command from being captured
|
|
133
|
-
|
|
134
|
-
# Override the display name for a local clone whose folder name differs from the repo
|
|
135
|
-
workscribe config set projects./Users/me/sandbox/myrepo actual-repo-name
|
|
136
|
-
|
|
137
|
-
# Post summaries to Slack or a custom webhook
|
|
112
|
+
workscribe config set ai.provider anthropic
|
|
113
|
+
workscribe config set session.idleTimeout 20
|
|
138
114
|
workscribe config set integrations.slackWebhook https://hooks.slack.com/services/...
|
|
139
|
-
workscribe config set integrations.webhook https://custom.endpoint/hook # persistent default webhook
|
|
140
115
|
workscribe summary --slack
|
|
141
|
-
workscribe summary --webhook https://custom.endpoint/hook # one-off override
|
|
142
116
|
```
|
|
143
117
|
|
|
144
|
-
|
|
145
|
-
|---|---|---|
|
|
146
|
-
| `ai.provider` | — | AI provider: `anthropic`, `openai`, `ollama`, `openai-compatible` |
|
|
147
|
-
| `ai.apiKey` | — | API key for the configured provider |
|
|
148
|
-
| `ai.model` | provider default | Model name override |
|
|
149
|
-
| `ai.baseUrl` | — | Base URL for `openai-compatible` providers |
|
|
150
|
-
| `session.idleTimeout` | `30` | Minutes of inactivity before a new session starts |
|
|
151
|
-
| `git.qualifyRepoName` | `false` | Use `owner/repo` instead of bare `repo` for `repo_name` — helpful if you work across repos whose bare names collide (e.g. an org that names its repos after the tool each one targets) |
|
|
152
|
-
| `capture.ignore` | common shell builtins | Commands to exclude from capture |
|
|
153
|
-
| `capture.aiTools` | `true` | Set to `false` to disable all AI session capture |
|
|
154
|
-
| `capture.includeAiderPrompt` | `true` | Set to `false` to skip reading Aider's history file for prompt context |
|
|
155
|
-
| `redact.extra` | `[]` | Additional regex patterns to redact from captured commands |
|
|
156
|
-
| `summary.format` | `markdown` | Output format: `markdown` or `json` |
|
|
157
|
-
| `summary.includeCategories` | `[]` | Event categories to re-include in the AI prompt (e.g. `["linting"]`) |
|
|
158
|
-
| `integrations.slackWebhook` | — | Slack incoming webhook URL |
|
|
159
|
-
| `integrations.webhook` | — | Default webhook URL for `--webhook` |
|
|
160
|
-
| `projects.<path>` | — | Display name override for a repo by absolute path |
|
|
161
|
-
|
|
162
|
-
## Slack integration
|
|
163
|
-
|
|
164
|
-
Post your daily or weekly summary directly to a Slack channel:
|
|
165
|
-
|
|
166
|
-
```bash
|
|
167
|
-
workscribe summary --slack
|
|
168
|
-
workscribe summary --week --slack
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
**Setup:**
|
|
172
|
-
|
|
173
|
-
1. Go to [api.slack.com/apps](https://api.slack.com/apps) → **Create New App** → **From scratch**
|
|
174
|
-
2. Name your app, select your workspace, and click **Create App**
|
|
175
|
-
3. In the left sidebar under **Features**, click **Incoming Webhooks**
|
|
176
|
-
4. Toggle **Activate Incoming Webhooks** to On
|
|
177
|
-
5. Click **Add New Webhook to Workspace**, choose a channel, and click **Allow**
|
|
178
|
-
6. Copy the webhook URL and run:
|
|
179
|
-
|
|
180
|
-
```bash
|
|
181
|
-
workscribe config set integrations.slackWebhook https://hooks.slack.com/services/...
|
|
182
|
-
```
|
|
183
|
-
|
|
184
|
-
Works on all Slack plans including free. No admin role required.
|
|
185
|
-
|
|
186
|
-
Summaries posted to Slack are automatically formatted — headings are bolded, bullets converted to `•`, and your OS username is prepended so recipients know who sent it in shared channels. Custom `--webhook` URLs receive the raw markdown output unchanged.
|
|
187
|
-
|
|
188
|
-
Config is stored at `~/.workscribe/config.json`.
|
|
118
|
+
**[Full configuration reference →](https://workscribe.mintlify.site/configuration)** — every key, Slack setup, webhooks, and more.
|
|
189
119
|
|
|
190
120
|
## Debug mode
|
|
191
121
|
|
|
@@ -195,6 +125,8 @@ If capture isn't working, set `WORKSCRIBE_DEBUG=1` to write errors to `~/.worksc
|
|
|
195
125
|
WORKSCRIBE_DEBUG=1 workscribe status
|
|
196
126
|
```
|
|
197
127
|
|
|
128
|
+
**[Troubleshooting →](https://workscribe.mintlify.site/troubleshooting)**
|
|
129
|
+
|
|
198
130
|
## License
|
|
199
131
|
|
|
200
132
|
MIT
|
package/dist/index.js
CHANGED
|
@@ -4145,7 +4145,7 @@ function registerBugReport(program) {
|
|
|
4145
4145
|
const timestamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-");
|
|
4146
4146
|
const reportPath = import_path17.default.join(WORKSCRIBE_DIR, `bug-report-${timestamp}.txt`);
|
|
4147
4147
|
const systemInfo = [
|
|
4148
|
-
`Workscribe version : ${"1.15.
|
|
4148
|
+
`Workscribe version : ${"1.15.6"}`,
|
|
4149
4149
|
`Node.js version : ${process.version}`,
|
|
4150
4150
|
`Platform : ${process.platform}`,
|
|
4151
4151
|
`Architecture : ${process.arch}`,
|
|
@@ -4176,7 +4176,7 @@ function registerBugReport(program) {
|
|
|
4176
4176
|
process.exit(1);
|
|
4177
4177
|
}
|
|
4178
4178
|
const params = new URLSearchParams({
|
|
4179
|
-
title: `Bug report \u2014 workscribe ${"1.15.
|
|
4179
|
+
title: `Bug report \u2014 workscribe ${"1.15.6"}`,
|
|
4180
4180
|
body: `<!-- Attach ${import_path17.default.basename(reportPath)} or paste the relevant sections below -->
|
|
4181
4181
|
|
|
4182
4182
|
**Describe the issue:**
|
|
@@ -4376,7 +4376,7 @@ function isNewer(latest, current) {
|
|
|
4376
4376
|
return latestPatch > currentPatch;
|
|
4377
4377
|
}
|
|
4378
4378
|
function checkForUpdate() {
|
|
4379
|
-
const current = "1.15.
|
|
4379
|
+
const current = "1.15.6";
|
|
4380
4380
|
const cache = readCache();
|
|
4381
4381
|
if (cache && isNewer(cache.latestVersion, current)) {
|
|
4382
4382
|
process.stderr.write(
|
|
@@ -4399,7 +4399,7 @@ function checkForUpdate() {
|
|
|
4399
4399
|
function buildTelemetryPayload(config) {
|
|
4400
4400
|
return {
|
|
4401
4401
|
installId: config.telemetry.installId,
|
|
4402
|
-
cliVersion: "1.15.
|
|
4402
|
+
cliVersion: "1.15.6",
|
|
4403
4403
|
platform: import_os10.default.platform(),
|
|
4404
4404
|
nodeVersion: process.version
|
|
4405
4405
|
};
|
|
@@ -4474,7 +4474,7 @@ var require_main = __commonJS({
|
|
|
4474
4474
|
pingTelemetry();
|
|
4475
4475
|
}
|
|
4476
4476
|
var program = new import_commander.Command();
|
|
4477
|
-
program.name("workscribe").description("Automatic developer work journal").version("1.15.
|
|
4477
|
+
program.name("workscribe").description("Automatic developer work journal").version("1.15.6");
|
|
4478
4478
|
registerCapture(program);
|
|
4479
4479
|
registerHook(program);
|
|
4480
4480
|
registerInit(program);
|
package/package.json
CHANGED
|
@@ -1,7 +1,29 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@workscribe/cli",
|
|
3
|
-
"version": "1.15.
|
|
3
|
+
"version": "1.15.6",
|
|
4
4
|
"description": "Passive developer work journal — automatic terminal activity summaries",
|
|
5
|
+
"homepage": "https://workscribe.co",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "https://github.com/workscribe/cli"
|
|
9
|
+
},
|
|
10
|
+
"bugs": {
|
|
11
|
+
"url": "https://github.com/workscribe/cli/issues"
|
|
12
|
+
},
|
|
13
|
+
"keywords": [
|
|
14
|
+
"cli",
|
|
15
|
+
"developer-tools",
|
|
16
|
+
"terminal",
|
|
17
|
+
"journal",
|
|
18
|
+
"work-journal",
|
|
19
|
+
"standup",
|
|
20
|
+
"productivity",
|
|
21
|
+
"ai",
|
|
22
|
+
"summary",
|
|
23
|
+
"git",
|
|
24
|
+
"time-tracking",
|
|
25
|
+
"shell"
|
|
26
|
+
],
|
|
5
27
|
"type": "commonjs",
|
|
6
28
|
"bin": {
|
|
7
29
|
"workscribe": "dist/index.js"
|
|
@@ -29,13 +51,6 @@
|
|
|
29
51
|
"dist",
|
|
30
52
|
"shell"
|
|
31
53
|
],
|
|
32
|
-
"keywords": [
|
|
33
|
-
"developer-tools",
|
|
34
|
-
"journal",
|
|
35
|
-
"terminal",
|
|
36
|
-
"productivity",
|
|
37
|
-
"standup"
|
|
38
|
-
],
|
|
39
54
|
"author": "Mark Edomwande",
|
|
40
55
|
"license": "MIT",
|
|
41
56
|
"dependencies": {
|