Rank
70
AI Agents & MCPs & AI Workflow Automation ⢠(~400 MCP servers for AI agents) ⢠AI Automation / AI Agent with MCPs ⢠AI Workflows & AI Agents ⢠MCPs for AI Agents
Traction
No public download signal
Freshness
Updated 2d ago
Crawler Summary
Remember The Milk integration - Manage tasks, lists, and reminders via the RTM API. Use when: adding tasks, checking todo lists, completing items, setting due dates, or managing RTM tasks. --- name: rtm description: "Remember The Milk integration - Manage tasks, lists, and reminders via the RTM API. Use when: adding tasks, checking todo lists, completing items, setting due dates, or managing RTM tasks." homepage: https://www.rememberthemilk.com/services/api/ metadata: {"clawdbot":{"emoji":"đĽ","requires":{"bins":["jq","curl"],"env":["RTM_API_KEY","RTM_SHARED_SECRET","RTM_AUTH_TOKEN","RTM_USERNAME"]}}} Published capability contract available. No trust telemetry is available yet. Last updated 2/24/2026.
Freshness
Last checked 2/22/2026
Best For
Contract is available with explicit auth and schema references.
Not Ideal For
rtm is not ideal for teams that need stronger public trust telemetry, lower setup complexity, or more explicit contract coverage before production rollout.
Evidence Sources Checked
editorial-content, capability-contract, runtime-metrics, public facts pack
Remember The Milk integration - Manage tasks, lists, and reminders via the RTM API. Use when: adding tasks, checking todo lists, completing items, setting due dates, or managing RTM tasks. --- name: rtm description: "Remember The Milk integration - Manage tasks, lists, and reminders via the RTM API. Use when: adding tasks, checking todo lists, completing items, setting due dates, or managing RTM tasks." homepage: https://www.rememberthemilk.com/services/api/ metadata: {"clawdbot":{"emoji":"đĽ","requires":{"bins":["jq","curl"],"env":["RTM_API_KEY","RTM_SHARED_SECRET","RTM_AUTH_TOKEN","RTM_USERNAME"]}}}
Public facts
5
Change events
0
Artifacts
0
Freshness
Feb 22, 2026
Published capability contract available. No trust telemetry is available yet. Last updated 2/24/2026.
Trust score
Unknown
Compatibility
OpenClaw
Freshness
Feb 22, 2026
Vendor
Rememberthemilk
Artifacts
0
Benchmarks
0
Last release
Unpublished
Key links, install path, and a quick operational read before the deeper crawl record.
Summary
Published capability contract available. No trust telemetry is available yet. Last updated 2/24/2026.
Setup snapshot
git clone https://github.com/tomkenobi/openclaw-rtm.gitSetup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.
Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data.
Everything public we have scraped or crawled about this agent, grouped by evidence type with provenance.
Vendor
Rememberthemilk
Protocol compatibility
OpenClaw
Auth modes
api_key
Machine-readable schemas
OpenAPI or schema references published
Handshake status
UNKNOWN
Merged public release, docs, artifact, benchmark, pricing, and trust refresh events.
Extracted files, examples, snippets, parameters, dependencies, permissions, and artifact metadata.
Extracted files
0
Examples
6
Snippets
0
Languages
typescript
Parameters
bash
RTM_API_KEY=your_api_key RTM_SHARED_SECRET=your_shared_secret RTM_USERNAME=your_rtm_username RTM_AUTH_TOKEN=your_auth_token
bash
# Hilfsfunktion fĂźr RTM API Signatur-Generierung
# Alle Parameter werden alphabetisch sortiert und korrekt signiert
rtm_sign() {
local params=""
local has_auth_token=""
# Sammle alle Parameter (key=value Paare)
while [[ $# -gt 0 ]]; do
local key="$1"
local value="$2"
shift 2
# Speichere ob auth_token vorhanden ist
if [[ "$key" == "auth_token" ]]; then
has_auth_token="$value"
fi
# URL-encode fĂźr Signatur (nur fĂźrs zusammenbauen der Signatur-String)
local encoded_value=$(printf '%s' "$value" | jq -sRr @uri | tr -d '\n')
params="${params}${key}${value}"
done
# Generiere MD5 Signatur
echo -n "${RTM_SHARED_SECRET}${params}" | md5sum | cut -d' ' -f1
}
# Hilfsfunktion fĂźr URL-Encoding
rtm_url_encode() {
printf '%s' "$1" | jq -sRr @uri | tr -d '\n'
}
# Hilfsfunktion fĂźr API FehlerprĂźfung
rtm_check_error() {
local response="$1"
local stat=$(echo "$response" | jq -r '.rsp.stat // "fail"' 2>/dev/null)
if [[ "$stat" != "ok" ]]; then
local err_code=$(echo "$response" | jq -r '.rsp.err.code // "unknown"' 2>/dev/null)
local err_msg=$(echo "$response" | jq -r '.rsp.err.msg // "Unknown error"' 2>/dev/null)
echo "â RTM API Error (Code: $err_code): $err_msg" >&2
return 1
fi
return 0
}bash
rtm_api_url() {
local method="$1"
shift
# Arrays fĂźr Parameter
local sig_params=()
local url_params=()
# Verarbeite alle Parameter als key-value Paare
while [[ $# -gt 0 ]]; do
local key="$1"
local value="$2"
shift 2
sig_params+=("$key" "$value")
local encoded_value=$(rtm_url_encode "$value")
url_params+=("${key}=${encoded_value}")
done
# FĂźge auth_token hinzu wenn vorhanden
if [[ -n "$RTM_AUTH_TOKEN" ]]; then
sig_params+=("auth_token" "$RTM_AUTH_TOKEN")
url_params+=("auth_token=$(rtm_url_encode "$RTM_AUTH_TOKEN")")
fi
# Sortiere Parameter alphabetisch fĂźr Signatur
local sorted_sig=""
local keys=()
local values=()
local i=0
while [[ $i -lt ${#sig_params[@]} ]]; do
keys+=("${sig_params[$i]}")
values+=("${sig_params[$((i+1))]}")
i=$((i+2))
done
# Sortiere nach Keys
local sorted_indices=($(printf '%s\n' "${!keys[@]}" | sort -k1 < <(printf '%s\n' "${keys[@]}") -n))
# Baue sortierten Signatur-String
local sig_string=""
for idx in "${!keys[@]}"; do
sig_string="${sig_string}${keys[$idx]}${values[$idx]}"
done
# Generiere Signatur
local api_sig=$(echo -n "${RTM_SHARED_SECRET}api_key${RTM_API_KEY}formatjsonmethod${method}${sig_string}" | md5sum | cut -d' ' -f1)
# Baue URL
local url="https://api.rememberthemilk.com/services/rest/?method=${method}&api_key=${RTM_API_KEY}&format=json"
for param in "${url_params[@]}"; do
url="${url}&${param}"
done
url="${url}&api_sig=${api_sig}"
echo "$url"
}
# Einfachere Alternative: Manuelle URL-Konstruktion mit rtm_sign
rtm_build_url() {
local method="$1"
local sig_string="$2"
local query_string="$3"
local api_sig=$(echo -n "${RTM_SHARED_SECRET}api_key${RTM_API_KEY}formatjsonmethod${method}${sig_string}auth_token${RTM_AUTH_TOKEN}" | md5sum | cut -d' ' -f1)
echo "https://api.rememberthemilk.com/services/rest/?method=${method}&api_key=${RTM_API_KEY}&format=json&${query_string}&auth_tokbash
# Get tasks from Inbox
TIMELINE=$(curl -s "https://api.rememberthemilk.com/services/rest/?method=rtm.timelines.create&api_key=${RTM_API_KEY}&format=json&auth_token=${RTM_AUTH_TOKEN}&api_sig=$(echo -n "${RTM_SHARED_SECRET}api_key${RTM_API_KEY}auth_token${RTM_AUTH_TOKEN}formatjsonmethodrtm.timelines.create" | md5sum | cut -d' ' -f1)" | jq -r '.rsp.timeline // empty' 2>/dev/null)
if [[ -z "$TIMELINE" ]]; then
echo "â Failed to create timeline"
exit 1
fi
# Get all lists first
LISTS_JSON=$(curl -s "https://api.rememberthemilk.com/services/rest/?method=rtm.lists.getList&api_key=${RTM_API_KEY}&format=json&auth_token=${RTM_AUTH_TOKEN}&api_sig=$(echo -n "${RTM_SHARED_SECRET}api_key${RTM_API_KEY}auth_token${RTM_AUTH_TOKEN}formatjsonmethodrtm.lists.getList" | md5sum | cut -d' ' -f1)")
# PrĂźfe auf Fehler
if ! echo "$LISTS_JSON" | jq -e '.rsp.stat == "ok"' >/dev/null 2>&1; then
echo "$LISTS_JSON" | jq -r '.rsp.err.msg // "Unknown error"' >&2
exit 1
fi
INBOX_ID=$(echo "$LISTS_JSON" | jq -r '.rsp.lists.list[] | select(.name == "Inbox" or .name == "Eingang") | .id' | head -1)
# Get tasks from Inbox
RESPONSE=$(curl -s "https://api.rememberthemilk.com/services/rest/?method=rtm.tasks.getList&api_key=${RTM_API_KEY}&format=json&list_id=${INBOX_ID}&auth_token=${RTM_AUTH_TOKEN}&api_sig=$(echo -n "${RTM_SHARED_SECRET}api_key${RTM_API_KEY}auth_token${RTM_AUTH_TOKEN}formatjsonlist_id${INBOX_ID}methodrtm.tasks.getList" | md5sum | cut -d' ' -f1)")
# Fehlerbehandlung
if ! echo "$RESPONSE" | jq -e '.rsp.stat == "ok"' >/dev/null 2>&1; then
echo "$RESPONSE" | jq -r '.rsp.err.msg // "Unknown error"' >&2
exit 1
fi
# jq-Pfad fĂźr Arrays: Handle sowohl einzelne Objekte als auch Arrays
echo "$RESPONSE" | jq -r '.rsp.tasks.list[]?.taskseries[]? | "\(.name)"' 2>/dev/nullbash
# List all tasks (all lists) - simplest version
RESPONSE=$(curl -s "https://api.rememberthemilk.com/services/rest/?method=rtm.tasks.getList&api_key=${RTM_API_KEY}&format=json&filter=status:incomplete&auth_token=${RTM_AUTH_TOKEN}&api_sig=$(echo -n "${RTM_SHARED_SECRET}api_key${RTM_API_KEY}auth_token${RTM_AUTH_TOKEN}filterstatus:incompleteformatjsonmethodrtm.tasks.getList" | md5sum | cut -d' ' -f1)")
# FehlerprĂźfung
if ! echo "$RESPONSE" | jq -e '.rsp.stat == "ok"' >/dev/null 2>&1; then
echo "â Error: $(echo "$RESPONSE" | jq -r '.rsp.err.msg // "Unknown error"' 2>/dev/null)"
exit 1
fi
# Korrigierter jq-Pfad fĂźr Arrays mit FehlerunterdrĂźckung
echo "$RESPONSE" | jq -r '.rsp.tasks.list | if type == "array" then .[] else [.] end | .taskseries | if type == "array" then .[] else [.] end | .name' 2>/dev/null | head -20bash
# Create timeline first
TIMELINE=$(curl -s "https://api.rememberthemilk.com/services/rest/?method=rtm.timelines.create&api_key=${RTM_API_KEY}&format=json&auth_token=${RTM_AUTH_TOKEN}&api_sig=$(echo -n "${RTM_SHARED_SECRET}api_key${RTM_API_KEY}auth_token${RTM_AUTH_TOKEN}formatjsonmethodrtm.timelines.create" | md5sum | cut -d' ' -f1)")
if ! echo "$TIMELINE" | jq -e '.rsp.stat == "ok"' >/dev/null 2>&1; then
echo "â Failed to create timeline: $(echo "$TIMELINE" | jq -r '.rsp.err.msg // "Unknown error"' 2>/dev/null)"
exit 1
fi
TIMELINE=$(echo "$TIMELINE" | jq -r '.rsp.timeline')
# Add task (ohne Smart Add Syntax!)
TASK_NAME="Buy milk"
ENCODED_NAME=$(printf '%s' "$TASK_NAME" | jq -sRr @uri | tr -d '\n')
# Signatur mit auth_token (immer in Signatur aufnehmen!)
SIG_STRING="api_key${RTM_API_KEY}auth_token${RTM_AUTH_TOKEN}formatjsonmethodrtm.tasks.addname${TASK_NAME}timeline${TIMELINE}"
API_SIG=$(printf '%s' "${RTM_SHARED_SECRET}${SIG_STRING}" | md5sum | cut -d' ' -f1)
RESPONSE=$(curl -s "https://api.rememberthemilk.com/services/rest/?method=rtm.tasks.add&api_key=${RTM_API_KEY}&format=json&timeline=${TIMELINE}&name=${ENCODED_NAME}&auth_token=${RTM_AUTH_TOKEN}&api_sig=${API_SIG}")
# Fehlerbehandlung
if ! echo "$RESPONSE" | jq -e '.rsp.stat == "ok"' >/dev/null 2>&1; then
echo "â Error adding task: $(echo "$RESPONSE" | jq -r '.rsp.err.msg // "Unknown error"' 2>/dev/null)"
exit 1
fi
# Extract IDs mit korrektem jq-Pfad fĂźr Arrays
LIST_ID=$(echo "$RESPONSE" | jq -r '.rsp.list.id // empty' 2>/dev/null)
TASKSERIES_ID=$(echo "$RESPONSE" | jq -r '.rsp.list.taskseries | if type == "array" then .[0] else . end | .id' 2>/dev/null)
TASK_ID=$(echo "$RESPONSE" | jq -r '.rsp.list.taskseries | if type == "array" then .[0] else . end | .task | if type == "array" then .[0] else . end | .id' 2>/dev/null)
echo "Task added: $(echo "$RESPONSE" | jq -r '.rsp.list.taskseries | if type == "array" then .[0] else . end | .name' 2>/dev/null)"
# Add tags separately (RTM API doesn't parse #Full documentation captured from public sources, including the complete README when available.
Docs source
GITHUB OPENCLEW
Editorial quality
ready
Remember The Milk integration - Manage tasks, lists, and reminders via the RTM API. Use when: adding tasks, checking todo lists, completing items, setting due dates, or managing RTM tasks. --- name: rtm description: "Remember The Milk integration - Manage tasks, lists, and reminders via the RTM API. Use when: adding tasks, checking todo lists, completing items, setting due dates, or managing RTM tasks." homepage: https://www.rememberthemilk.com/services/api/ metadata: {"clawdbot":{"emoji":"đĽ","requires":{"bins":["jq","curl"],"env":["RTM_API_KEY","RTM_SHARED_SECRET","RTM_AUTH_TOKEN","RTM_USERNAME"]}}}
Manage your Remember The Milk tasks directly from Clawdbot. Perfect for quick task additions, checking your todo list, and marking items complete.
â ď¸ WICHTIG: Die RTM API parst KEINE Smart Add Syntax (wie
#tag,^date,!priority) in Task-Namen. Du musst separate API-Aufrufe fßr Tags, Due-Dates und Prioritäten verwenden!
~/.openclaw/.env:
RTM_API_KEY=your_api_key
RTM_SHARED_SECRET=your_shared_secret
RTM_USERNAME=your_rtm_username
RTM_AUTH_TOKEN=your_auth_token
# Hilfsfunktion fĂźr RTM API Signatur-Generierung
# Alle Parameter werden alphabetisch sortiert und korrekt signiert
rtm_sign() {
local params=""
local has_auth_token=""
# Sammle alle Parameter (key=value Paare)
while [[ $# -gt 0 ]]; do
local key="$1"
local value="$2"
shift 2
# Speichere ob auth_token vorhanden ist
if [[ "$key" == "auth_token" ]]; then
has_auth_token="$value"
fi
# URL-encode fĂźr Signatur (nur fĂźrs zusammenbauen der Signatur-String)
local encoded_value=$(printf '%s' "$value" | jq -sRr @uri | tr -d '\n')
params="${params}${key}${value}"
done
# Generiere MD5 Signatur
echo -n "${RTM_SHARED_SECRET}${params}" | md5sum | cut -d' ' -f1
}
# Hilfsfunktion fĂźr URL-Encoding
rtm_url_encode() {
printf '%s' "$1" | jq -sRr @uri | tr -d '\n'
}
# Hilfsfunktion fĂźr API FehlerprĂźfung
rtm_check_error() {
local response="$1"
local stat=$(echo "$response" | jq -r '.rsp.stat // "fail"' 2>/dev/null)
if [[ "$stat" != "ok" ]]; then
local err_code=$(echo "$response" | jq -r '.rsp.err.code // "unknown"' 2>/dev/null)
local err_msg=$(echo "$response" | jq -r '.rsp.err.msg // "Unknown error"' 2>/dev/null)
echo "â RTM API Error (Code: $err_code): $err_msg" >&2
return 1
fi
return 0
}
rtm_api_url() {
local method="$1"
shift
# Arrays fĂźr Parameter
local sig_params=()
local url_params=()
# Verarbeite alle Parameter als key-value Paare
while [[ $# -gt 0 ]]; do
local key="$1"
local value="$2"
shift 2
sig_params+=("$key" "$value")
local encoded_value=$(rtm_url_encode "$value")
url_params+=("${key}=${encoded_value}")
done
# FĂźge auth_token hinzu wenn vorhanden
if [[ -n "$RTM_AUTH_TOKEN" ]]; then
sig_params+=("auth_token" "$RTM_AUTH_TOKEN")
url_params+=("auth_token=$(rtm_url_encode "$RTM_AUTH_TOKEN")")
fi
# Sortiere Parameter alphabetisch fĂźr Signatur
local sorted_sig=""
local keys=()
local values=()
local i=0
while [[ $i -lt ${#sig_params[@]} ]]; do
keys+=("${sig_params[$i]}")
values+=("${sig_params[$((i+1))]}")
i=$((i+2))
done
# Sortiere nach Keys
local sorted_indices=($(printf '%s\n' "${!keys[@]}" | sort -k1 < <(printf '%s\n' "${keys[@]}") -n))
# Baue sortierten Signatur-String
local sig_string=""
for idx in "${!keys[@]}"; do
sig_string="${sig_string}${keys[$idx]}${values[$idx]}"
done
# Generiere Signatur
local api_sig=$(echo -n "${RTM_SHARED_SECRET}api_key${RTM_API_KEY}formatjsonmethod${method}${sig_string}" | md5sum | cut -d' ' -f1)
# Baue URL
local url="https://api.rememberthemilk.com/services/rest/?method=${method}&api_key=${RTM_API_KEY}&format=json"
for param in "${url_params[@]}"; do
url="${url}&${param}"
done
url="${url}&api_sig=${api_sig}"
echo "$url"
}
# Einfachere Alternative: Manuelle URL-Konstruktion mit rtm_sign
rtm_build_url() {
local method="$1"
local sig_string="$2"
local query_string="$3"
local api_sig=$(echo -n "${RTM_SHARED_SECRET}api_key${RTM_API_KEY}formatjsonmethod${method}${sig_string}auth_token${RTM_AUTH_TOKEN}" | md5sum | cut -d' ' -f1)
echo "https://api.rememberthemilk.com/services/rest/?method=${method}&api_key=${RTM_API_KEY}&format=json&${query_string}&auth_token=${RTM_AUTH_TOKEN}&api_sig=${api_sig}"
}
# Get tasks from Inbox
TIMELINE=$(curl -s "https://api.rememberthemilk.com/services/rest/?method=rtm.timelines.create&api_key=${RTM_API_KEY}&format=json&auth_token=${RTM_AUTH_TOKEN}&api_sig=$(echo -n "${RTM_SHARED_SECRET}api_key${RTM_API_KEY}auth_token${RTM_AUTH_TOKEN}formatjsonmethodrtm.timelines.create" | md5sum | cut -d' ' -f1)" | jq -r '.rsp.timeline // empty' 2>/dev/null)
if [[ -z "$TIMELINE" ]]; then
echo "â Failed to create timeline"
exit 1
fi
# Get all lists first
LISTS_JSON=$(curl -s "https://api.rememberthemilk.com/services/rest/?method=rtm.lists.getList&api_key=${RTM_API_KEY}&format=json&auth_token=${RTM_AUTH_TOKEN}&api_sig=$(echo -n "${RTM_SHARED_SECRET}api_key${RTM_API_KEY}auth_token${RTM_AUTH_TOKEN}formatjsonmethodrtm.lists.getList" | md5sum | cut -d' ' -f1)")
# PrĂźfe auf Fehler
if ! echo "$LISTS_JSON" | jq -e '.rsp.stat == "ok"' >/dev/null 2>&1; then
echo "$LISTS_JSON" | jq -r '.rsp.err.msg // "Unknown error"' >&2
exit 1
fi
INBOX_ID=$(echo "$LISTS_JSON" | jq -r '.rsp.lists.list[] | select(.name == "Inbox" or .name == "Eingang") | .id' | head -1)
# Get tasks from Inbox
RESPONSE=$(curl -s "https://api.rememberthemilk.com/services/rest/?method=rtm.tasks.getList&api_key=${RTM_API_KEY}&format=json&list_id=${INBOX_ID}&auth_token=${RTM_AUTH_TOKEN}&api_sig=$(echo -n "${RTM_SHARED_SECRET}api_key${RTM_API_KEY}auth_token${RTM_AUTH_TOKEN}formatjsonlist_id${INBOX_ID}methodrtm.tasks.getList" | md5sum | cut -d' ' -f1)")
# Fehlerbehandlung
if ! echo "$RESPONSE" | jq -e '.rsp.stat == "ok"' >/dev/null 2>&1; then
echo "$RESPONSE" | jq -r '.rsp.err.msg // "Unknown error"' >&2
exit 1
fi
# jq-Pfad fĂźr Arrays: Handle sowohl einzelne Objekte als auch Arrays
echo "$RESPONSE" | jq -r '.rsp.tasks.list[]?.taskseries[]? | "\(.name)"' 2>/dev/null
# List all tasks (all lists) - simplest version
RESPONSE=$(curl -s "https://api.rememberthemilk.com/services/rest/?method=rtm.tasks.getList&api_key=${RTM_API_KEY}&format=json&filter=status:incomplete&auth_token=${RTM_AUTH_TOKEN}&api_sig=$(echo -n "${RTM_SHARED_SECRET}api_key${RTM_API_KEY}auth_token${RTM_AUTH_TOKEN}filterstatus:incompleteformatjsonmethodrtm.tasks.getList" | md5sum | cut -d' ' -f1)")
# FehlerprĂźfung
if ! echo "$RESPONSE" | jq -e '.rsp.stat == "ok"' >/dev/null 2>&1; then
echo "â Error: $(echo "$RESPONSE" | jq -r '.rsp.err.msg // "Unknown error"' 2>/dev/null)"
exit 1
fi
# Korrigierter jq-Pfad fĂźr Arrays mit FehlerunterdrĂźckung
echo "$RESPONSE" | jq -r '.rsp.tasks.list | if type == "array" then .[] else [.] end | .taskseries | if type == "array" then .[] else [.] end | .name' 2>/dev/null | head -20
# Create timeline first
TIMELINE=$(curl -s "https://api.rememberthemilk.com/services/rest/?method=rtm.timelines.create&api_key=${RTM_API_KEY}&format=json&auth_token=${RTM_AUTH_TOKEN}&api_sig=$(echo -n "${RTM_SHARED_SECRET}api_key${RTM_API_KEY}auth_token${RTM_AUTH_TOKEN}formatjsonmethodrtm.timelines.create" | md5sum | cut -d' ' -f1)")
if ! echo "$TIMELINE" | jq -e '.rsp.stat == "ok"' >/dev/null 2>&1; then
echo "â Failed to create timeline: $(echo "$TIMELINE" | jq -r '.rsp.err.msg // "Unknown error"' 2>/dev/null)"
exit 1
fi
TIMELINE=$(echo "$TIMELINE" | jq -r '.rsp.timeline')
# Add task (ohne Smart Add Syntax!)
TASK_NAME="Buy milk"
ENCODED_NAME=$(printf '%s' "$TASK_NAME" | jq -sRr @uri | tr -d '\n')
# Signatur mit auth_token (immer in Signatur aufnehmen!)
SIG_STRING="api_key${RTM_API_KEY}auth_token${RTM_AUTH_TOKEN}formatjsonmethodrtm.tasks.addname${TASK_NAME}timeline${TIMELINE}"
API_SIG=$(printf '%s' "${RTM_SHARED_SECRET}${SIG_STRING}" | md5sum | cut -d' ' -f1)
RESPONSE=$(curl -s "https://api.rememberthemilk.com/services/rest/?method=rtm.tasks.add&api_key=${RTM_API_KEY}&format=json&timeline=${TIMELINE}&name=${ENCODED_NAME}&auth_token=${RTM_AUTH_TOKEN}&api_sig=${API_SIG}")
# Fehlerbehandlung
if ! echo "$RESPONSE" | jq -e '.rsp.stat == "ok"' >/dev/null 2>&1; then
echo "â Error adding task: $(echo "$RESPONSE" | jq -r '.rsp.err.msg // "Unknown error"' 2>/dev/null)"
exit 1
fi
# Extract IDs mit korrektem jq-Pfad fĂźr Arrays
LIST_ID=$(echo "$RESPONSE" | jq -r '.rsp.list.id // empty' 2>/dev/null)
TASKSERIES_ID=$(echo "$RESPONSE" | jq -r '.rsp.list.taskseries | if type == "array" then .[0] else . end | .id' 2>/dev/null)
TASK_ID=$(echo "$RESPONSE" | jq -r '.rsp.list.taskseries | if type == "array" then .[0] else . end | .task | if type == "array" then .[0] else . end | .id' 2>/dev/null)
echo "Task added: $(echo "$RESPONSE" | jq -r '.rsp.list.taskseries | if type == "array" then .[0] else . end | .name' 2>/dev/null)"
# Add tags separately (RTM API doesn't parse #tags in task name)
TAGS="shopping,urgent"
SIG_STRING="api_key${RTM_API_KEY}auth_token${RTM_AUTH_TOKEN}formatjsonlist_id${LIST_ID}methodrtm.tasks.addTagstags${TAGS}task_id${TASK_ID}taskseries_id${TASKSERIES_ID}timeline${TIMELINE}"
API_SIG=$(printf '%s' "${RTM_SHARED_SECRET}${SIG_STRING}" | md5sum | cut -d' ' -f1)
TAG_RESPONSE=$(curl -s "https://api.rememberthemilk.com/services/rest/?method=rtm.tasks.addTags&api_key=${RTM_API_KEY}&format=json&timeline=${TIMELINE}&list_id=${LIST_ID}&taskseries_id=${TASKSERIES_ID}&task_id=${TASK_ID}&tags=${TAGS}&auth_token=${RTM_AUTH_TOKEN}&api_sig=${API_SIG}")
if echo "$TAG_RESPONSE" | jq -e '.rsp.stat == "ok"' >/dev/null 2>&1; then
echo "Tags added: $TAGS"
else
echo "â ď¸ Failed to add tags: $(echo "$TAG_RESPONSE" | jq -r '.rsp.err.msg // "Unknown error"' 2>/dev/null)"
fi
# First find the task ID (requires list_id, taskseries_id, task_id)
SEARCH_TERM="milk"
SEARCH_RESULT=$(curl -s "https://api.rememberthemilk.com/services/rest/?method=rtm.tasks.getList&api_key=${RTM_API_KEY}&format=json&filter=name:${SEARCH_TERM}&auth_token=${RTM_AUTH_TOKEN}&api_sig=$(echo -n "${RTM_SHARED_SECRET}api_key${RTM_API_KEY}auth_token${RTM_AUTH_TOKEN}filtername:${SEARCH_TERM}formatjsonmethodrtm.tasks.getList" | md5sum | cut -d' ' -f1)")
# FehlerprĂźfung
if ! echo "$SEARCH_RESULT" | jq -e '.rsp.stat == "ok"' >/dev/null 2>&1; then
echo "â Search failed: $(echo "$SEARCH_RESULT" | jq -r '.rsp.err.msg // "Unknown error"' 2>/dev/null)"
exit 1
fi
# Extract IDs mit robustem jq-Pfad
LIST_ID=$(echo "$SEARCH_RESULT" | jq -r '.rsp.tasks.list | if type == "array" then .[0] else . end | .id' 2>/dev/null)
TASKSERIES_ID=$(echo "$SEARCH_RESULT" | jq -r '.rsp.tasks.list | if type == "array" then .[0] else . end | .taskseries | if type == "array" then .[0] else . end | .id' 2>/dev/null)
TASK_ID=$(echo "$SEARCH_RESULT" | jq -r '.rsp.tasks.list | if type == "array" then .[0] else . end | .taskseries | if type == "array" then .[0] else . end | .task | if type == "array" then .[0] else . end | .id' 2>/dev/null)
# Complete it
TIMELINE=$(curl -s "https://api.rememberthemilk.com/services/rest/?method=rtm.timelines.create&api_key=${RTM_API_KEY}&format=json&auth_token=${RTM_AUTH_TOKEN}&api_sig=$(echo -n "${RTM_SHARED_SECRET}api_key${RTM_API_KEY}auth_token${RTM_AUTH_TOKEN}formatjsonmethodrtm.timelines.create" | md5sum | cut -d' ' -f1)" | jq -r '.rsp.timeline' 2>/dev/null)
SIG_STRING="api_key${RTM_API_KEY}auth_token${RTM_AUTH_TOKEN}formatjsonlist_id${LIST_ID}methodrtm.tasks.completetask_id${TASK_ID}taskseries_id${TASKSERIES_ID}timeline${TIMELINE}"
API_SIG=$(printf '%s' "${RTM_SHARED_SECRET}${SIG_STRING}" | md5sum | cut -d' ' -f1)
COMPLETION_RESULT=$(curl -s "https://api.rememberthemilk.com/services/rest/?method=rtm.tasks.complete&api_key=${RTM_API_KEY}&format=json&timeline=${TIMELINE}&list_id=${LIST_ID}&taskseries_id=${TASKSERIES_ID}&task_id=${TASK_ID}&auth_token=${RTM_AUTH_TOKEN}&api_sig=${API_SIG}")
if echo "$COMPLETION_RESULT" | jq -e '.rsp.stat == "ok"' >/dev/null 2>&1; then
echo "â
Task completed successfully"
else
echo "â Failed to complete task: $(echo "$COMPLETION_RESULT" | jq -r '.rsp.err.msg // "Unknown error"' 2>/dev/null)"
fi
# Set due date for a task
DUE_DATE="2026-02-20"
TIMELINE=$(curl -s "https://api.rememberthemilk.com/services/rest/?method=rtm.timelines.create&api_key=${RTM_API_KEY}&format=json&auth_token=${RTM_AUTH_TOKEN}&api_sig=$(echo -n "${RTM_SHARED_SECRET}api_key${RTM_API_KEY}auth_token${RTM_AUTH_TOKEN}formatjsonmethodrtm.timelines.create" | md5sum | cut -d' ' -f1)" | jq -r '.rsp.timeline' 2>/dev/null)
SIG_STRING="api_key${RTM_API_KEY}auth_token${RTM_AUTH_TOKEN}due${DUE_DATE}formatjsonlist_id${LIST_ID}methodrtm.tasks.setDueDatetask_id${TASK_ID}taskseries_id${TASKSERIES_ID}timeline${TIMELINE}"
API_SIG=$(printf '%s' "${RTM_SHARED_SECRET}${SIG_STRING}" | md5sum | cut -d' ' -f1)
RESULT=$(curl -s "https://api.rememberthemilk.com/services/rest/?method=rtm.tasks.setDueDate&api_key=${RTM_API_KEY}&format=json&timeline=${TIMELINE}&list_id=${LIST_ID}&taskseries_id=${TASKSERIES_ID}&task_id=${TASK_ID}&due=${DUE_DATE}&auth_token=${RTM_AUTH_TOKEN}&api_sig=${API_SIG}")
if echo "$RESULT" | jq -e '.rsp.stat == "ok"' >/dev/null 2>&1; then
echo "â
Due date set to $DUE_DATE"
else
echo "â Error: $(echo "$RESULT" | jq -r '.rsp.err.msg // "Unknown error"' 2>/dev/null)"
fi
RESPONSE=$(curl -s "https://api.rememberthemilk.com/services/rest/?method=rtm.tasks.getList&api_key=${RTM_API_KEY}&format=json&filter=due:today&auth_token=${RTM_AUTH_TOKEN}&api_sig=$(echo -n "${RTM_SHARED_SECRET}api_key${RTM_API_KEY}auth_token${RTM_AUTH_TOKEN}filterdue:todayformatjsonmethodrtm.tasks.getList" | md5sum | cut -d' ' -f1)")
if echo "$RESPONSE" | jq -e '.rsp.stat == "ok"' >/dev/null 2>&1; then
echo "$RESPONSE" | jq -r '.rsp.tasks.list | if type == "array" then .[] else [.] end | .taskseries | if type == "array" then .[] else [.] end | .name' 2>/dev/null
else
echo "â Error: $(echo "$RESPONSE" | jq -r '.rsp.err.msg // "Unknown error"' 2>/dev/null)"
fi
RESPONSE=$(curl -s "https://api.rememberthemilk.com/services/rest/?method=rtm.tasks.getList&api_key=${RTM_API_KEY}&format=json&filter=dueBefore:today&auth_token=${RTM_AUTH_TOKEN}&api_sig=$(echo -n "${RTM_SHARED_SECRET}api_key${RTM_API_KEY}auth_token${RTM_AUTH_TOKEN}filterdueBefore:todayformatjsonmethodrtm.tasks.getList" | md5sum | cut -d' ' -f1)")
if echo "$RESPONSE" | jq -e '.rsp.stat == "ok"' >/dev/null 2>&1; then
echo "$RESPONSE" | jq -r '.rsp.tasks.list | if type == "array" then .[] else [.] end | .taskseries | if type == "array" then .[] else [.] end | .name' 2>/dev/null
else
echo "â Error: $(echo "$RESPONSE" | jq -r '.rsp.err.msg // "Unknown error"' 2>/dev/null)"
fi
RESPONSE=$(curl -s "https://api.rememberthemilk.com/services/rest/?method=rtm.tasks.getList&api_key=${RTM_API_KEY}&format=json&filter=tag:shopping&auth_token=${RTM_AUTH_TOKEN}&api_sig=$(echo -n "${RTM_SHARED_SECRET}api_key${RTM_API_KEY}auth_token${RTM_AUTH_TOKEN}filtertag:shoppingformatjsonmethodrtm.tasks.getList" | md5sum | cut -d' ' -f1)")
if echo "$RESPONSE" | jq -e '.rsp.stat == "ok"' >/dev/null 2>&1; then
echo "$RESPONSE" | jq -r '.rsp.tasks.list | if type == "array" then .[] else [.] end | .taskseries | if type == "array" then .[] else [.] end | .name' 2>/dev/null
else
echo "â Error: $(echo "$RESPONSE" | jq -r '.rsp.err.msg // "Unknown error"' 2>/dev/null)"
fi
#tag oder ^date) in Task-Namen. Du musst separate API-Aufrufe fĂźr:
rtm.tasks.addTags nach Task-Erstellungrtm.tasks.setDueDatertm.tasks.setPriorityTIMELINE=$(curl -s "https://api.rememberthemilk.com/services/rest/?method=rtm.timelines.create&api_key=${RTM_API_KEY}&format=json&auth_token=${RTM_AUTH_TOKEN}&api_sig=$(echo -n "${RTM_SHARED_SECRET}api_key${RTM_API_KEY}auth_token${RTM_AUTH_TOKEN}formatjsonmethodrtm.timelines.create" | md5sum | cut -d' ' -f1)" | jq -r '.rsp.timeline' 2>/dev/null)
LIST_NAME="Sharky"
SIG_STRING="api_key${RTM_API_KEY}auth_token${RTM_AUTH_TOKEN}formatjsonmethodrtm.lists.addname${LIST_NAME}timeline${TIMELINE}"
API_SIG=$(printf '%s' "${RTM_SHARED_SECRET}${SIG_STRING}" | md5sum | cut -d' ' -f1)
RESPONSE=$(curl -s "https://api.rememberthemilk.com/services/rest/?method=rtm.lists.add&api_key=${RTM_API_KEY}&format=json&timeline=${TIMELINE}&name=${LIST_NAME}&auth_token=${RTM_AUTH_TOKEN}&api_sig=${API_SIG}")
if echo "$RESPONSE" | jq -e '.rsp.stat == "ok"' >/dev/null 2>&1; then
echo "$RESPONSE" | jq -r '.rsp.list | "List created: \(.name) (ID: \(.id))"' 2>/dev/null
else
echo "â Error: $(echo "$RESPONSE" | jq -r '.rsp.err.msg // "Unknown error"' 2>/dev/null)"
fi
TIMELINE=$(curl -s "https://api.rememberthemilk.com/services/rest/?method=rtm.timelines.create&api_key=${RTM_API_KEY}&format=json&auth_token=${RTM_AUTH_TOKEN}&api_sig=$(echo -n "${RTM_SHARED_SECRET}api_key${RTM_API_KEY}auth_token${RTM_AUTH_TOKEN}formatjsonmethodrtm.timelines.create" | md5sum | cut -d' ' -f1)" | jq -r '.rsp.timeline' 2>/dev/null)
# Source and target list IDs
FROM_LIST_ID="17527533" # Inbox
TO_LIST_ID="51478692" # Sharky
# Task IDs
TASKSERIES_ID="601067674"
TASK_ID="1186296255"
SIG_STRING="api_key${RTM_API_KEY}auth_token${RTM_AUTH_TOKEN}formatjsonfrom_list_id${FROM_LIST_ID}methodrtm.tasks.moveTotask_id${TASK_ID}taskseries_id${TASKSERIES_ID}timeline${TIMELINE}to_list_id${TO_LIST_ID}"
API_SIG=$(printf '%s' "${RTM_SHARED_SECRET}${SIG_STRING}" | md5sum | cut -d' ' -f1)
RESPONSE=$(curl -s "https://api.rememberthemilk.com/services/rest/?method=rtm.tasks.moveTo&api_key=${RTM_API_KEY}&format=json&timeline=${TIMELINE}&from_list_id=${FROM_LIST_ID}&to_list_id=${TO_LIST_ID}&taskseries_id=${TASKSERIES_ID}&task_id=${TASK_ID}&auth_token=${RTM_AUTH_TOKEN}&api_sig=${API_SIG}")
if echo "$RESPONSE" | jq -e '.rsp.stat == "ok"' >/dev/null 2>&1; then
echo "â
Task moved successfully"
else
echo "â Error: $(echo "$RESPONSE" | jq -r '.rsp.err.msg // "Unknown error"' 2>/dev/null)"
fi
RESPONSE=$(curl -s "https://api.rememberthemilk.com/services/rest/?method=rtm.lists.getList&api_key=${RTM_API_KEY}&format=json&auth_token=${RTM_AUTH_TOKEN}&api_sig=$(echo -n "${RTM_SHARED_SECRET}api_key${RTM_API_KEY}auth_token${RTM_AUTH_TOKEN}formatjsonmethodrtm.lists.getList" | md5sum | cut -d' ' -f1)")
if echo "$RESPONSE" | jq -e '.rsp.stat == "ok"' >/dev/null 2>&1; then
echo "$RESPONSE" | jq -r '.rsp.lists.list | if type == "array" then .[] else [.] end | "\(.name) (ID: \(.id))"' 2>/dev/null
else
echo "â Error: $(echo "$RESPONSE" | jq -r '.rsp.err.msg // "Unknown error"' 2>/dev/null)"
fi
#!/bin/bash
# rtm_add_task.sh - Add task with tags
export RTM_API_KEY="$RTM_API_KEY"
export RTM_SHARED_SECRET="$RTM_SHARED_SECRET"
export RTM_AUTH_TOKEN="$RTM_AUTH_TOKEN"
TASK_NAME="$1"
TAGS="$2" # Comma-separated, e.g., "shopping,urgent"
# Create timeline
TIMELINE=$(curl -s "https://api.rememberthemilk.com/services/rest/?method=rtm.timelines.create&api_key=${RTM_API_KEY}&format=json&auth_token=${RTM_AUTH_TOKEN}&api_sig=$(echo -n "${RTM_SHARED_SECRET}api_key${RTM_API_KEY}auth_token${RTM_AUTH_TOKEN}formatjsonmethodrtm.timelines.create" | md5sum | cut -d' ' -f1)")
if ! echo "$TIMELINE" | jq -e '.rsp.stat == "ok"' >/dev/null 2>&1; then
echo "â Failed to create timeline: $(echo "$TIMELINE" | jq -r '.rsp.err.msg // "Unknown error"' 2>/dev/null)"
exit 1
fi
TIMELINE=$(echo "$TIMELINE" | jq -r '.rsp.timeline')
# Add task
ENCODED_NAME=$(printf '%s' "$TASK_NAME" | jq -sRr @uri | tr -d '\n')
SIG_STRING="api_key${RTM_API_KEY}auth_token${RTM_AUTH_TOKEN}formatjsonmethodrtm.tasks.addname${TASK_NAME}timeline${TIMELINE}"
API_SIG=$(printf '%s' "${RTM_SHARED_SECRET}${SIG_STRING}" | md5sum | cut -d' ' -f1)
RESPONSE=$(curl -s "https://api.rememberthemilk.com/services/rest/?method=rtm.tasks.add&api_key=${RTM_API_KEY}&format=json&timeline=${TIMELINE}&name=${ENCODED_NAME}&auth_token=${RTM_AUTH_TOKEN}&api_sig=${API_SIG}")
if ! echo "$RESPONSE" | jq -e '.rsp.stat == "ok"' >/dev/null 2>&1; then
echo "â Error adding task: $(echo "$RESPONSE" | jq -r '.rsp.err.msg // "Unknown error"' 2>/dev/null)"
exit 1
fi
LIST_ID=$(echo "$RESPONSE" | jq -r '.rsp.list.id // empty' 2>/dev/null)
TASKSERIES_ID=$(echo "$RESPONSE" | jq -r '.rsp.list.taskseries | if type == "array" then .[0] else . end | .id' 2>/dev/null)
TASK_ID=$(echo "$RESPONSE" | jq -r '.rsp.list.taskseries | if type == "array" then .[0] else . end | .task | if type == "array" then .[0] else . end | .id' 2>/dev/null)
echo "â
Task added: $(echo "$RESPONSE" | jq -r '.rsp.list.taskseries | if type == "array" then .[0] else . end | .name' 2>/dev/null)"
# Add tags if provided
if [ -n "$TAGS" ]; then
SIG_STRING="api_key${RTM_API_KEY}auth_token${RTM_AUTH_TOKEN}formatjsonlist_id${LIST_ID}methodrtm.tasks.addTagstags${TAGS}task_id${TASK_ID}taskseries_id${TASKSERIES_ID}timeline${TIMELINE}"
API_SIG=$(printf '%s' "${RTM_SHARED_SECRET}${SIG_STRING}" | md5sum | cut -d' ' -f1)
TAG_RESPONSE=$(curl -s "https://api.rememberthemilk.com/services/rest/?method=rtm.tasks.addTags&api_key=${RTM_API_KEY}&format=json&timeline=${TIMELINE}&list_id=${LIST_ID}&taskseries_id=${TASKSERIES_ID}&task_id=${TASK_ID}&tags=${TAGS}&auth_token=${RTM_AUTH_TOKEN}&api_sig=${API_SIG}")
if echo "$TAG_RESPONSE" | jq -e '.rsp.stat == "ok"' >/dev/null 2>&1; then
echo "đˇď¸ Tags added: $TAGS"
else
echo "â ď¸ Failed to add tags: $(echo "$TAG_RESPONSE" | jq -r '.rsp.err.msg // "Unknown error"' 2>/dev/null)"
fi
fi
Usage: ./rtm_add_task.sh "Buy milk" "shopping,urgent"
Machine endpoints, protocol fit, contract coverage, invocation examples, and guardrails for agent-to-agent use.
Contract coverage
Status
ready
Auth
api_key
Streaming
No
Data region
global
Protocol support
Requires: openclew, lang:typescript
Forbidden: none
Guardrails
Operational confidence: medium
curl -s "https://xpersona.co/api/v1/agents/tomkenobi-openclaw-rtm/snapshot"
curl -s "https://xpersona.co/api/v1/agents/tomkenobi-openclaw-rtm/contract"
curl -s "https://xpersona.co/api/v1/agents/tomkenobi-openclaw-rtm/trust"
Trust and runtime signals, benchmark suites, failure patterns, and practical risk constraints.
Trust signals
Handshake
UNKNOWN
Confidence
unknown
Attempts 30d
unknown
Fallback rate
unknown
Runtime metrics
Observed P50
unknown
Observed P95
unknown
Rate limit
unknown
Estimated cost
unknown
Every public screenshot, visual asset, demo link, and owner-provided destination tied to this agent.
Neighboring agents from the same protocol and source ecosystem for comparison and shortlist building.
Rank
70
AI Agents & MCPs & AI Workflow Automation ⢠(~400 MCP servers for AI agents) ⢠AI Automation / AI Agent with MCPs ⢠AI Workflows & AI Agents ⢠MCPs for AI Agents
Traction
No public download signal
Freshness
Updated 2d ago
Rank
70
AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs
Traction
No public download signal
Freshness
Updated 5d ago
Rank
70
Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | đ Star if you like it!
Traction
No public download signal
Freshness
Updated 6d ago
Rank
70
The Frontend for Agents & Generative UI. React + Angular
Traction
No public download signal
Freshness
Updated 23d ago
Contract JSON
{
"contractStatus": "ready",
"authModes": [
"api_key"
],
"requires": [
"openclew",
"lang:typescript"
],
"forbidden": [],
"supportsMcp": false,
"supportsA2a": false,
"supportsStreaming": false,
"inputSchemaRef": "https://github.com/tomkenobi/openclaw-rtm#input",
"outputSchemaRef": "https://github.com/tomkenobi/openclaw-rtm#output",
"dataRegion": "global",
"contractUpdatedAt": "2026-02-24T19:44:28.969Z",
"sourceUpdatedAt": "2026-02-24T19:44:28.969Z",
"freshnessSeconds": 4428649
}Invocation Guide
{
"preferredApi": {
"snapshotUrl": "https://xpersona.co/api/v1/agents/tomkenobi-openclaw-rtm/snapshot",
"contractUrl": "https://xpersona.co/api/v1/agents/tomkenobi-openclaw-rtm/contract",
"trustUrl": "https://xpersona.co/api/v1/agents/tomkenobi-openclaw-rtm/trust"
},
"curlExamples": [
"curl -s \"https://xpersona.co/api/v1/agents/tomkenobi-openclaw-rtm/snapshot\"",
"curl -s \"https://xpersona.co/api/v1/agents/tomkenobi-openclaw-rtm/contract\"",
"curl -s \"https://xpersona.co/api/v1/agents/tomkenobi-openclaw-rtm/trust\""
],
"jsonRequestTemplate": {
"query": "summarize this repo",
"constraints": {
"maxLatencyMs": 2000,
"protocolPreference": [
"OPENCLEW"
]
}
},
"jsonResponseTemplate": {
"ok": true,
"result": {
"summary": "...",
"confidence": 0.9
},
"meta": {
"source": "GITHUB_OPENCLEW",
"generatedAt": "2026-04-17T01:55:18.759Z"
}
},
"retryPolicy": {
"maxAttempts": 3,
"backoffMs": [
500,
1500,
3500
],
"retryableConditions": [
"HTTP_429",
"HTTP_503",
"NETWORK_TIMEOUT"
]
}
}Trust JSON
{
"status": "unavailable",
"handshakeStatus": "UNKNOWN",
"verificationFreshnessHours": null,
"reputationScore": null,
"p95LatencyMs": null,
"successRate30d": null,
"fallbackRate": null,
"attempts30d": null,
"trustUpdatedAt": null,
"trustConfidence": "unknown",
"sourceUpdatedAt": null,
"freshnessSeconds": null
}Capability Matrix
{
"rows": [
{
"key": "OPENCLEW",
"type": "protocol",
"support": "unknown",
"confidenceSource": "profile",
"notes": "Listed on profile"
}
],
"flattenedTokens": "protocol:OPENCLEW|unknown|profile"
}Facts JSON
[
{
"factKey": "protocols",
"category": "compatibility",
"label": "Protocol compatibility",
"value": "OpenClaw",
"href": "https://xpersona.co/api/v1/agents/tomkenobi-openclaw-rtm/contract",
"sourceUrl": "https://xpersona.co/api/v1/agents/tomkenobi-openclaw-rtm/contract",
"sourceType": "contract",
"confidence": "medium",
"observedAt": "2026-02-24T19:44:28.969Z",
"isPublic": true
},
{
"factKey": "auth_modes",
"category": "compatibility",
"label": "Auth modes",
"value": "api_key",
"href": "https://xpersona.co/api/v1/agents/tomkenobi-openclaw-rtm/contract",
"sourceUrl": "https://xpersona.co/api/v1/agents/tomkenobi-openclaw-rtm/contract",
"sourceType": "contract",
"confidence": "high",
"observedAt": "2026-02-24T19:44:28.969Z",
"isPublic": true
},
{
"factKey": "schema_refs",
"category": "artifact",
"label": "Machine-readable schemas",
"value": "OpenAPI or schema references published",
"href": "https://github.com/tomkenobi/openclaw-rtm#input",
"sourceUrl": "https://xpersona.co/api/v1/agents/tomkenobi-openclaw-rtm/contract",
"sourceType": "contract",
"confidence": "high",
"observedAt": "2026-02-24T19:44:28.969Z",
"isPublic": true
},
{
"factKey": "vendor",
"category": "vendor",
"label": "Vendor",
"value": "Rememberthemilk",
"href": "https://www.rememberthemilk.com/services/api/",
"sourceUrl": "https://www.rememberthemilk.com/services/api/",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-02-24T19:43:14.176Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://xpersona.co/api/v1/agents/tomkenobi-openclaw-rtm/trust",
"sourceUrl": "https://xpersona.co/api/v1/agents/tomkenobi-openclaw-rtm/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true
}
]Change Events JSON
[]
Sponsored
Ads related to rtm and adjacent AI workflows.