doorloop/DocLoop AI

Maintain documentation files using AI. One step = one mapping intent. Compose more by adding more steps.

View on GitHub

Trust Signals

Scorecard Score
not yet scored
Maintenance Recency
Stale
License
None
namedescriptionrequireddefault
openai_api_keyOpenAI API key (should come from GitHub secrets).yes
openai_modelOpenAI model identifier (e.g. gpt-4o-mini, gpt-4o, gpt-4-turbo).nogpt-4o-mini
github_tokenGitHub token used to read PR files and to push commits / open PRs / post comments. Defaults to the workflow-provided token.no${{ github.token }}
watchOne or more glob patterns (newline- or comma-separated) describing the source files this mapping watches. May contain `<PLACEHOLDER>` segments (e.g. `apps/server/features/<FEATURE_NAME>/**`); placeholders fan-out one step into N target READMEs.yes
readmeTarget documentation file path. Any `<PLACEHOLDER>` used here must be declared in `watch`. Mutually exclusive with `readme_candidates`; exactly one must be set.no
readme_candidatesGlob pattern matching the candidate documentation files (e.g. `docs/wiki/insights/*-feature.md`). Each matched file must declare its owned source paths in YAML frontmatter under `paths:`. The action routes each changed source file to every candidate whose `paths:` covers it. Mutually exclusive with `readme`; exactly one must be set.no
prompt_fileOptional path to a Markdown file used as the model's primary directive. The action's operational boundaries (return JSON / Markdown / how to signal "no update") are appended after.no
detail_levelControls how detailed the generated content should be. One of: low, medium, high.nomedium
formatOutput format. `structured` returns JSON with `should_update`/`update_reason`. `freeform` returns Markdown; the model signals "no update" with the literal `<!-- docloop:no-update -->` sentinel.nostructured
on_missing_readmeWhat to do when the target file does not exist. One of: create, skip.nocreate
excludeGlob patterns to exclude from the watch set (newline- or comma-separated).no
deliveryHow to deliver the generated content. One of: direct_commit, pr, pr_comment, pr_branch_commit. Default is event-derived: closed+merged → direct_commit; opened/synchronize/reopened → pr_comment; workflow_dispatch → pr; schedule / mode=window → pr. On windowed runs `pr` maintains ONE standing roll-up PR on a stable branch containing every pending doc update — force-rebuilt each cycle (never conflicts), auto-closed when nothing is pending.no
modeSet to `window` to run windowed regeneration under `workflow_dispatch` (a `schedule` trigger implies it). In windowed mode each `readme_candidates` doc is regenerated from the diff accumulated since its own `docloop_baseline` frontmatter, and the action manages that baseline. Leave unset for the default per-event behavior.no
initial_window_daysWindowed mode only. When a candidate doc has no valid `docloop_baseline` yet, look back this many days to seed its first window.no7
max_diff_bytesWindowed mode only. Upper bound on the source diff sent to the model per candidate. Larger diffs are truncated per-file (with the omitted paths named) so a huge feature degrades to a paths-only signal instead of failing.no262144
commit_messageCommit message used when delivery is direct_commit, pr, or pr_branch_commit.nodocs: update [skip ci]
format_commandOptional shell command to run on each generated file before commit (e.g. `bunx --no-install prettier --write` or `bun run format -- `). The generated file path is appended as the final argument. Failure is logged as a warning and does not fail the action — the unformatted file is still committed.no
pr_titleTitle for the docs PR opened when delivery is `pr`. Defaults to "📚 docs: update READMEs via DocLoop AI".no
request_review_from_pr_authorWhen delivery is `pr` and the action is triggered by a merged PR, request a review on the docs PR from the source PR author. Set to "false" to disable.notrue
nameMapping name used to key PR-preview comments so multiple docloop steps in one workflow each maintain their own idempotent comment. Defaults to a value derived from `watch` and `readme`.no

no outputs