Send us feedback
When your coding agent finds a bug in Kindgi itself, it writes it to
FEEDBACK.md in your pack with kindgi feedback write. Sending it to us is
a second step, and it's yours. Nothing leaves your machine until you've seen
exactly what's sent and said yes.
Send a report
Section titled “Send a report”Preview it first:
pnpm exec kindgi feedback submit --previewIt prints the report exactly as it would be sent, after
redaction, with its digest. Nothing is sent. With
no entry named, the report holds every entry in FEEDBACK.md that wasn't
sent yet and isn't marked fixed. To send particular entries, name them by id
or hash (kindgi feedback submit 2026-10-15.1 --preview).
Read it. If something in it shouldn't leave your machine, change the entry
in FEEDBACK.md and preview again. When it's right, send it with the
preview's digest:
pnpm exec kindgi feedback submit --yes=<digest>It sends only if the report is still exactly what the preview showed. If
anything changed since, nothing is sent, and it asks you to preview again.
At a terminal, kindgi feedback submit without --yes shows the same
preview and asks Send this to Kindgi (https://access.kindgi.com)? [y/N].
Only y or yes sends. With no terminal and no --yes, nothing is sent.
Your coding agent works the same way: the kindgi-framework-feedback skill
has it preview the report, show it to you, and send it only after you say
yes. If Kindgi may have received a report, it tells you, and leaves sending
it again to you.
Once a report is sent, each of its entries in FEEDBACK.md gains a line with
the report's id:
- **submitted:** 2026-10-15T15:02:11.000Z · **report:** fbr_…The key that withdraws the report stays on your machine, in
~/.kindgi/feedback/keys.json, which only you can read. It's never printed.
The report id isn't a secret, so FEEDBACK.md can be committed.
A report holds at most 20 entries and 64 KiB. An entry's title can be at
most 200 characters, and its body at most 16 KiB after redaction. With no
entry named, the oldest entries that fit are sent, and the rest wait for the
next run. kindgi feedback submit exits 0 when it sent the report, or had
nothing to send, and 1 otherwise.
When a send fails, it says whether the report may have arrived, and
FEEDBACK.md is left as it was:
Nothing reached Kindgi: …It never connected. Send it again when you can.Nothing was sent: the intake is taking no more reports for now, with how long to wait when the intake says.The intake refused the report (…), with why. Nothing was stored.Kindgi may have received it: …The answer was lost, came too late, or couldn't be read. Sending it again makes a second report. If the first one arrived, it can't be withdrawn from this machine, since its key never came back. Kindgi deletes it after 90 days.
What's sent
Section titled “What's sent”The report goes to Kindgi's private intake, at
https://access.kindgi.com/feedback/reports. After redaction, it holds:
- From each entry: its id and hash, its title and body, its kind and
severity, who found it (
by), its date, and the SDK and CLI versions it records. - About your machine: the CLI's version, the operating system and its
release, the CPU architecture, the Node.js version, the pack's language,
and
kindgi doctor's checks, each as its id and status only (pass,warn,failorskip).
Nothing else is sent: no file, no env value, no key or token, no path
outside the pack, and not the pack's name, unless an entry's text carries
it past redaction. The preview is the report, byte for byte. The intake
refuses a report with any other field, at any level: it answers
400 invalid-request, naming the field but never its value
(client.hostname is not a field here.), and stores nothing.
What redaction changes
Section titled “What redaction changes”Before the preview, the CLI redacts each entry's title and body, so the preview shows what redaction did, and which of its rules changed each entry:
- A private key's block becomes
[redacted]. - A value from the pack's env files becomes
[redacted]: every.env*file at the pack's root, the filesdev.envFilesnames, and.kindgi/secrets.env. That's a value of 8 characters or more, or of 4 or more under a name that looks secret. A short value likePORT=3000stays. - Known shapes of keys and tokens become
[redacted]: model providers' and clouds' keys,Bearer …, and the value after a name that looks secret (API_KEY=…,--api-key=…,"token": "…", anAuthorization:line). A Kindgi key keeps its prefix and its last four characters. - In a URL, the user and password become
[redacted], and so does each query value. The host and the path stay. - An email address becomes
[email]. - A path inside the pack becomes relative (
./src/tool.ts). Your home folder on its own becomes~. A path under your home folder, or under a system or user folder (/Users,/home,/tmp,C:\, …), becomes[path]. An API route like/v1/secretsstays.
Redaction can't catch everything in free text, a customer's or a host's name for one. The preview is the check.
What Kindgi keeps
Section titled “What Kindgi keeps”- Who reads them: only Kindgi's maintainers, by hand.
- For how long: a report is kept 90 days from when it arrives, then deleted, usually within a day. Kindgi also keeps a count of the reports about the same issue, and what became of it, with none of a report's words. That lasts as long as the issue's newest report.
- Your IP address: the intake doesn't store it. Cloudflare carries every request to the intake, so it sees your address. Kindgi's request log at Cloudflare keeps it for up to 7 days, and Kindgi counts requests per address there for a minute, to limit them. Google Cloud, where the intake runs, logs only Cloudflare's address.
- Deleting a report: withdraw it, as below. Its text is cleared at once.
Hear back
Section titled “Hear back”pnpm exec kindgi feedback statusIt asks what became of the reports you sent, and answers with each one's state:
| State | What it means |
|---|---|
received |
It arrived, and no one has triaged it yet. A report about an issue that's already fixed, or won't be, reads received until it's triaged again. |
known |
It's a known issue. The answer links the issue when it's public. |
fixed |
It's fixed, in the version the answer names. FEEDBACK.md marks the entry fixed. |
wont-fix |
It won't be fixed. The answer says why, in a line. |
withdrawn |
You took it back. |
unknown |
The intake doesn't have it: it never arrived, or its 90 days are over. |
It sends only the report ids. Unless you name a report, it asks about each
at most once a day. It never asks again about a report that's fixed, won't
be fixed or was withdrawn, and asks about one the intake doesn't have only
when you name it. Your coding agent runs it at the start of a
session when FEEDBACK.md has entries that were sent.
Take a report back
Section titled “Take a report back”pnpm exec kindgi feedback withdraw 2026-10-15.1Name an entry by its id or hash, or a report by its id (fbr_…). The intake
clears the report's text and your machine's details at once. Until its 90
days are over, it keeps the report's id, its dates, and the issue it was
counted under.
Only the machine that sent a report can withdraw it, since its key is there.
In FEEDBACK.md, the entry stays, and its submitted line is marked
withdrawn. To send it again, name it: kindgi feedback submit <id>.
Turn sending off
Section titled “Turn sending off”export KINDGI_FEEDBACK_SUBMIT=offThen kindgi feedback submit sends nothing, --preview included, and exits
1. kindgi feedback write still records entries, and status and
withdraw still work. With on, or with the variable unset, it sends. Any
other value refuses as off does, so a typo never sends. The CLI reads it
from its environment: set it in your shell or your CI job, not in the
pack's env files.
All of the commands' options are in the CLI reference.