Find Editorial Citations
Find sources that genuinely improve the user's work. Treat CiteGuild as a focused member corpus, not a replacement for a broad search engine.
Workflow
- Extract a focused search query from the topic, passage, claim, or draft. Preserve the user's meaning and avoid sending confidential or unnecessary text.
- Ask for the user's own domain only when it cannot be inferred and excluding it materially matters. Pass known owned domains as exact values in
excluded_domainsor repeated--exclude-domainflags. - Choose one available transport:
- For OpenClaw, Hermes, shell agents, or scripts, prefer the
citeguildCLI when it is installed. - In a client exposing CiteGuild MCP tools, call
search_member_articles. - Otherwise, call the versioned REST endpoint
POST https://citeguild.lvtd.dev/api/v1/search.
- For OpenClaw, Hermes, shell agents, or scripts, prefer the
- Start with 10 results. Increase the limit or try one narrower query only when the first pass is insufficient.
- Rank candidates by direct topical and claim-level relevance. Prefer a smaller set of strong matches over filling a quota.
- Present each useful candidate with its title, canonical URL, domain, and a short explanation of what it could support.
- If the user is drafting content, recommend a citation only when the source materially supports the surrounding claim. Inspect the article before representing its contents when the search result alone is insufficient.
All three transports use the same v1 search contract: query is required; limit is 1–50; language is optional; and up to 20 exact excluded domains are allowed.
CLI
Keep the key in CITEGUILD_API_KEY. Never pass it as a flag or place it in a URL or config file.
Check configuration and authentication without revealing the key:
citeguild config status
citeguild auth status
For agents and scripts, request stable JSON. Put options before the query:
citeguild search --json --limit 10 \
--language en \
--exclude-domain my-site.example \
"How do Django transaction commit hooks work?"
Use -- before a query that begins with a hyphen. Diagnostics go to stderr. A JSON failure includes code, message, retryable, exit_code, and when available request_id and retry_after_seconds. Do not install or upgrade the CLI unless the user asks; use MCP or REST when the command is unavailable.
MCP
Call search_member_articles with:
query: question, topic, claim, or draft passagelimit: 10 initiallylanguage: optional language tagexcluded_domains: optional exact domains owned by the user
Use get_user_info only when authentication or subscription state needs verification.
REST API
Send the API key from CITEGUILD_API_KEY as either Authorization: Bearer or X-API-Key. Never put it in a query string.
curl --fail-with-body --silent --show-error \
https://citeguild.lvtd.dev/api/v1/search \
-H "Authorization: Bearer $CITEGUILD_API_KEY" \
-H "Content-Type: application/json" \
--data '{"query":"How do Django transaction commit hooks work?","limit":10,"language":"en","excluded_domains":["my-site.example"]}'
The success response contains contract_version: "v1" and results. Each result has article_id, title, canonical_url, domain, excerpt, relevance, language, and last_seen_at.
Guardrails
- State that results come from opted-in CiteGuild member articles, not the whole web.
- Never describe a candidate as verified, authoritative, or endorsed solely because CiteGuild returned it.
- Never promise a backlink, placement, ranking gain, or reciprocal link.
- Do not add irrelevant citations to manufacture an exchange. Editorial relevance wins.
- Do not imply that finding or citing a member article obligates its owner to cite back.
- Do not fabricate titles, URLs, claims, or source contents.
- Use broader web search or independent verification only when the user separately requests it or the task genuinely requires it; distinguish those results from CiteGuild candidates.
Authentication and errors
For CLI, REST, and API-key MCP access, use CITEGUILD_API_KEY. In Claude Code and ChatGPT, prefer the MCP client's OAuth flow unless the client is configured separately with an API key. Never hardcode, print, log, or commit a credential.
Handle transport errors consistently:
401: the credential is missing, invalid, or revoked.403withsubscription_required: explain that an active subscription is required and stop.422: correct the request contract.429: honorRetry-Afterorretry_after_seconds.503: preserve the query and suggest retrying rather than substituting invented results.
Output
Lead with the number of strong matches. For each match, return:
- linked article title and domain
- the claim or section it may support
- one-sentence relevance rationale
- any verification caveat
Say clearly when no result is sufficiently relevant.