Sending feedback
You can report back to the template author what served the working method well or was missing. Feedback is voluntary, covers the working method only, never your project, and everything that leaves the machine is also kept locally.
The test for every entry: would this help someone who will never see your project? A rule you had to add because the template lacked it, a workflow that kept failing, a script that generalizes: that is feedback. A fact about your project (its name, its stack, a number, a quote from its docs) is not.
Three keys in the Feedback section of docs/ai/config.md control it:
feedback |
Behavior |
|---|---|
off |
nothing is sent on its own |
confirm |
the assistant shows you the payload and asks |
automatic |
the payload is sent without asking |
manual |
entries are collected but never sent on their own; only the act-feedback skill sends |
python .act/scripts/feedback.py --enable [--mode off|confirm|automatic|manual] sets the mode; --enable without --mode means automatic, which sends without asking; --disable turns it off.
Cadence and scope
Section titled “Cadence and scope”feedback-cadence is an upper limit, never an obligation: manual, immediate, hourly, daily, weekly (the usual value) or adaptive, which learns from how often reminders are acted on or postponed. With nothing to report, nothing is sent, however short the cadence.
feedback-scope says what the assistant may collect on its own:
| Scope | Collects |
|---|---|
a |
metrics |
b |
rule and structure changes |
c |
tool usage: how many agents, skills and scripts exist, and how often each of the template’s own skills and scripts was used since the last sending. Your own skills and scripts appear only as one own count per kind, never by name. No MCP server names are sent. |
A finding written by hand always goes into the outbox, whatever the scope.
Two ways to send
Section titled “Two ways to send”- A sentence after the trigger, for example
feedback: the update left a file behind. That sentence is the message itself, sent unchanged, even withfeedback: off. Withoff, only the text and the template’s own commit hash leave the project, nothing else. With any other mode, the project id goes along so several messages from one project can be told apart, but never the repository URL. - The trigger alone (the skill
act-feedback). The assistant goes through.act/, the generated files anddocs/ai/, writes one entry per finding (two to six sentences), previews the batch withfeedback.py --planand sends it under your mode and cadence.
A bug in the template itself (a script or skill that fails, two rules that contradict each other, a rule that never fires) is stored and, where consent allows, sent at once, bypassing the cadence. It still never bypasses consent: with feedback: off it stays in the outbox.
What is never sent
Section titled “What is never sent”Every string that could leave the project runs through a privacy check first: credential-like words, mail addresses, IP addresses, absolute paths, long hex values and any URL other than the feedback endpoint or github.com. A match is not silently stripped. Nothing is sent, and the reason is reported so the entry can be rewritten without that part. Nothing about your project belongs in an entry anyway: no names, paths, numbers, code or people, and no praise, only what concretely helped or was missing.
The local copy
Section titled “The local copy”- Every send writes a full copy of its payload to
.act-local/feedback/sent/(gitignored, never leaves your checkout). Pending entries and bookkeeping live next to it in.act-local/feedback/. - The project’s journal gets one line per send: date, kind, number of entries and schema version, never content or titles.
See also the configuration reference for the three keys, and Configuration for how the file works.