Public sanitization
SF Pi is a public repository. Public output must be source-agnostic and must not copy, quote, or closely paraphrase private conversations, internal notes, customer material, private repos, screenshots, or other non-public sources.
Use private sources only to understand concepts, constraints, or troubleshooting patterns. Rewrite examples into fresh, generic scenarios before committing them.
Do not commit
Do not commit or publish:
- secrets, API keys, tokens, SFDX auth URLs, session cookies, passwords, or private keys
- Salesforce org IDs, usernames, instance URLs, sandbox hostnames, scratch org identifiers, or customer-specific aliases
- Slack workspace, channel, user, file, canvas, or permalink identifiers from a real workspace
- customer names, incidental/private employee identities, account names, project codenames, or other identifying details
- private/internal hostnames, unpublished service details, private repository URLs, internal ticket/case IDs, or internal documentation links
- screenshots or browser evidence that contains customer, employee, org, Slack, or internal service data
- internal-only examples copied from Slack, customer engagements, support cases, or private docs
Deliberate public attribution
Consented, already-public maintainer attribution, repository governance contacts, CODEOWNERS entries, and third-party credits are allowed when they serve a clear project purpose. Do not infer consent from a private source or reuse names from customer/internal material. Keep incidental identities out of examples, diagnostics, screenshots, test data, and copied discussion text.
Prefer generic examples
Use generic examples such as:
https://your-gateway.example.comhttps://gateway.example.testMyAgentExampleAccountC01ABCEXAMPLEfor placeholder Slack channel IDsU01ABCEXAMPLEfor placeholder Slack user IDs00D000000000000AAAonly when a Salesforce-shaped placeholder is needed
Avoid examples that look like a real customer, employee, org, or workspace.
Gateway public surface
The SF LLM Gateway extension ships with no default endpoint or credentials. Public docs should use source-agnostic setup language:
- say "compatible gateway", "configured gateway", or "gateway root URL"
- prefer
SF_LLM_GATEWAY_*environment variables in public docs - describe legacy env names only when necessary for compatibility, without using them as the primary setup path
- avoid publishing private endpoint names, private routing details, internal-only model/provider identifiers, or organization-specific certificate locations
Source code and tests may keep compatibility constants and focused regression fixtures when they are necessary to preserve behavior. Prefer generic fixtures in public docs and examples.
Docs public surface
The SF Docs extension ships with no default endpoint or credentials. Public docs should use source-agnostic setup language:
- say "compatible Salesforce docs endpoint" or "configured docs endpoint"
- refer only to
SF_DOCS_MCP_ENDPOINTin public docs - use generic fixtures such as
https://docs.example.comorhttps://docs.example.test/ - avoid publishing private docs-service hostnames, internal routing details, or organization-specific setup URLs
Interactive /login sf-docs collects and persists only the endpoint URL; the service requires no access token. The real service URL belongs in internal onboarding documentation, not this repository.
Diagnostics and artifacts
Public diagnostics must be summarized and sanitized. Do not paste raw command output when it may contain:
- local paths with usernames
- org aliases or usernames
- Slack identifiers
- tokens or env vars
- browser screenshots with private data
- full prompt or tool payloads from customer/internal contexts
The sf-feedback extension is the preferred path for filing public issues because it collects and sanitizes diagnostics before previewing the final issue body.
Automation checks
The repository has automated checks for common public-safety mistakes:
- Gitleaks and TruffleHog secret scanning
- docs-health scanning of tracked Markdown, JSON, YAML, source, scripts, and fixtures for private-shaped org and collaboration identifiers
- LLM artifact checks
- dependency and license checks
The tracked-file boundary is deliberate: ignored local notes, reports, and session artifacts are private working state rather than public repository content. Clearly generic fixture shapes remain allowed so behavior tests can exercise identifier parsing without preserving real values.
These checks are a backstop, not a substitute for review. If a public/private classification is unclear, omit, generalize, or ask before publishing.