Skip to content

For the complete documentation index, see llms.txt.

Configuration reference

All Promptless configuration lives in a single promptless.yaml file in your organization’s Agent Knowledge Base. This file defines your doc collections, triggers, context sources, and publishing policies in one place.

View and edit your configuration in the dashboard at app.gopromptless.ai/configuration. The page opens in Form mode, a structured editor that groups your configuration into four tabs—Doc collections, Triggers, Context sources, and Policies—so you can manage everything without hand-editing YAML. Each tab shows how many items it holds and surfaces the fields for that section directly.

You can also ask Promptless to make these changes for you in Slack or Microsoft Teams. See Ask Promptless to update your configuration.

Form mode saves one item at a time. When you add or change a doc collection, trigger, or context source, you save that item on its own, and Promptless commits the change to your Agent Knowledge Base right away. Policies save as a single section. There’s no separate review-and-commit step—each save is its own commit.

When you need precise control over the file format, switch to YAML mode using the toggle at the top of the page. YAML mode is the raw editor with syntax highlighting, schema-driven completions, and inline validation. Use it when you want to copy configurations between environments or edit the file directly.

In Form mode, Promptless fills in fields from your connected integrations. The doc collection platform (GitHub, GitHub OSS, GitHub Enterprise, or GitLab) comes from the integration that reaches the repository rather than a field you set, and the repo, Slack channel, and Jira, Confluence, Linear, and Notion pickers autocomplete from what each integration can see.

Form mode also keeps references consistent for you. Renaming a doc collection updates every trigger and policy rule that points at it in the same save, and warns you if the new name is already taken. Deleting a doc collection or trigger that a policy rule depends on removes those rules too, so you never end up with a rule pointing at something that no longer exists.

Every organization member can view the configuration, but only admins can edit and save changes. Non-admins see a read-only view.

The editor uses compare-and-swap to avoid overwriting concurrent changes. If someone else modifies the configuration while you’re editing, you see a conflict warning and can reload to get the latest version.

When you complete the setup wizard, Promptless creates your promptless.yaml with sensible defaults based on the integrations you connected:

Connected IntegrationGenerated TriggerGenerated Context Source
GitHub (docs or trigger app)github_pr (opened, first_approval, merge) with repos: all
GitLabgitlab_mr (opened, merge) with repos: all
Bitbucketbitbucket_pr (opened, merge) with repos: all
Jira / ConfluenceUnscoped jira and/or confluence entries
LinearUnscoped linear entry
NotionUnscoped notion entry
Google DriveUnscoped google_drive entry
SliteUnscoped slite entry

Onboarding seeds pull request triggers only; commit triggers are opt-in and stay off until you add a github_commit trigger yourself. These broad defaults let Promptless start listening for documentation-worthy events immediately. You can edit your configuration anytime to narrow scope, like restricting triggers to specific repositories or limiting context sources to particular projects.

Connecting Jira, Confluence, Linear, or Notion after onboarding works the same way: Promptless adds a broad, unscoped context source for that tool if you don’t already have one. Existing entries and any scoping you’ve set are left untouched.

A commit trigger (github_commit) activates when commits are pushed to a branch you monitor, rather than when a pull request opens or merges. Without a branches filter, it watches only the repository’s default branch. Add one when you want Promptless to react to commits directly:

triggers:
default-branch-commits:
trigger_type: github_commit
match:
- repos:
- acme/backend
branches:
- main # omit to match only the default branch
trigger_directories:
- src/

In a typical pull request workflow, this overlaps with your PR triggers: merging a pull request also pushes a merge commit to the default branch, so the commit trigger activates alongside the github_pr merge event. A commit trigger earns its place when changes reach a branch without a pull request—hotfixes or commits pushed straight to the default branch, for example—so Promptless still documents those changes. See GitHub Commits for the full workflow.

The configuration file has four top-level sections:

doc_collections: # Where documentation lives (keyed by repo)
context_sources: # Integrations for additional context
triggers: # Events that initiate documentation work
policies: # Publishing and notification rules

