Blog

Aixgo v0.7.4: the chat CLI is scriptable

Catching up on v0.7.1 through v0.7.4: one-shot chat, aixgo doctor, output caps, shell completion, and a round of security fixes.

Three framework releases have landed since v0.7.0: v0.7.1 in March, v0.7.3 in April, and v0.7.4 in May. None of them changed the library API. Almost all of the work went into the aixgo binary, and the change most likely to matter to you is that aixgo chat no longer needs a terminal.

What you get going from v0.7.0 to v0.7.4

Chat runs one-shot and reads stdin

Before v0.7.3, aixgo chat was interactive only. It now takes a prompt on the command line with -p and exits once the answer is done:

bash
aixgo chat -p "explain the retry policy in this config"

--stdin appends piped input to the prompt, and it enables itself when stdin is not a TTY, so pipes work without passing the flag:

bash
cat config/agents.yaml | aixgo chat -p "what breaks if I remove the fallback model?"

Add -o json when something downstream has to parse the result.

aixgo doctor

aixgo doctor runs a short readiness check and prints a status per area. It verifies that your Go runtime meets the project minimum, that at least one LLM provider key is configured, and that ~/.aixgo exists with restrictive permissions. Pass --config and it also parses your YAML and probes every MCP server listed in it for reachability.

bash
aixgo doctor --config config/agents.yaml --output json

It exits 0 when every check passes (warnings still count as a pass) and 1 when any check fails, so it works as a CI step as well as the thing to paste into a bug report.

Caps on tokens and output size

--max-tokens sets the response ceiling, where 0 keeps the provider default. --max-output-kib is a soft cap on non-interactive output: oversized responses get truncated and a warning goes to stderr, so a hit cap is visible rather than silent.

Completion and history

aixgo completion generates scripts for bash, zsh, fish, and powershell. Some of the suggestions are computed at completion time: --model completes against the model IDs your configured providers actually return, and --session completes against your saved session IDs.

Interactive chat now uses readline, with history persisted to ~/.aixgo/chat_history. --no-history turns that off for a session.

Security fixes

v0.7.3 carried a batch of security work: a path traversal fix (issue #131), an SSRF-safe JWK fetch, tightened permissions on files the tools write, and fixes for the critical and high findings from an Aikido scan. It also added govulncheck and kube-linter to CI as regression guards, plus regression tests covering the path traversal, SSRF, and file permission fixes. The full commit list is on the release page.

One behavior change worth knowing: chat now opens its history file with O_NOFOLLOW. If you had symlinked ~/.aixgo/chat_history elsewhere, that symlink is no longer followed.

Release by release

v0.7.4

The only commit in v0.7.4 touches the documentation site: the top navigation drops to four items and loses the Stable badge. Nothing in the module or the CLI changed. If you are already on v0.7.3, upgrading only moves your version string.

v0.7.3

Everything in the section above landed here: the CLI additions (-p and --stdin, doctor, completion, readline history, --max-tokens, --max-output-kib) and the security batch.

A note on v0.7.2, since its absence from the releases page is confusing: the tag exists (bc6261a, together with v0.7.2-prod), but no GitHub release was ever published for it. The v0.7.3 release notes compare against v0.7.1, so every v0.7.2 commit is listed there instead. go get ...@v0.7.2 resolves fine. There is just no release page to link.

v0.7.1

Two fixes. Test environment isolation for the Anthropic provider factory, and a sort in the interactive model picker so priority models are offered in priority order rather than in whatever order the provider API returned them.

Upgrading

bash
go get github.com/aixgo-dev/aixgo@v0.7.4

For the CLI binary:

bash
go install github.com/aixgo-dev/aixgo/cmd/aixgo@v0.7.4

None of the three release notes flag a breaking change. The CLI work is all new flags and new subcommands, and no library API moved. The O_NOFOLLOW change on the chat history file is the one spot where existing behavior differs, and it only reaches you if that file was a symlink.

releaseclisecuritychatdeveloper-experience

Ready to build one?

The quick start takes four steps and ends with a running multi-agent system.