Repository navigation
Document Coda as a read-only context source - #970
promptless[bot] wants to merge 12 commits into
Conversation
Add a Coda context-source reference page and wire it into the sibling context-source docs, following the established pattern. Coda connects via a pasted personal API token (not OAuth); Promptless searches Coda docs by name and reads page content as read-only context. Scope Coda by doc_ids in promptless.yaml, parallel to Notion. - New page: for-docs/connect/context-sources/coda.mdx - Context-sources overview: LinkCard + example - Integrations reference: Coda entry - Configuration reference: onboarding-defaults row, YAML example, scope table - Access & permissions: read-only series + scope-by-source correction - September 2026 changelog entry
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
|
||
| ## Configuration | ||
|
|
||
| Coda authenticates with a personal API token that you generate in Coda and paste into Promptless. To connect Coda: |
There was a problem hiding this comment.
Citation
Citation withdrawn.
Verified: Coda authenticates via a personal API token (Authorization: Bearer), not OAuth — the content API has no OAuth flow, so the connect route validates and stores a user-supplied token. Re-anchored from line 39 to 43 after the revision inserted an Example section above Configuration.
Source: coda.py:1–7 · 2b15859
| 1. In Coda, generate a personal API token under **Account Settings > API Settings** (see [Coda's API documentation](https://coda.io/developers/apis/v1)). The token inherits the Coda access of the account that created it, and you can restrict it to specific docs. We recommend generating it from a dedicated service account so Promptless gets least-privilege access. A dedicated service account is a Coda account you control and use for integrations like this one. Whichever account you use must have access to the Coda docs you want Promptless to read. If you use a service account, add it as a collaborator on those docs, or on the workspace, so Promptless can read them. | ||
| 2. Go to the [Integrations page](https://app.gopromptless.ai/integrations) in your Promptless dashboard. | ||
| 3. Click **Connect** on the Coda integration card. | ||
| 4. Paste the token and click **Connect**. Promptless validates the token when you connect. |
There was a problem hiding this comment.
Citation
Citation withdrawn.
Verified: connect_coda_installation calls CodaClient.get_whoami() synchronously on connect and raises HTTP 401 "Invalid Coda API token" when the token fails, confirming the token is validated at connect time. Re-anchored from line 44 to 48 after the revision restructured the Configuration steps.
Source: coda.py:73–83 · 2b15859
|
|
||
| import { Aside } from '@astrojs/starlight/components'; | ||
|
|
||
| Coda integration provides **read-only** access to your team's Coda docs for documentation automation. When Coda is configured as a context source, Promptless searches Coda and reads page content when creating suggestions. It never modifies your Coda content. |
There was a problem hiding this comment.
Citation
Citation withdrawn.
Verified: the Coda provider module docstring states it "exposes read-only Coda tools to the agent" (search, list pages, read a page); no write/create/update/delete tool exists for Coda content.
Source: coda.py:1–6 · 2b15859
|
|
||
| When Coda is enabled as a context source: | ||
|
|
||
| - **Doc Search**: Promptless finds a Coda doc by its name when creating documentation suggestions. Search matches doc names, not the body text of pages. |
There was a problem hiding this comment.
Citation
Citation withdrawn.
Verified: "Coda has no content search. GET /docs matches doc names only" — search_coda_docs tool matches document names, not page body text.
Source: coda.py:9–10 · 2b15859
| </Aside> | ||
|
|
||
| <Aside type="note"> | ||
| Promptless reads Coda pages as plain text, so it captures the words but not link targets, inline formatting, or tables. |
There was a problem hiding this comment.
Citation
Citation withdrawn.
Verified: pages are read via the synchronous listPageContent endpoint with contentFormat=plainText; link targets, inline formatting, and tables are not carried by the plain-text lines. Re-anchored from line 28 to 32 after the revision inserted a new doc-name search tip Aside above this note.
Source: coda.py:11–16 · 2b15859
| | Notion | None | Unscoped `notion` entry | | ||
| | Google Drive | None | Unscoped `google_drive` entry | | ||
| | Slite | None | Unscoped `slite` entry | | ||
| | Coda | None | Unscoped `coda` entry | |
There was a problem hiding this comment.
Citation
Verified: add_broad_context_sources seeds an unscoped CodaContextSource(source_type="coda") when Coda is connected and no "coda" entry already exists; this helper backs both onboarding synthesis and post-onboarding connect-time seeding.
Source: synthesis.py:94–98 · 2b15859
|
|
||
| Coda authenticates with a personal API token that you generate in Coda and paste into Promptless. To connect Coda: | ||
|
|
||
| 1. In Coda, generate a personal API token under **Account Settings > API Settings** (see [Coda's API documentation](https://coda.io/developers/apis/v1)). The token inherits the Coda access of the account that created it, and you can restrict it to specific docs. We recommend generating it from a dedicated service account so Promptless gets least-privilege access. A dedicated service account is a Coda account you control and use for integrations like this one. Whichever account you use must have access to the Coda docs you want Promptless to read. If you use a service account, add it as a collaborator on those docs, or on the workspace, so Promptless can read them. |
There was a problem hiding this comment.
Citation
Citation withdrawn.
Verified: "A token inherits the permissions of the user who created it, and may additionally be restricted to specific docs at creation time." Matches the doc's claim that a token inherits the creating account's Coda access and can be doc-restricted; a service account with no doc/workspace access would read nothing.
Source: api_client.py:3–6 · 2b15859
|
|
||
| Coda authenticates with a personal API token that you generate in Coda and paste into Promptless. To connect Coda: | ||
|
|
||
| 1. In Coda, generate a personal API token under **Account Settings > API Settings** (see [Coda's API documentation](https://coda.io/developers/apis/v1)). The token inherits the Coda access of the account that created it, and you can restrict it to specific docs. We recommend generating it from a dedicated service account so Promptless gets least-privilege access. A dedicated service account is a Coda account you control and use for integrations like this one. Whichever account you use must have access to the Coda docs you want Promptless to read. If you use a service account, add it as a collaborator on those docs, or on the workspace, so Promptless can read them. |
There was a problem hiding this comment.
Citation
Citation withdrawn.
Verified: the Coda connect modal (CodaModal) links "https://coda.io/developers/apis/v1" labeled "Coda API docs" — matches the doc's link exactly.
| 3. Click **Connect** on the Coda integration card. | ||
| 4. Paste the token and click **Connect**. Promptless validates the token when you connect. | ||
|
|
||
| The Coda card on the [Integrations page](https://app.gopromptless.ai/integrations) shows the connection status. Use it to confirm the connection works and to spot a later problem, such as a token revoked in Coda. See [Connection health & troubleshooting](/docs/for-docs/connect/connection-health). |
There was a problem hiding this comment.
Citation
Citation withdrawn.
Verified: _validate_coda exists and is registered for IntegrationType.CODA; it re-calls GET /whoami and classifies the resulting HTTPException (e.g. a revoked token surfaces as an unhealthy/credential-invalid state), backing the doc's claim that the Integrations page card reflects a later problem such as a revoked token. connection-health.mdx's slug (docs/for-docs/connect/connection-health) matches its frontmatter.
Source: validators.py:720–740 · 2b15859
…xt-source-docs # Conflicts: # src/content/changelog/changelogs/september-2026.mdx
…xt-source-docs # Conflicts: # src/content/changelog/changelogs/september-2026.mdx
…xt-source-docs # Conflicts: # src/content/docs/docs/for-docs/security/access-and-permissions.mdx
…xt-source-docs # Conflicts: # src/content/changelog/changelogs/september-2026.mdx
…xt-source-docs # Conflicts: # src/content/changelog/changelogs/september-2026.mdx
…xt-source-docs # Conflicts: # src/content/changelog/changelogs/september-2026.mdx
…xt-source-docs # Conflicts: # src/content/docs/docs/for-docs/connect/context-sources.mdx # src/content/docs/docs/for-docs/reference/configuration-reference.mdx # src/content/docs/docs/for-docs/reference/integrations.mdx # src/content/docs/docs/for-docs/security/access-and-permissions.mdx
|
I noticed that some CI checks failed for this PR. I'm investigating whether the failures are caused by this suggestion. If they're unrelated or pre-existing, I'll leave this suggestion unchanged and create a separate suggestion if a standalone docs fix is needed. |
Open in Promptless
Documents Coda as a new read-only agent context source, alongside Notion, Confluence, Linear, Google Drive, and Slite. Source: Promptless/promptless#5009 ("Read a customer's Coda workspace as agent context").
A customer who keeps product specs and knowledge in Coda can connect it so Promptless reads their Coda pages as input context when it drafts documentation suggestions — reusing the feature names, limits, and rationale the team already recorded, instead of re-deriving them from the code diff.
What the docs cover
for-docs/connect/context-sources/coda.mdx, parallel to the Slite/Notion/Google Drive pages: connection via a pasted personal API token (Account Settings → API Settings; not OAuth), read-only behavior, doc-name search (search matches doc names, not page body text), plain-text page reading (link targets, inline formatting, and tables are not preserved), a concrete Example, service-account/least-privilege guidance, connection-health pointer, anddoc_idsscoping.doc_idsscope row), and the security access-and-permissions page updated to include Coda.id,type: how-to, and the AI-context fields. Itsdocs.metadata.yamlentry holds personas, journeys, and manni-derivedcreated/ownerstamps, and manni setslast-updated. The body uses the same how-to sections as the sibling context-source pages: Overview with Example, Before you start, Connect Coda, Limit Promptless to specific docs, and See also.manni meta validateandmanni lint structurepass.Codato thePromptless.HeadingsVale exceptions list (vale/Promptless/styles/Promptless/Headings.yml), alongside Notion and Slite, so the product name keeps its capital in the "Connect Coda" heading.Open items to confirm at merge (source PR #5009 is unmerged; docs are source-verified, not runtime-confirmed):
IntegrationsList.tsx), not the live dashboard — the card is likely not deployed yet. Re-verify the card and its labels against the live Integrations page before promoting this PR to ready-for-review.doc_idsscoping is documented but not yet enforced at agent read time. The field is in the config schema, the canonicalpromptless-yaml-spec.md, and the dashboard doc picker, so it is documented parallel to the other sibling scope fields (Notionpage_ids, Google Drivedrive_ids). However, source (the exec plan andconfig_bootstrap.py) indicates context-source scope entries are inert at runtime today — this affects every sibling scope field, not just Coda, and is not called out on the customer page for that reason. Confirm enforcement (or the shared caveat) at merge.This PR is open in draft while source PR #5009 is open, and should be promoted to ready-for-review when #5009 merges.
Trigger Events