Tables you can actually edit, and a shell that gets out of the way
Tables became a live grid
A GFM table used to render as a read-only picture that unrendered into pipe soup the moment you put a caret in it — to change one cell you lost the picture of the table you were editing. Now the rendered table is the editor.
The buffer stays plain GFM the whole time. Every gesture is an ordinary editor transaction, so live sync, undo, version diffs and comment pins keep working with no special cases, and the Mono view still shows a pipe table you could have typed by hand.
Drag or click across the grid to size a table before it lands — or type 12x5.A caret in a cell brings up row and column rails: drag to reorder, + in any gap to insert.
Cells are editable in place — the focused cell reveals its own raw markdown, and nothing else does
Alignment travels with a moved column, and the corner handle holds header, delete and Copy Table As
Comments anchor per cell — a pin is a character range and a cell is a character range, so a threaded comment on a cell behaves like any other
A command palette on ⌘K
One grouped list rather than mode prefixes: jump to a doc, run a command, format the selection, or search the open document with snippets that scroll and flash. There's a Search or run… chip in the doc bar so it isn't folklore.
⌘K was insert-link first, and that muscle memory is worth keeping where it means something: with text selected it still wraps the selection in a link, and with no selection the binding declines so the event falls through to the palette.
Recents first, then commands. Typing filters commands, formatting and doc titles together.
Focus mode on ⌥⌘F
Rails and the doc bar go, the document centres, and the bar comes back when the pointer reaches the top edge.
⌘. was rejected — Safari uses it to stop loading — as was ⌃⌘F, which is macOS's own Enter Full Screen.
Everything except the words. ⌥⌘F or esc to leave.
Dark theme
Toggleable from three places — the ◐ beside the wordmark, the ◐ on the style bar, and Appearance in the settings menu at the rail's foot. One state, three doors; each cycles Light → Dark → Match system, and Match system follows the OS live.
Getting there meant naming about seventy-seven colour literals in the stylesheet that had been written inline. The light values are unchanged — this pass only gave them names so a dark palette had something to override. The editor reads the same custom properties, so it follows without a second palette to maintain.
Rails, doc bar, editor and rendered table, all on the one palette.
Skill calls and MCP calls, counted separately
"Claude calls · 7d" was summing three different events, so a doc an agent merely read looked like a skill someone had run. The distinction already existed in the event stream; only the sum lost it. There are now two columns — Skill calls (Claude invoking it as a skill) and MCP calls (an agent reading or writing it over the API) — and both sort.
Clicking SKILLS in the rail now opens a page of its own: the union of every connected repo and everyone's local pushes, with the origin in the second column, which is what tells two same-named files apart once they're in one table.
The summary line leads with skill calls, then the adoption read: how many people are being counted, and how many of those are verified rather than claimed by git email.
Staleness over the same beacon — the listener sends a hash of the local skill file; if it differs from the doc's latest published version, the agent gets one short note, at most twice per version. Nothing ever writes a skill file for you
Six columns don't fit a phone, so MCP calls and Version are what drop at narrow widths
The comments rail sorts by document order, not by when a thread was opened
17 – 23 Aug
Folders, and counting the skills a team actually uses
Nested folders, and a folder view
Sections became real nested folders. The rail renders the tree with drag-to-file, folder re-parenting, spring-open on hover, right-click rename and delete, and a Move-to-folder picker. Moving or removing a folder carries its documents with it — it never strands them and never deletes them.
Clicking any folder title — a folder, the Docs header, a connected repo, or a repo subgroup — opens the whole subtree flattened into one sortable table: last edited first, with "in subfolder" hints, version, open comments and the agent-call counts.
Under the table: skills used through Claude Code this week that aren't imported here yet. Collected data is never invisible just because nobody connected the repo.
The skill listener: zero-setup counting for a whole team
A two-file hook in a repo starts counting which skills the team actually runs. A beacon without a token may claim a git email; the server maps that domain to a workspace and accepts the count only when the named repo is a connected source of that workspace. So merging the hook starts counting for everyone with no per-person setup, and random traffic can't write into a workspace's tallies.
Claimed beacons are tagged unverified and token beacons verified, which is where "counting 9/11 people · 6 verified" comes from. It sends the skill name, repo, git email and a timestamp — never prompts, arguments or file contents — and SKILLDOCS_LISTENER=off opts out at any time.
skilldocs_find, and pushes that file themselves
Every tool but one needed a doc id the agent already held, so the loop only worked inside a single session — come back tomorrow and there was no way to ask "which doc is this file?". skilldocs_find searches the workspace by title, by source filename, by folder, or by who last touched a doc. Called bare it lists every folder and its contents, which is how an agent resolves "my folder" without guessing at a name.
And a push now files itself: an agent can put a doc straight into a folder instead of always landing in the root.
10 – 16 Auglaunch week
One URL for every agent
MCP over HTTP — no install at all
The MCP server used to mean a local process. Now the endpoint lives at skilldocs.dev/mcp: no Node, no npx, no clone, and it works in any MCP client rather than only in Claude Code. Tool names are identical across both transports — they live in prompts and transcripts, and an agent shouldn't have to learn a second name for the same thing on a different wire.
One URL, five clients. The panel writes the command for whichever one you pick.
OAuth, so no token travels through a shell
Taking a bearer token in a header meant a year-long workspace credential went through a shell command and into history — and it meant ChatGPT and the claude.ai connector couldn't authenticate at all. SkillDocs is now its own authorization server as well as its resource server, to the MCP authorization spec: discovery documents, dynamic client registration, a consent screen, the lot. Connect by clicking Allow.
The SkillDocs plugin
Because setup was already one paste, the plugin isn't about install ergonomics. What it does that nothing else can is ship a SKILL.md alongside the tools: an agent that registers the endpoint otherwise gets seven tool descriptions and no notion of the loop they belong to — that pushing a doc up is how you get review, that a thread quoting text the diff already changed is one piece of feedback rather than two, that resolving a thread you didn't act on destroys the record.
Import a whole repo by pasting its URL
Paste anything GitHub-shaped — owner/repo, a repo URL, a /tree/ link — and SkillDocs scans the whole repo for markdown, then shows you the folders to choose from with everything already checked. A repo the anonymous probe can't read pivots into a four-step token walkthrough instead of dead-ending, and a token already stored for that repo is reused server-side, so reconnecting never re-asks.
Comments that survive the edit underneath them
A thread used to remember only its quoted words plus an occurrence index, and every client re-searched the document to place the highlight — so editing inside the quote orphaned the comment, and two people editing at once could briefly disagree about which occurrence a thread meant. Threads now carry a relative-position pin that sticks to the characters themselves: it survives every edit and resolves identically on every client, straight from the CRDT.
Also this week
Tables render in the editable preview — pipe soup became a real bordered table, with the source shown above it while your caret is inside
A phone pass — menus stay on screen, Share is back, no more focus-zoom on tap, and the collapsing URL bar stops eating the top row
Drop a .md file anywhere in the rail to import it; paste or drop images into either pane
Hyperlinks act like hyperlinks in the editable preview, and markdown escapes stop showing their backslash
Launched · 12 Aug 2026
What was already there on the day
For anyone arriving now: the launch build was not a skeleton. It shipped with —
An editor that renders as you type — one surface, not a split screen, with the raw markdown revealed just-in-time around your cursor
Real multiplayer — a CRDT document with live named cursors, selections, follow mode and workspace-wide presence
Anchored comment threads, exportable as markdown alongside the document for handing straight to an agent
Workspaces — your work domain is your team, self-serve, no invites
Version history and diffs, with a published baseline that reviews are measured against
The agent loop — push a skill up, get it reviewed by humans, read the diff and threads back down