Recite

ReviewAudited by ClawScan on May 10, 2026.

Overview

Recite mostly matches its receipt-bookkeeping purpose, but it uploads financial documents to an external API while using misleading local-only wording and has unsafe filename handling.

Install only if you trust recite.rivra.dev with your receipt and invoice contents. Run it on a copy or backup of receipt folders until the filename sanitization is fixed, review long_term_memory.md before use, and protect the Recite API key.

Findings (5)

Artifact-based informational review of SKILL.md, metadata, install specs, static scan signals, and capability signals. ClawScan does not execute the skill or run runtime probes.

What this means

A malformed or manipulated extracted date could cause a receipt to be moved or misplaced outside the folder the user intended to process.

Why it was flagged

The destination path uses the API-extracted date without sanitizing path separators, absolute paths, or checking that the final path remains inside the target directory.

Skill content
date = row_data.get('date', 'UnknownDate')
vendor = str(row_data.get('vendor', 'UnknownVendor')).replace('/', '-').replace('\\', '-')
new_name = f"{date}_{vendor}{ext}"
new_path = os.path.join(target_dir, new_name)
...
os.rename(file_path, new_path)
Recommendation

Sanitize every filename component, reject slashes and absolute paths, normalize the destination path, and verify it stays inside the selected receipt folder before renaming.

What this means

A user may believe receipt contents stay local when the documents are actually uploaded to a third-party API for extraction.

Why it was flagged

This privacy framing is incomplete because the implementation sends receipt/PDF contents to recite.rivra.dev for scanning, even though the resulting CSV ledger is stored locally.

Skill content
- **Local-First:** Keeps your financial data on your machine.
Recommendation

Revise the documentation to clearly say that receipt files are uploaded to the Recite API, and require explicit user consent before processing sensitive financial documents.

What this means

Receipt details such as vendors, totals, card information, addresses, or tax-related purchases may be shared with the external provider.

Why it was flagged

The script uploads the full selected receipt image or PDF to the Recite provider API. This is central to the skill's purpose, but the files may contain sensitive financial data.

Skill content
encoded_string = base64.b64encode(image_file.read()).decode('utf-8')
...
response = requests.post(f"{BASE_URL}/scan", headers=headers, json=payload, timeout=30)
Recommendation

Use the skill only if you trust the Recite service with these documents, and avoid processing receipts containing information you do not want sent to that provider.

What this means

Anyone with access to the configured API key may be able to use the user's Recite account or quota.

Why it was flagged

The skill reads a Recite API key from local configuration or the environment and uses it as a bearer token. This is expected for the integration, but it is still account-authorizing credential use.

Skill content
CONFIG_PATH = os.path.expanduser("~/.config/recite/config.json")
...
return os.environ.get("RECITE_API_KEY")
...
"Authorization": f"Bearer {api_key}"
Recommendation

Store the API key securely, use a revocable/limited key if available, and remove it from the environment or config file when no longer needed.

What this means

Changes to the memory file could alter how the agent handles receipts, categories, alerts, or file movements in future runs.

Why it was flagged

The skill intentionally supports persistent workflow instructions. This is disclosed and purpose-aligned, but persistent instructions can affect later processing if edited unexpectedly.

Skill content
Modify `skills/recite/long_term_memory.md` to add persistent instructions for the agent. The agent will always read this file before processing.
Recommendation

Keep long_term_memory.md under user control, review it before processing important receipts, and avoid placing broad or unsafe file-operation instructions in it.