How to use
- Copy the installation command and review the source package before installing it in your own agent environment.
- Check the source document for required tools, credentials and supported hosts.
- Describe your input and desired deliverable; review the output against the source material.
npx skills add https://github.com/sshvarzman-salesforce/claude-skills --skill sf-agent-api-citationsBefore you start
- Installation does not include a model subscription, API allowance or permission to access your files.
- Repository stars and installation counts describe activity, not an independent quality or security test.
Rendered from the source repository. Headings, examples, code, tables, links, and referenced images are preserved.
Agent API Citations
Use This Skill When
- Parsing the
citedReferencesarray from anInformmessage. - Rendering cited sources as a source list or as inline citations.
- Mapping cited
recordId/valueback to Salesforce records or knowledge articles.
Concept
Some responses include cited sources in the citedReferences array of an Inform message. Citations appear in two ways:
- Source list — references shown at the bottom of the response.
- Inline citations — tied to a specific location in the response text via the
inlineMetadataobject.
CitedReference Shape
{
"type": "link",
"value": "https://myorgdomain.salesforce.com/ka0RZ000002DzSmYAK",
"recordId": "ka0RZ000002DzSmYAK",
"label": null,
"inlineMetadata": [
{
"claim": "The 2024 Acura ZDX is Acura's first-ever all-electric vehicle, featuring: ...",
"location": 236
}
]
}| Field | Meaning |
|---|---|
type | Reference type (for example link) |
value | URL to the cited source |
recordId | Salesforce record ID of the source (for example a Knowledge article) |
label | Optional display label |
inlineMetadata[] | Inline anchors: claim (the supported text span) and location (character offset in message) |
Rendering Strategy
Source list (simplest)
Render every citedReference as a footnote/link block beneath the answer. Use label when present, else derive a title from recordId/value.
Inline citations
- Read the
Informmessagetext. - For each reference, for each
inlineMetadataentry, uselocation(character offset) to place a citation marker in the rendered text. - Sort markers by
locationbefore inserting so offsets don't shift incorrectly (insert from the end backwards, or account for inserted marker length). - Link each marker to
value(URL) or navigate torecordIdin-app.
function buildInlineCitations(informMessage) {
const text = informMessage.message;
const anchors = [];
(informMessage.citedReferences || []).forEach((ref, refIdx) => {
(ref.inlineMetadata || []).forEach((im) => {
anchors.push({ location: im.location, refIdx: refIdx + 1, ref });
});
});
anchors.sort((a, b) => b.location - a.location); // insert from end
let out = text;
for (const a of anchors) {
const marker = `[${a.refIdx}](${a.ref.value})`;
out = out.slice(0, a.location) + marker + out.slice(a.location);
}
return out;
}Guardrails
citedReferencesmay be empty ([]) — always guard before iterating.inlineMetadatamay be absent; fall back to a source list when there are no inline anchors.- Treat
valueURLs as untrusted; validate the host/scheme before rendering as a clickable link. - When inserting inline markers by
location, insert from the highest offset backward so earlier offsets stay valid. - Prefer in-app navigation via
recordIdfor internal records rather than exposing raw org URLs externally.
Deliverables
- A citation parser that normalizes
citedReferencesinto source-list and inline forms. - A rendering component contract (marker style, link vs navigate, empty-state handling).
Additional Resources
- Where citations arrive in the response:
sf-agent-api-messaging - Official docs: Agent API Examples — Handle Citations



