osborn 0.9.126 → 0.9.127

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.
@@ -29,6 +29,17 @@ response and check off; `scripts/review-run.sh <clip>` in the harness does the
29
29
  frame extraction. Media is reviewed by you AND delivered to the user, every
30
30
  run, no exceptions.
31
31
 
32
+ **DELIVER MEDIA INLINE via the `send-media` skill — MANDATORY.** Artifacts on the
33
+ machine's disk are INVISIBLE to the user (mobile especially). Upload each clip and
34
+ key frame, then render the public URL in your reply so it shows in chat:
35
+ ```bash
36
+ URL=$(curl -s -X POST "https://www.voice-native.com/api/upload" -F "file=@/path/to/clip.mp4" \
37
+ | python3 -c "import sys,json;print(json.load(sys.stdin)['url'])")
38
+ ```
39
+ Render as `[Image: step-3.png](URL)` (inline, tap-to-open) or `[File: run.mp4](URL)`.
40
+ The live URL is the during-run window; these uploads are the after-the-fact proof
41
+ the user can actually see. Never upload artifacts containing secrets. See `send-media`.
42
+
32
43
  ## UPDATE CHECK (AUTO-UPDATE — first-party tooling, no prompt)
33
44
  This packaged copy ships with every machine and may lag the served version.
34
45
  This is first-party tooling you own — AUTO-UPDATE silently (industry standard
@@ -0,0 +1,41 @@
1
+ # Slack (read-only) — search and read Slack from the shell
2
+
3
+ > 📅 **Last updated: 2026-08-09.** Recreated from scratch after the Mac data-loss events wiped the
4
+ > original global install. READ-ONLY by design: no posting, no reactions, no edits.
5
+
6
+ Use this skill when asked to find, read, or summarize Slack messages, threads, or channels.
7
+
8
+ ## Auth
9
+ Requires a Slack token in `SLACK_TOKEN` (bot `xoxb-…` or user `xoxp-…`).
10
+ Load it from `/workspace/.claude/slack.env` if present:
11
+ ```bash
12
+ [ -f /workspace/.claude/slack.env ] && export $(grep -v '^#' /workspace/.claude/slack.env | xargs)
13
+ ```
14
+ If `SLACK_TOKEN` is unset, STOP and tell the user: "No Slack token on this machine — add one to
15
+ /workspace/.claude/slack.env (SLACK_TOKEN=xoxb-…). Create at api.slack.com/apps with read scopes:
16
+ channels:history channels:read groups:history groups:read search:read users:read."
17
+
18
+ ## Read-only rules (hard)
19
+ - ONLY call GET/read Slack Web API methods listed below. NEVER `chat.postMessage`, `reactions.add`,
20
+ or any method that writes. If asked to send/post, refuse and suggest the user do it themselves.
21
+
22
+ ## Core calls (curl; all return JSON)
23
+ ```bash
24
+ H="Authorization: Bearer $SLACK_TOKEN"
25
+ # list channels (public + private the token can see)
26
+ curl -s -H "$H" "https://slack.com/api/conversations.list?types=public_channel,private_channel&limit=200"
27
+ # channel history (channel id from list)
28
+ curl -s -H "$H" "https://slack.com/api/conversations.history?channel=C0XXXX&limit=50"
29
+ # a thread
30
+ curl -s -H "$H" "https://slack.com/api/conversations.replies?channel=C0XXXX&ts=1234567890.123456"
31
+ # search (user tokens only; bot tokens can't search)
32
+ curl -s -H "$H" --get --data-urlencode "query=from:@nick linkedin" "https://slack.com/api/search.messages"
33
+ # user lookup
34
+ curl -s -H "$H" "https://slack.com/api/users.list?limit=200"
35
+ ```
36
+
37
+ ## Output discipline
38
+ - Summarize; quote only the messages that matter, with author + date.
39
+ - `ok:false` → report the exact `error` field (common: `missing_scope`, `not_in_channel` — the bot
40
+ must be invited to a channel to read it; `search.messages` needs a USER token).
41
+ - Never echo the token into output or files.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "osborn",
3
- "version": "0.9.126",
3
+ "version": "0.9.127",
4
4
  "description": "Voice AI coding assistant - local agent that connects to Osborn frontend",
5
5
  "type": "module",
6
6
  "bin": {