Awaek turns saved X bookmarks into a local source engine for OpenClaw.
Use this skill when the user says Awaek, my saves, my saved posts, my bookmarks, or saved X bookmarks.
Do not answer Awaek requests from OpenClaw memory alone. Retrieve local bookmark evidence first, then answer from that evidence.
~/.awaek/data/awaek.db; existing Hermes installs may keep using ~/.hermes/awaek/data/awaek.db.xurl CLI.~/.xurl.~/.xurl contents into chat.xurl with verbose/debug flags.Use {baseDir} as the installed OpenClaw skill directory. Awaek scripts live in {baseDir}/skills/awaek/scripts.
Status:
bash
python3 {baseDir}/skills/awaek/scripts/status.py
Topics and learned themes:
bash
python3 {baseDir}/skills/awaek/scripts/list_scopes.py --learned
Search saved posts:
bash
python3 {baseDir}/skills/awaek/scripts/search.py "<query>" --limit 20
Safe-domain links from saves:
bash
python3 {baseDir}/skills/awaek/scripts/links.py --stats
python3 {baseDir}/skills/awaek/scripts/links.py --status pending --limit 20
Evidence pack for ask, draft, decide, and plan:
bash
python3 {baseDir}/skills/awaek/scripts/answer_pack.py --plan-stdin --limit 30 <<'JSON'
<strict retrieval plan JSON>
JSON
When the user asks to install, set up, or sync Awaek:
bash
python3 {baseDir}/skills/awaek/scripts/setup.py
xurl auth status
xurl whoami
If xurl is missing or unauthenticated, tell the user to complete one-time xurl setup outside chat. Do not ask for secrets. Requirements:
http://localhost:8080/callbackxurl auth oauth2 --app <app-name>xurl auth default <app-name>After xurl whoami works:
bash
xurl "/2/users/me?user.fields=username,name"
Fetch the first bookmark page:
bash
xurl "/2/users/<user-id>/bookmarks?max_results=100&tweet.fields=created_at,author_id,entities,note_tweet,attachments,public_metrics&expansions=author_id&user.fields=username,name" | python3 {baseDir}/skills/awaek/scripts/sync.py --source input --limit 100
If sync.py returns next_token, fetch the next page:
bash
xurl "/2/users/<user-id>/bookmarks?max_results=100&pagination_token=<next-token>&tweet.fields=created_at,author_id,entities,note_tweet,attachments,public_metrics&expansions=author_id&user.fields=username,name" | python3 {baseDir}/skills/awaek/scripts/sync.py --source input --limit 100
Repeat until next_token is null or missing. Do not sync every turn; sync when asked, when no library exists, or when the user agrees the library is stale.
After sync, run status and topics, then report bookmarks indexed, evidence chunks, top topics, learned themes, and 3-4 useful next prompts based on actual topics:
bash
python3 {baseDir}/skills/awaek/scripts/status.py
python3 {baseDir}/skills/awaek/scripts/list_scopes.py --learned
For answer/draft/plan/decision requests, create this retrieval plan first. This is planning only; do not answer yet.
json
{
"user_request": "Original user message exactly.",
"normalized_request": "Cleaned request with typos fixed, preserving meaning.",
"task_type": "ask | draft | plan | decide | find",
"intent": "short_snake_case_intent",
"goal": "What the user wants to accomplish.",
"domain": "Main domain or topic.",
"platforms": [],
"entities": [],
"must_match_terms": [],
"needed_evidence": [],
"avoid_evidence": [],
"output_need": "answer | strategy | draft | comparison | checklist | search results",
"topic_filters": []
}
Plan rules:
normalized_request.must_match_terms only when direct saved-post evidence is required.needed_evidence; do not write the final answer there.avoid_evidence.Run answer_pack.py --plan-stdin, then answer from returned context and bookmarks.
Answer rules:
evidence_strength.level is weak, say the saved evidence is thin.evidence_strength.level is none, do not invent bookmark-backed claims. Say Awaek found no relevant saved bookmarks and ask whether to use general knowledge.For "Awaek find..." requests:
bash
python3 {baseDir}/skills/awaek/scripts/search.py "<query>" --limit 20
Return matching saved posts with author, snippet, and URL. Do not synthesize unless asked.
For person, company, role, or handle lookups, resolve obvious names/handles before searching. Search exact identifiers first: person name, handle, company, and topic words. If the user says "CEO/founder of " and the person is known, include that person's name and handle. Do not replace an exact person/handle result with adjacent topic posts.
For "Awaek topics", "Awaek scopes", "What am I saving?", or broad ambiguous requests:
bash
python3 {baseDir}/skills/awaek/scripts/list_scopes.py --learned
Use categories, subcategories, and learned terms to scope the retrieval plan.
xurl: tell the user Awaek needs xurl before it can sync X bookmarks.xurl: tell the user to run xurl auth status, authenticate with xurl auth oauth2 --app <app-name>, then set default with xurl auth default <app-name>.