1.5 Commit a config.example.yaml showing the two-account schema with placeholder keys
1.6 Add a minimal README.md with install, config schema, env-var fallback, and example output sections
2. Config loader (internal/config)
2.1 Define structs Config{Accounts []Account} and Account{Name, APIKey string} with yaml:"..." tags
2.2 Implement DefaultPath() string honoring $XDG_CONFIG_HOME with fallback to ~/.config/zenmux-usage/config.yaml
2.3 Implement Load(path string) (*Config, error) that parses YAML, validates required fields and unique names, and returns a typed ErrParse on schema/validation failure
2.4 Emit a stderr warning (not fatal) for unknown top-level or per-account keys
2.5 Implement WarnIfLooseMode(path string, w io.Writer) that checks POSIX mode bits and prints a one-line warning if 0044 bits are set; no-op on Windows
2.6 Implement Resolve(cfg *Config, flag ResolveFlags) ([]Account, error) encoding the precedence: --api-key → --account filter → all accounts → env-var fallback → error
2.7 Write tests with fixtures under internal/config/testdata/: valid two-account, duplicate names, missing api_key, empty accounts list, unknown field warning, env-var fallback path, --account miss
6.5 Dispatch to JSON or human renderer based on --json and the single-vs-multi account count
6.6 Compute the final exit code per design §9 (all-same-cause specific code, mixed → 1, all success → 0)
6.7 Write all error messages to stderr; never write partial human output before a CLI-global error
6.8 Stamp --version output with a version constant (ldflags-overridable for release builds)
7. Integration and packaging
7.1 Add a Makefile (or justfile) with build, test, lint, run targets
7.2 Verify go vet ./... and go test ./... pass cleanly
7.3 Cross-compile sanity check for darwin/amd64, darwin/arm64, linux/amd64 via GOOS/GOARCH
7.4 Manual end-to-end: populate config with two real accounts, run zenmux-usage, confirm both blocks render and USD summaries match; run zenmux-usage --account <name> to verify filtering; run zenmux-usage --json | jq '.[0].data.plan.tier'
7.5 Verify each exit code manually: unknown --account (2), no config + no env (3), bad key single-account (4), invalid timeout single-account (6), malformed YAML (7), mixed outcomes (1)
8. Documentation
8.1 Update README.md with a screenshot or ASCII sample showing a multi-account render
8.2 Document the YAML config schema, default path, --config flag, and chmod 600 recommendation
8.3 Document exit codes and the multi- vs single-account exit-code rule
8.4 Document --json mode shape differences between single and multi account, with one jq example for each