Docs
How to install it, what the commands are, what the API looks like, and where your notes actually live.
Quickstart
After signing up, choose your agent and follow the guide to add the official plugin, save your API key, and check the connection. The install page inserts a newly generated key into the right command.
1. Get an API key
After signing up, use Get an API key to pick your environment and generate a key. The page inserts it into the --apikey command. The plaintext is shown exactly once — the server only ever stores its SHA-256.
2. Install the plugin
/plugin marketplace add loadshine/keepnow-plugins
/plugin install keepnow@keepnow-pluginsRun both commands inside Claude Code. Use /keepnow after installation.
3. Set the key and check it
/keepnow --apikey kn-...
/keepnow --statusSave the API key inside Claude Code, then use --status to confirm the account, plan, and usage.
4. Save your first note
Keep working in the current agent session. Once the conversation produces something worth keeping, describe what KeepNow should write up:
/keepnow summarize the root cause, discarded attempts, and final fixKeepNow uses the full context of the current session to generate and save a Markdown note. In Codex, use $keepnow; the natural-language description stays the same.
Commands
All three environments provide the same capabilities. Claude Code and Pi use /keepnow; Codex uses $keepnow. The arguments below are the same.
| Claude Code / Pi | Codex | What it does |
|---|---|---|
| /keepnow | $keepnow | Show command help. |
| /keepnow <description> | $keepnow <description> | Write up and save the current session following a natural-language description of the topic, scope, emphasis, or format. |
| /keepnow --find <description> | $keepnow --find <description> | Search titles, summaries, and keywords, then list matches. |
| /keepnow --open <id|url> | $keepnow --open <id|url> | Fetch the full note and read it into the current context. |
| /keepnow --recent | $keepnow --recent | The last 10 notes. |
| /keepnow --status | $keepnow --status | Account, plan and usage. The post-install check. |
| /keepnow --apikey <key> | $keepnow --apikey <key> | Save the API key in local configuration. KEEPNOW_API_KEY can still override it. |
Saving twice in one session
The topic is the note's identity. Within one session, run /keepnow d1 migrations, talk about something else, then run /keepnow r2 presigned URLs to create two notes. Run /keepnow d1 migrations again and the agent retrieves the matching note from this session, merges the new material, and rewrites it instead of creating a duplicate. In Codex, use the $keepnow prefix instead.
Matching only ever considers notes created in this session; it will never touch an older one. Several notes on the same topic across different days is normal and intended, not a defect.
Search
Search matches three fields — title, summary and keywords — and can be filtered by tag, date and source. Note bodies are not indexed.
Bodies aren't searched because they live in object storage, not the database. That makes the summary double as the search index — the write-up prompt tells the agent to put real error strings, API names and library names into the summary and keywords rather than writing a graceful but vague opener. Worth keeping to when you edit a note on the web, too.
Chinese works directly, with no tokenizer involved. Semantic search isn't built yet — it's on the roadmap.
REST API
This is what the plugins call, and you can call it directly to build your own integration. Authenticate with Authorization: Bearer <key>, or X-API-Key if that's easier.
| Endpoint | What it does |
|---|---|
| GET /api/v1/me | Validate the key; returns plan and usage. |
| POST /api/v1/notes | Create a note. Returns id, slug and webUrl. |
| GET /api/v1/notes | List and search. Never returns bodies. |
| GET /api/v1/notes/:id | One note, with the full Markdown. |
| PATCH /api/v1/notes/:id | Partial update. Passing content creates a new version. |
| DELETE /api/v1/notes/:id | Delete the note and all of its versions. |
| GET /api/v1/tags | All tags with their note counts. |
curl -X POST https://keepnow.app/api/v1/notes \
-H "Authorization: Bearer $KEEPNOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Remote D1 migration says table already exists",
"summary": "drizzle-kit migrations fail on remote D1 ...",
"keywords": "d1, drizzle-kit, migration, table already exists",
"content": "# ...markdown...",
"tags": ["cloudflare-d1", "drizzle"],
"source": "claude-code"
}'Error codes
Failures return { error, code }. The code is stable and safe to branch on.
| Status | code | Meaning |
|---|---|---|
| 401 | invalid_key | Key invalid or revoked. |
| 402 | quota_notes | Note limit reached. |
| 402 | quota_storage | Storage limit reached — usually version history. |
| 404 | not_found | No such note. |
| 413 | too_large | Note exceeds 256 KB. |
| 429 | rate_limited | Too many requests. |
Storage and versions
Note bodies live in object storage; the database holds only metadata and the searchable fields. Every edit writes a new version and old ones are kept indefinitely, so a bad agent rewrite can be recovered.
The two quota dimensions count different things. Notes are counted logically — a note edited ten times is still one note. Storage counts real bytes in object storage, so all ten versions add up.
Deleting a note removes every one of its versions too. It cannot be undone and there is no recycle bin — version history protects against a bad edit, not against a deletion.
Privacy and credentials
Notes are private by default. Any single note can get a public link; the body is rendered by the server and the storage address is never exposed.
A developer's working session naturally carries credentials. Three layers: the write-up prompt tells the agent to redact line by line; the server scans for known credential patterns on write and flags the note; and switching a flagged note to public triggers a confirmation showing the exact lines.
A scan hit never blocks the write: losing your note is worse than storing a secret you can then remove. The one place we do block is publishing, because that cannot be taken back.
Use a separate key per device so one can be revoked on its own. Revocation takes effect immediately.