All sections are optional. Unknown keys are rejected with validation errors.

Doc collections define the documentation repositories where Promptless publishes updates. GitHub collections are keyed by owner/repo; GitLab collections are keyed by the project’s full path, including every namespace segment (for example, acme/platform/developer-docs).

doc_collections:
acme/docs:
docs_framework: docusaurus
docs_root_url: https://docs.acme.com
filter:
- docs/
- guides/
FieldDescription
platformRepository platform: github (default), github_oss, github_enterprise, or gitlab
hostBare instance hostname (no scheme, no path). Required for github_enterprise; optional for gitlab (blank means gitlab.com, a hostname means self-hosted GitLab); invalid for every other platform
default_branchBranch to target for PRs (defaults to repository’s default branch)
docs_frameworkDocumentation framework (docusaurus, mkdocs, starlight, etc.)
docs_root_urlPublished documentation site URL
config_file_pathPath to framework config file (e.g., docusaurus.config.js)
vale_config_pathPath to Vale config file to enable prose linting
doc_detectiveDoc Detective configuration (presence enables the feature)
filterList of directory prefixes or file paths Promptless can modify

A GitLab-backed collection sets platform: gitlab and is keyed by its project path. Leave host off for gitlab.com; set it to your instance hostname for self-hosted GitLab. Promptless opens merge requests on these projects the same way it opens pull requests on GitHub.

doc_collections:
acme/docs: # gitlab.com project
platform: gitlab
docs_framework: docusaurus
acme/handbook: # self-hosted GitLab project
platform: gitlab
host: gitlab.acme.com
docs_framework: mkdocs

The filter field controls which files Promptless can modify:

  • Empty or omitted: Promptless can modify any file in the repository.
  • Directory paths: Entries ending with / allow modifications to any file in that directory tree.
  • File paths: Exact file paths allow only that specific file.
doc_collections:
acme/docs:
filter:
- docs/ # All files under docs/
- CHANGELOG.md # Only this specific file

Context sources give Promptless access to your organization’s tools for additional context. They’re used for narrowing scope when you want to limit which projects, spaces, or databases Promptless can query. Each entry requires a source_type field.

context_sources:
jira:
source_type: jira
project_keys:
- DOCS
- PLATFORM
confluence:
source_type: confluence
space_keys:
- ENGINEERING
linear:
source_type: linear
team_keys:
- engineering
- product
notion:
source_type: notion
database_ids:
- abc123def456
google_drive:
source_type: google_drive
drive_ids:
- 0AExampleDriveIdUk9PVA
folder_ids:
- 1BExampleFolderIdXyZ
slite:
source_type: slite
Source TypeScope FieldsDescription
jiraproject_keysRestrict to specific Jira project keys
confluencespace_keysRestrict to specific Confluence space keys
linearteam_keysRestrict to specific Linear team identifiers
notiondatabase_ids, page_idsRestrict to specific Notion databases or pages
google_drivedrive_ids, folder_idsRestrict to specific shared drives or folders (omit both for full access)
sliteNo scope fields—the whole Slite workspace is available when connected

Triggers define events that automatically initiate documentation work. Unlike built-in triggers, these require explicit configuration. Each trigger has a trigger_type and a match list—the trigger activates when any clause in the list matches, and fields within a clause are ANDed together.

triggers:
github-prs:
trigger_type: github_pr
match:
- repos:
- acme/backend
- acme/api
trigger_on:
- opened
- first_approval
trigger_directories:
- src/
- lib/
slack-support:
trigger_type: slack_listen
match:
- channels:
- support
- customer-questions
github_pr

Triggers when pull requests are opened, approved, or merged in specified repositories; it can also re-review an open PR on each new push.

Match clause fields:

FieldDescription
reposRequired. The literal all or a list of repositories (owner/repo format)
excluded_reposRepositories to exclude from monitoring
trigger_onRequired. opened, first_approval, merge, or updated
trigger_directoriesOnly trigger when changes touch these directories
branchesOnly trigger for PRs targeting these branches
repo_topicsOnly trigger for repos with these GitHub topics
repo_ownersOnly trigger for repos owned by these owners (the owner segment of owner/repo)
github_commit

