Repository navigation
Make Deckle the knowledge base for an agent, and take the assistant out (3.0.0) - #28
Merged
Merged
Conversation
Deckle stops being a note app with an AI assistant built in and becomes the place an agent's work lives — Hermes, or anything else that speaks MCP or HTTP. The agent does the thinking; Deckle stores, shows, searches and keeps a record. It calls no model and holds no AI keys. Removed: the assistant (chat, queue, memory, Ask AI, / commands, semantic search, model picker), /api/assistant-settings and its settings store, and @anthropic-ai/sdk. .deckle-state stays reserved and unserved: upgraded 2.x volumes may still hold a provider key there. Added: - Files beside notes. Any file sits in the tree (kind "asset") and opens in a tab: images, PDF, audio and video in the browser's own viewers; Word, every sheet of a workbook, PowerPoint, CSV, JSON and text rendered in the app. Moves, renames, the bin and restore are byte-for-byte, and a rename on the server library rather than a download and re-upload. - An MCP server at /api/v1/mcp: Streamable HTTP, stateless, JSON, behind the API's tokens. search, read, list, list_projects, recent_activity, and for read-write tokens write_note, save_file, create_project, update_project, log_progress, move and delete. - /api/v1/files (raw PUT/GET/DELETE, listing) and /api/v1/activity. - Projects: folders in Projects/ with an Overview.md (front matter: status, summary, tags) and a Log.md, and a Projects view to review them. - An activity log (.deckle/activity.jsonl) naming the token behind every API and MCP write, an Activity feed with unseen counts, and live refresh: the app polls the log and reloads when an agent changes the library. - Search inside Word, Excel, PowerPoint, OpenDocument, CSV, JSON and text, with a zlib-only ZIP reader so the server keeps no dependencies. - integrations/hermes: a setup guide, a Hermes skill, and deckle_push.py for large files and folders, which refuses secrets and dependency caches. - Imports take any file; hidden files and node_modules-style caches stay out. Fixed along the way: - The editor had no image node, so every  in a note was deleted on the next save. Images now show, from the library or the web. - Front matter was mangled by editing a note. It is kept out of the editor, shown as properties, and put back on save. - If an agent rewrites the note being typed in, the typing still wins but the agent's version is snapshotted to history first. - DELETE /folders and the app's folder delete binned only notes and erased every other file in the folder; everything now goes to the bin. CSP: connect-src is now 'self'; blob: is allowed for frames, objects and media so stored PDFs and media can be previewed. @types/node is declared directly (it used to arrive through the SDK). Tests: 294 pass (54 AI-specific ones removed; new coverage for files, MCP, activity, projects, extraction, previews, front matter and the push-edit guard). Driven end to end in Chrome against a library seeded over MCP. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The change of direction in the previous commit. A major by the versioning table, whose rule is "if an upgrade needs you to do something, it is a major": - The AI assistant is gone, and /api/assistant-settings with it. Anyone who kept a provider key on a password-protected server library should delete .deckle-state/assistant.json from the volume and revoke the key. - The API's folder tree now carries non-note files as kind "asset" nodes; clients that assumed only folders and notes need to skip the new kind. - Deleting a folder through the API bins its files instead of erasing them. package.json and the lockfile are bumped together. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A change of direction. Deckle stops being a note app with an AI assistant built in and becomes the place an agent's work lives — Hermes, or anything else that speaks MCP or HTTP. The agent does the thinking; Deckle stores what it produces, shows it, searches it, and keeps a record of what it did. Deckle itself calls no model and holds no AI keys.
Two commits: the work, then
Cut 3.0.0(package.json, lockfile, changelog), as for 2.0.0.Before deploying
This is a major (3.0.0): an upgrade needs people to do something.
/api/assistant-settings. Libraries are untouched;.deckle/memory/and.deckle/runs/stay until someone deletes them..deckle-state/assistant.json. Deckle still refuses to serve that folder, but the README and changelog tell people to delete the file and revoke the key.:latestcrosses into 3.0 on the next pull. The README says so, and points anyone who wants the assistant at:2.kind: "asset"nodes. Clients that assumed only folders and notes need to skip them.GET /notesstill lists notes only.DELETE /folders/{path}bins files instead of erasing them.Added
POST /api/library/move), not a download and re-upload./api/v1/mcp, behind the API's tokens. Streamable HTTP, stateless, JSON responses, with anOrigincheck.search,read,list,list_projects,recent_activity.write_note,save_file,create_project,update_project,log_progress,move,delete./api/v1/files(raw PUT/GET/DELETE and a listing) and/api/v1/activity. The OpenAPI document is updated.Projects/has anOverview.md(front matter: status, summary, tags) and aLog.md. A Projects view lists them, filters by status and changes status in place. A pushed code project's README is never written to..deckle/activity.jsonlrecords the token behind every API and MCP write.integrations/hermes/:mcp_serversconfig, skill install).deckle_push.pyfor large files and folders. It uses the Python standard library only, and never sends.envfiles, keys,.gitor dependency caches.node_modules-style caches stay out.DECKLE_MAX_FILE_MB(default 100) andDECKLE_PROJECTS_DIR(defaultProjects).Fixed along the way
was dropped on the next save. That bug is in 2.0 today. Images now render, including library-relative ones.Changed
connect-src 'self'. The page no longer needs AI providers.blob:is allowed for frames, objects and media, so stored PDFs and media can preview. Previews are only minted for images, PDF, audio and video, typed by extension; HTML is shown as text..env.example,compose.yaml.@types/nodeis declared directly; it used to arrive through the SDK.Test plan
npm test: 294 tests in 21 files. 54 AI-specific tests were removed. New coverage:/filesand/activity.npm run build;npm ci --dry-runconfirms the lockfile is in sync.deckle_push.pyagainst the running server: skips.env, keys,.git,node_modulesand.deckleignorematches. The binary arrives byte-identical.--no-overwriteworks, and a bad token exits non-zero.mcp_serversconfig makes, not with Hermes itself.TZinside the Alpine image. No Docker daemon was available locally.Known and not addressed
useResizable(only the assistant used it).After merging
Tag
v3.0.0to publish3.0.0,3.0,3and:latest. Merging alone publishes:edge.🤖 Generated with Claude Code