scripts/install.sh tells the operator, twice, that the config.yaml it installs is the paper profile and cannot place a live order. It is the production config in auto_trade.mode: confirm.
Where
scripts/install.sh, step 6/7, the branch that copies the config:
say " installing the release's default config.yaml beside the venv (the paper profile)"
cp "${TMP_DIR}/config.yaml" "${KEEL_DIR}/config.yaml"
and again in the closing next-steps block:
printf ' paper: config.yaml beside the venv is the default paper profile -- nothing in\n'
printf ' it can place a live order. To fetch candles you will want a free,\n'
What the file actually is
The asset the script downloads — https://github.com/CodeGateSoftware/keel/releases/download/v0.11.2/config.yaml — opens with:
# keel PRODUCTION configuration -- the `config.yaml` attached to a GitHub Release.
#
# Shipped in `auto_trade.mode: confirm`: keel previews every order and waits for your explicit
# approval before placing it. It is ready for live use, but it will never trade unattended off a
# fresh download -- that is a separate, deliberate decision.
and contains:
auto_trade:
# confirm = preview + explicit approval for every order (the safe live default).
mode: confirm
release.yml produces it with cp keel/templates/config.live.yaml config.yaml, and the workflow's own comment calls it "the confirm-mode production config".
keel's own CLI draws the line clearly. keel/cli.py, init-config --live:
"Write the PRODUCTION template (mode: confirm) instead of the dev one (mode: paper)."
"--live writes the same production config that is attached to a GitHub Release: real allowlist/caps in mode: confirm, which previews every order and waits for your approval. Without it you get the dev template in mode: paper, which places nothing at all."
and elsewhere: "config.auto_trade.mode (paper simulates, confirm is live)".
So confirm is the live profile with a per-order approval gate. It is not paper.
Why it matters
The installer's next-steps block prints the "paper profile / cannot place a live order" reassurance directly above the line telling the operator to put a Coinbase CDP key in ~/.keel/.env. An operator who reads the reassurance, adds credentials, and later approves a preview will place a real order from a config they were told was simulation-only.
The gate makes this hard to do accidentally, which is good design — but the reassurance is what someone leans on when deciding how carefully to treat the file, and it is wrong in the direction that costs money.
Suggested fix
Say what it is in both places:
say " installing the release's production config.yaml beside the venv (auto_trade.mode: confirm --
previews every order and waits for your approval; not the paper template)"
and in next-steps, point at the paper template rather than claiming to have installed it:
config: config.yaml beside the venv is the release's PRODUCTION config, in
auto_trade.mode: confirm -- keel previews each rule-driven entry and asks
before placing it (a y/N prompt, defaulting to no). The kill switch fails
closed, so a fresh deployment trades nothing until `keel resume`.
For a config that cannot place a live order at all, run from ~/.keel:
./.venv/bin/keel init-config --force (writes the mode: paper template)
Also worth a look
docs/desktop-install.md and the release-notes template both promise a singular SHA256SUMS.txt. release.yml emits one file per leg: SHA256SUMS-macOS-arm64.txt, SHA256SUMS-macOS-x86_64.txt, SHA256SUMS-Windows-x86_64.txt.
README.md's "Try it in five minutes" says "the macOS/Windows app is on the [releases page]". That is true only of v0.11.0, which carries keel-0.11.0-arm64.dmg, keel-0.11.0-x86_64.dmg and keel-0.11.0-windows-x86_64.zip. Neither v0.11.1 nor v0.11.2 carries any bundle, because release.yml's desktop input defaults to build rather than publish-unsigned. A reader following the README to the latest release finds wheels only.
Found via
Syncing keeltrading.com against keel. The website had faithfully mirrored the installer's wording; the false claim was caught in review and corrected on the site in CodeGateSoftware/keeltrading.com#88.
scripts/install.shtells the operator, twice, that theconfig.yamlit installs is the paper profile and cannot place a live order. It is the production config inauto_trade.mode: confirm.Where
scripts/install.sh, step 6/7, the branch that copies the config:and again in the closing next-steps block:
What the file actually is
The asset the script downloads —
https://github.com/CodeGateSoftware/keel/releases/download/v0.11.2/config.yaml— opens with:and contains:
release.ymlproduces it withcp keel/templates/config.live.yaml config.yaml, and the workflow's own comment calls it "the confirm-mode production config".keel's own CLI draws the line clearly.
keel/cli.py,init-config --live:and elsewhere: "
config.auto_trade.mode(papersimulates,confirmis live)".So
confirmis the live profile with a per-order approval gate. It is not paper.Why it matters
The installer's next-steps block prints the "paper profile / cannot place a live order" reassurance directly above the line telling the operator to put a Coinbase CDP key in
~/.keel/.env. An operator who reads the reassurance, adds credentials, and later approves a preview will place a real order from a config they were told was simulation-only.The gate makes this hard to do accidentally, which is good design — but the reassurance is what someone leans on when deciding how carefully to treat the file, and it is wrong in the direction that costs money.
Suggested fix
Say what it is in both places:
and in next-steps, point at the paper template rather than claiming to have installed it:
Also worth a look
docs/desktop-install.mdand the release-notes template both promise a singularSHA256SUMS.txt.release.ymlemits one file per leg:SHA256SUMS-macOS-arm64.txt,SHA256SUMS-macOS-x86_64.txt,SHA256SUMS-Windows-x86_64.txt.README.md's "Try it in five minutes" says "the macOS/Windows app is on the [releases page]". That is true only of v0.11.0, which carrieskeel-0.11.0-arm64.dmg,keel-0.11.0-x86_64.dmgandkeel-0.11.0-windows-x86_64.zip. Neither v0.11.1 nor v0.11.2 carries any bundle, becauserelease.yml'sdesktopinput defaults tobuildrather thanpublish-unsigned. A reader following the README to the latest release finds wheels only.Found via
Syncing keeltrading.com against keel. The website had faithfully mirrored the installer's wording; the false claim was caught in review and corrected on the site in CodeGateSoftware/keeltrading.com#88.