Triggers when commits are pushed to specified branches.

Match clause fields:

FieldDescription
reposRequired. The literal all or a list of repositories
excluded_reposRepositories to exclude
branchesBranches to monitor (omit to match only the default branch)
trigger_directoriesOnly trigger when changes touch these directories
repo_topicsOnly trigger for repos with these GitHub topics
repo_ownersOnly trigger for repos owned by these owners
gitlab_mr

Triggers when merge requests are opened or merged in GitLab projects.

Match clause fields:

FieldDescription
reposRequired. The literal all or a list of GitLab projects
excluded_reposProjects to exclude
trigger_onRequired. Events that activate the trigger: opened, merge
trigger_directoriesOnly trigger when changes touch these directories
branchesOnly trigger for MRs targeting these branches
bitbucket_pr

Triggers when pull requests are opened or merged in Bitbucket repositories.

Match clause fields:

FieldDescription
reposRequired. The literal all or a list of Bitbucket repositories
excluded_reposRepositories to exclude
trigger_onRequired. Events that activate the trigger: opened, merge
trigger_directoriesOnly trigger when changes touch these directories
branchesOnly trigger for PRs targeting these branches
slack_listen

Passively monitors specified Slack channels for documentation-worthy conversations.

Match clause fields:

FieldDescription
channelsRequired. List of channel names to monitor (no # prefix)
msteams_listen

Passively monitors specified Microsoft Teams channels.

Match clause fields:

FieldDescription
channel_idsRequired. List of Teams channel conversation IDs to monitor
clickup

Triggers when ClickUp tasks reach specified statuses.

Match clause fields:

FieldDescription
statusesRequired. List of task statuses that trigger documentation work
jira_new_issue

Triggers when an issue is created in a matching project.

Match clause fields:

FieldDescription
project_keyRequired. Non-empty list of Jira project keys (for example DOCS)

An optional top-level instructions field (a sibling of match) gives the trigger standing instructions passed to Promptless on each run; a present-but-blank value is rejected. Like the built-in jira_mention, Promptless comments on the ticket and owes an answer there, tracked for follow-up.

jira_label_added

Triggers when a label is added to an issue.

Match clause fields:

FieldDescription
new_labelRequired. Labels whose addition activates the trigger; matches when any listed label is added
project_keyOptional. Restrict to these project keys

A label whose first token is promptless is reserved for the built-in jira_mention path and never matches new_label; name the label something else.

Takes the same optional instructions field and has the same on-ticket behavior as jira_new_issue.

jira_status_change

Triggers when an issue moves into a new status.

Match clause fields:

FieldDescription
new_statusStatus names the issue moved into
is_doneOnly true is accepted; matches any status in Jira’s done category, stable across projects and renames
project_keyOptional. Restrict to these project keys

At least one of new_status, is_done, or project_key must be set in each clause.

Takes the same optional instructions field and has the same on-ticket behavior as jira_new_issue.

A Jira trigger activates once per crossing and does not re-fire on later deliveries about an issue that still matches. Creating an issue crosses every edge at once, so a new issue that matches two Jira triggers dispatches once, tagged with both keys; and an issue moving between two done statuses activates an is_done: true trigger again. See How a configured trigger activates for the full explanation.

schedule

Triggers when a scheduled time comes due and dispatches your standing instructions each time.

Match clause fields:

FieldDescription
cronRequired. Five-field cron expression (minute, hour, day of month, month, day of week). Runs at most once an hour.
timezoneOptional. IANA timezone name; defaults to UTC. Keeps its wall-clock time across daylight-saving changes.

Unlike other trigger types, a schedule trigger also takes a top-level instructions field (required, non-empty) as a sibling of match—because no inbound event describes the work, the instructions are the whole job. Each match clause is a {cron, timezone} pair, and multiple clauses run the same instructions on multiple cadences.

Some triggers are always active when their integration is connected and don’t appear in the YAML:

  • slack_mention — @Promptless mentions in Slack channels
  • msteams_mention — @Promptless mentions in Microsoft Teams
  • github_mention — @Promptless mentions in GitHub issues and PR comments
  • jira_mention — Assigning a Jira issue to the Promptless account, @mentioning it in a comment, or adding a promptless-prefixed label
  • web — Requests submitted through the web dashboard
  • api — Requests from the HTTP API

Built-in triggers can’t be disabled, but their keys are valid in policy rules.

Policies control publishing behavior and notifications. They consist of a default overlay and ordered rules that apply based on trigger or doc collection.

policies:
default:
notification:
slack_channel: docs-notifications
msteams_channel: "19:0a1b2c3d@thread.tacv2"
escalation:
slack_channel: docs-escalations
msteams_channel: "19:4e5f6a7b@thread.tacv2"
email:
- docs-team@example.com
publishing:
auto_create_pr: true
auto_merge: false
suppress_source_pr_comments: false
rules:
- if:
trigger: github-commits
then:
publishing:
auto_merge: true
- if:
doc_collection: acme/internal-docs
then:
notification:
slack_channel: internal-docs-team

notification

FieldDescription
slack_channelSlack channel name for notifications (no # prefix), or null to disable an inherited Slack channel
msteams_channelMicrosoft Teams channel conversation ID (e.g. 19:…@thread.tacv2) for notifications, or null to disable an inherited Teams channel

slack_channel and msteams_channel are independent—set either, both, or neither. The Teams conversation ID is the same value you paste into an msteams_listen trigger; copy it from Teams. A Teams channel must have prior Promptless bot activity before notifications can be delivered there.

  • Omitting the field inherits the channel from policies.default or an earlier rule.
  • Setting it to null disables the channel for that scope, overriding any inherited channel so no notification is sent.
  • Setting it to a channel name (or Teams conversation ID) routes notifications there.

Because resolution depends on field presence, an omitted field and an explicit null are not the same: null means disable, absent means inherit. The two channels resolve independently, so you can disable one while leaving the other inherited.

policies:
default:
notification:
slack_channel: docs-notifications
rules:
- if:
doc_collection: acme/internal-docs
then:
notification:
slack_channel: null # silence Slack for this collection

escalation

The escalation channel is where Promptless routes operational alerts—such as proactive notifications when a connected integration develops a problem—rather than suggestion announcements. This is completely different from notifications about suggestions being created, updated, closed, or merged. For example, a test account is missing the feature flags to screenshot a screen, or a PR references a Jira issue that Promptless can’t read—either the Jira integration isn’t connected, or it’s connected but the project isn’t accessible. See Escalation channel for the full behavior. It’s a sibling of notification and, unlike notification, also accepts email.

policies:
default:
escalation:
slack_channel: ops-alerts
msteams_channel: "19:0a1b2c3d@thread.tacv2"
email:
- oncall@acme.com
FieldDescription
slack_channelSlack channel name for escalation alerts (no # prefix), or null to disable an inherited Slack channel
msteams_channelMicrosoft Teams channel conversation ID (e.g. 19:…@thread.tacv2), or null to disable an inherited Teams channel
emailList of email addresses for escalation alerts (escalation only; not used for suggestion notifications), or [] to disable an inherited list

Set any combination of the three; the same presence semantics as notification apply (omit to inherit; null for slack_channel/msteams_channel or [] for email to disable), and msteams_channel carries the same Teams-activity prerequisite as notification. Escalations reach the escalation channel(s) even when suggestion notifications are off or no notification channel is set. When a platform’s escalation channel is unset, Promptless raises escalations through your suggestion-notification routing on that platform.

escalation.email routes escalations to a list of email addresses. Email is escalation-only. Suggestion notifications never arrive by email. Promptless emails only the addresses you list. Email escalation requires email delivery to be configured for your deployment. It’s on by default on Promptless-hosted deployments. Self-hosted deployments must configure it.

publishing

FieldDescription
auto_create_prAutomatically open documentation PRs for suggestions, or merge requests on GitLab. Gates only automatic PR creation—see the note below
auto_mergeAutomatically merge auto-created documentation PRs. On GitLab the merge is immediate and squashes, and a merge request that can’t merge right away stays open for you to merge manually (full detail)
suppress_source_pr_commentsSkip posting comments on source PRs

archiving

Promptless automatically archives suggestions that have gone stale, so your dashboard stays focused on active work. The archiving block controls this behavior.

FieldDescription
enabledWhether automatic archiving runs for this scope. Defaults to true.
stale_after_daysDays of inactivity before a suggestion is archived. Defaults to 30; must be a positive integer.

Unlike publishing, archiving is opt-out: it runs with a 30-day window unless you disable or adjust it. Set enabled: false to keep a scope’s suggestions open indefinitely—useful when a team leaves a suggestion open until a linked ticket closes—or lower stale_after_days to archive sooner. Staleness is measured from a suggestion’s last activity rather than its creation date, taking the most recent of when it was created, updated, had its diff refreshed, or was reopened. A suggestion viewed within the window is always spared.

policies:
default:
archiving:
stale_after_days: 45
rules:
- if:
doc_collection: acme/docs
then:
archiving:
enabled: false # keep this collection's suggestions indefinitely

Rules are evaluated in order. When multiple rules match, fields from later rules override earlier ones. The if clause supports:

  • trigger — Match a specific trigger key (including built-in triggers like slack_mention)
  • doc_collection — Match a specific doc collection by repository name

Both conditions must match if both are specified (AND logic).

doc_collections:
acme/documentation:
docs_framework: docusaurus
docs_root_url: https://docs.acme.com
config_file_path: docusaurus.config.js
filter:
- docs/
context_sources:
jira:
source_type: jira
project_keys:
- DOCS
- ENG
linear:
source_type: linear
team_keys:
- engineering
# Built-in triggers (api, github_mention, jira_mention, msteams_mention, slack_mention, web)
# are always on for connected integrations and are not configured here;
# their keys remain valid in policies rules.
triggers:
main-repos:
trigger_type: github_pr
match:
- repos:
- acme/backend
- acme/frontend
trigger_on:
- opened
- first_approval
trigger_directories:
- src/
support-channel:
trigger_type: slack_listen
match:
- channels:
- customer-support
policies:
default:
notification:
slack_channel: docs-updates
publishing:
auto_create_pr: true
auto_merge: false
rules:
- if:
trigger: slack_mention
then:
publishing:
suppress_source_pr_comments: true

The configuration editor validates your YAML before saving. Validation errors appear as inline markers at the relevant line, with details including:

  • Path — Which field has the error
  • Line — Line number in the YAML
  • Message — Description of what’s wrong

Common validation errors:

  • Unknown keys (typos or unsupported fields)
  • Invalid enum values (e.g., wrong trigger type)
  • Missing required fields (e.g., host for github_enterprise platform)
  • Duplicate repository keys in doc_collections
  • Malformed doc_collections keys (a GitHub, GitHub OSS, or GitHub Enterprise key must be exactly owner/repo, with no extra path segments; a GitLab key is the project’s full path, so nested namespace segments are valid; no key may carry surrounding whitespace)

Promptless automatically updates your configuration when repositories or Slack channels are renamed:

  • GitHub repository renames: The doc_collections key and any references in trigger repos/excluded_repos are updated.
  • Slack channel renames: Channel names in slack_listen triggers and the slack_channel of notification and escalation policies are updated. Teams conversation IDs are not Slack channel names and are left unchanged.

These updates are committed directly to your Agent Knowledge Base.

Existing organizations are automatically migrated from the legacy Projects configuration to promptless.yaml. The migration preserves:

  • All trigger configurations and settings
  • Doc collection settings
  • Automatic PR creation and notification preferences
  • Context source scoping

After migration, the Projects page is replaced by the Configuration page. Your triggers and doc collections continue working without any action required.