Skip to content

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.

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.

  1. A sentence after the trigger, for example feedback: the update left a file behind. That sentence is the message itself, sent unchanged, even with feedback: off. With off, 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.
  2. The trigger alone (the skill act-feedback). The assistant goes through .act/, the generated files and docs/ai/, writes one entry per finding (two to six sentences), previews the batch with feedback.py --plan and 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.

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.

  • 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.