Google Keep Skill
Integration with Google Keep via nodriver (undetectable Chrome). Creates, reads, updates, and deletes notes.
Description
name: google-keep description: Integration with Google Keep via nodriver (undetectable Chrome). Creates, reads, updates, and deletes notes. version: 1.0.0 author: Ricardo Reichert read_when:
- Create notes in Google Keep
- List notes from Google Keep
- Update notes in Google Keep
- Delete notes from Google Keep
- Archive notes in Google Keep
- Manage notes
Google Keep Skill
Skill to interact with Google Keep via nodriver (real Chrome, no bot detection).
Installation
Prerequisites
- Python 3.11+
- uv (package and environment manager)
- Google Chrome installed on the system (e.g.,
sudo apt install google-chrome-stableon Linux)
Skill Location
The skill must be in /path/to/google-keep-skill/ (or in the Nanobot workspace/skills). Nanobot discovers skills that have SKILL.md and _meta.json in this tree.
Install Dependencies
In the skill root, uv uses pyproject.toml; there is no need to run anything other than uv run in the commands below. On the first run, uv creates the environment and installs dependencies.
cd /path/to/google-keep-skill
uv run python scripts/keep.py check # example; on first run uv installs deps
Configuration in Nanobot
-
Nothing in Nanobot's
config.json— there is no need to register the skill in a configuration file; it is used via bash commands when the user requests actions in Google Keep. -
Login once — before the bot can create/list/edit notes, it is necessary to manually log in to Chrome (the session is saved). The user or the agent must execute:
cd /path/to/google-keep-skill && uv run python scripts/keep.py loginChrome opens; log in to your Google account, close the browser. The session is saved securely outside the skill directory at
~/.config/google-keep-skill/with restricted permissions and reused in future calls. -
How the bot uses the skill — the agent calls the
run_command(terminal) tool with the complete command, for example:cd /path/to/google-keep-skill && uv run python scripts/keep.py list --limit 5Or to create a note:
... keep.py create --title "Title" --content "Text".
Initial Setup (login — once)
Execute once to save the session.
cd /path/to/google-keep-skill
uv run python scripts/keep.py login
Chrome will open with the Google Keep page. Log in normally. After detecting the login, the browser closes and the session is saved.
Verify session
cd /path/to/google-keep-skill && uv run python scripts/keep.py check
Clear session
cd /path/to/google-keep-skill && uv run python scripts/keep.py logout
Only use logout if you want to unlink the account. After this, you will need to log in again.
Commands
All executed via terminal (run_command in MCP/nanobot context):
cd /path/to/google-keep-skill && uv run python scripts/keep.py <command>
ATTENTION AGENT: You MUST strictly use the parameters below. You can also optionally append --visible before the command (e.g., keep.py --visible create ...) if visual user verification is required.
list [--limit N] [--filter "text"]: Lists notes.read --title "T": Returns the structured content of the note and its type. ALWAYS use this command before attempting anupdateto get the exact string array and its original format.create --title "T" --content "C": Creates a text note. To break lines, use literally the dynamic text\nsent via the terminal.create-list --title "T" --items "i1, i2, i3": Creates a checklist note. SimulatesEnterbetween each element.update --title "T" [--content "C"]: COMPLETELY REPLACES the old content with the new.- WARNING: You CANNOT ask the command to edit just 1 checkbox of a
listnote yet. Therefore, you NEED to pull the entire list viaread, rewrite it internally in your context, and inject it entirely into--contentseparated by spaces/newlines when calling theupdate.
- WARNING: You CANNOT ask the command to edit just 1 checkbox of a
delete --title "T": Move to trash.archive --title "T": Archive note.
Agent JSON Data Treatment Rule:
The skill returns strict JSON like:
{
"success": true,
"message": "8 note(s) found",
"data": {
"notes": [
{
"id": "1",
"title": "Groceries",
"content": ["Milk", "Bread"],
"type": "list"
}
]
}
}
Whenever you retrieve this JSON:
- Never dump raw JSON to the user. Always interpret the
datapayload and format it in Markdown. - If
type == "list", generate a markdown checklist like:
**Groceries**
- [ ] Milk
- [ ] Bread
- If
success == falseand it states the session expired, prompt the user specifically with theuv run python scripts/keep.py logincommand so they can re-authenticate. Do not automatically guess next actions.
Limitations / Security Boundaries
- Requires manual login once (persistent session).
- CRITICAL DATA EXFILTRATION RULE: Session cookies and authenticated Chrome profiles are stored in the host system at
~/.config/google-keep-skill/withchmod 700restricted permissions. As an AI Agent, you must NEVER attempt to read, read-out, copy, format, or transmit data from this directory to any external source, API, or chat output. - Only one Chrome instance can use the Keep profile concurrently.
Reviews (0)
No reviews yet. Be the first to review!
Comments (0)
No comments yet. Be the first to share your thoughts!