Changelog
Version history and changes for Zé Papagaio.
v0.1.29latest2026-04-27
- •🐛 Installer kept exiting silently at 'Checking required ports...' — in 3 more spots not covered by the 0.1.28 fix. The bash 3.2 `set -e` propagation bug appeared in populate_docker_ps_cache (`[ "$ZE_DOCKER_PS_CACHE_LOADED" = "1" ] && return 0` failed on first call, hitting EVERY fresh install), in find_existing_vaults (same form, hits users without prior Obsidian vault), and in the port-reuse for-loop reading CONFIG_ENV (`__existing=$(grep | pipe)` with pipefail aborted when grep didn't find the key). All replaced with `if cmd; then return 0; fi` + `|| true` on the pipe. Bonus: added `prepublishOnly` guard in npm-wrapper that rejects publish if it detects regression of the 2 known patterns.
v0.1.282026-04-27
- •🐛 Installer was exiting silently on macOS when the first default port was occupied — critical bug that 0.1.27 didn't address. check_port_free used `cmd; return $?` — in macOS bash 3.2 (default /bin/bash), set -e propagates into functions called in if, historical behavior different from bash 4+/5. When python3 socket.bind returned != 0 (port busy), the script aborted before reaching return $? — user saw 'silent exit during port scan'. Bash 4+ doesn't have this behavior, hence it passed on Linux. Fix: replaced every `cmd; return $?` with `if cmd; then return 0; else return 1; fi` (POSIX form, captures exit code on any bash version). Reproduced and validated.
v0.1.272026-04-27
- •🐛 Port pre-flight froze on macOS with Docker Desktop in slow wake-up. In 0.1.26, is_our_container_on_port called docker ps per tested port — and find_free_port scans up to 100 alternatives per service × 6 services = up to 600 calls worst case. On macOS with Docker Desktop sleeping (1-2s/call), pre-flight got stuck for 10-20 min. Fix: docker ps cached once, with a 3s timeout via kill -0 polling (portable to bash 3.2 macOS, no dependency on coreutils timeout). Bonus: progress indicator (. every 10 ports tested) in find_free_port so nobody else thinks it froze.
v0.1.262026-04-24
- •🚀 Pre-flight port check in install.sh: before bringing up Redis/Neo4j/MinIO/Infinity, verifies the default port is free. On conflict, suggests the next free port (accepts Y/n/custom port) or picks automatically with --auto-port. compose.yml files now read ${ZE_REDIS_PORT:-6379} etc, persisting the choice in ~/.config/zepapagaio/env. New ze portas (alias ports) command lists all current ports, highlighting any that diverge from the default.
v0.1.252026-04-23
- •✨ Two new skills in seeds/skills-library/: bash-portability-macos (10 concrete traps when bash scripts cross Linux↔macOS — bash 3.2, BSD vs GNU, flock keg-only, get.docker.com, 4-byte emoji, locale, etc) and docker-multi-arch-and-rosetta (handling amd64-only images on Apple Silicon, docker manifest inspect, platform override, when Rosetta is worth it). Available via skill-autopilot on any fresh install.
v0.1.242026-04-23
- •🔧 docker compose up was failing on Apple Silicon with 'no matching manifest for linux/arm64/v8' because michaelf34/infinity:latest-cpu only has amd64 build. Added platform: linux/amd64 to the rag compose — OrbStack/Docker Desktop run via Rosetta 2 on ARM Macs, ~2-3x perf hit but unnoticeable for personal vault use.
v0.1.232026-04-23
- •🔧 pipx not found was killing the testing component install on macOS. Now calls pkg_install pipx (brew on mac, apt/dnf/pacman on Linux) with a fallback to python3 -m pip install --user pipx + PATH export for environments without a package manager.
v0.1.222026-04-22
- •🔧 Root cause found for empty banner on macOS: assigning a 4-byte emoji literal (PARROT_INLINE="🦜") in bash 3.2 under LC_CTYPE=C can produce an empty string. 🦜 is U+1F99C (outside BMP, 4 bytes UTF-8) — macOS /bin/bash doesn't preserve those bytes in literal assignments when locale is C. Node spawn can inherit LC_CTYPE=C even when the terminal is UTF-8. Fix: set via printf '\xf0\x9f\xa6\x9c' (raw hex bytes), byte-level, locale-independent.
v0.1.212026-04-22
- •🔧 Banner rendered $PARROT_INLINE empty on macOS. The 0.1.20 detection used inline elif case ... esac; then — a syntax bash 3.2 (still default at /bin/bash on macOS) parses unpredictably. Rewritten to bash 3.2-proof code with an explicit > fallback at the top so the var is never empty.
v0.1.202026-04-22
- •🔧 The banner was falling back to ASCII > instead of 🦜 even on Macs. The old detection required 3 conditions (TTY + locale charmap + LANG), and when run via npx the Node pipe broke the isatty check. Fix: macOS always uses emoji (Terminal.app/iTerm2/Warp have rendered emoji natively since ~2010); Linux still uses locale-based detection.
v0.1.192026-04-22
- •🔧 The banner was showing $PARROT_INLINE literal instead of the 🦜 emoji. The heredoc was single-quoted (<<'EOF'), which blocks variable expansion in bash. Replaced with <<EOF — now renders 🦜 (or > on terminals without emoji support).
v0.1.182026-04-22
- •🔧 macOS: date -Iseconds doesn't exist on BSD date. Replaced with portable date -u +%Y-%m-%dT%H:%M:%SZ in install.sh and scripts/ze — was silently producing broken timestamps.
- •🔧 macOS: sed -i 'X' file is BSD-incompatible (BSD needs sed -i '' 'X' file). The OBSIDIAN_API_KEY rewrite would fail on macOS. Replaced with grep -v + mv, works identically on every POSIX sed.
v0.1.172026-04-22
- •🔧 macOS: install was calling curl get.docker.com | sh, which only works on Linux. Now detects macOS and shows two options: OrbStack (brew install --cask orbstack) or Docker Desktop (brew install --cask docker). Neither can be fully automated on macOS — both require accepting a license and launching the app once for the daemon to start.
- •🔧 macOS: the docker compose plugin check was trying to download the Linux binary. Docker Desktop and OrbStack ship docker compose built-in; if it's not available on macOS the message now says 'app not running, open Docker Desktop/OrbStack'.
- •🔧 macOS: the 'docker not running' fallback was calling systemctl start docker, which doesn't exist on macOS. Now shows a platform-appropriate message.
v0.1.162026-04-22
- •🔧 macOS Apple Silicon: install failed with 'Falha ao instalar flock'. Homebrew installs util-linux as keg-only (binaries in /opt/homebrew/opt/util-linux/bin, not on PATH) to avoid a collision with macOS's native uuid.h. The installer now detects macOS and prepends the keg-only util-linux bin to the session's PATH.
- •🔧 flock is now optional. If unavailable, install continues with a warning and vault-autocommit runs without the lock — git commit is atomic, worst case is a redundant commit. git, curl, python3 remain hard requirements.
v0.1.152026-04-22
- •✨ New default embeddings provider: local Infinity. Docker container running intfloat/multilingual-e5-small (384 dim, multilingual), no API key, no marginal cost, offline. Semantic search is now 100% local by default.
- •The installer now asks which embeddings provider to use: local Infinity (default) or OpenAI. If Infinity is picked, OPENAI_API_KEY becomes optional (only the multimodal component still needs it).
- •🔧 install.sh is now idempotent against orphan containers — runs docker compose down --remove-orphans before up. Resolves name conflicts when a previous install was interrupted mid-run.
- •🔧 server.py no longer auto-appends /v1 to ZE_EMBED_BASE_URL. Users now pass the exact path the provider expects (Infinity v2: no /v1; OpenAI: https://api.openai.com/v1). Enables pointing to Ollama, LocalAI, and other OpenAI-compatible backends without surprises.
v0.1.142026-04-22
- •🔒 Security: Neo4j was previously bound to 0.0.0.0 despite docs stating loopback-only. Fixed in components/graph/docker-compose.yml — both ports (7474, 7687) now bind to 127.0.0.1, matching Redis and MinIO. Users running 0.1.13 or earlier on untrusted networks (cafés, coworking WiFi) should update immediately.
- •Added SECURITY.md with coordinated disclosure channel, supported versions, and known limitations (including the user-wide hook scope caveat).
- •Added CHANGELOG.md (this file) and repository/bugs fields in package.json for vendor auditability.
- •🙏 Thanks to Pedro Ernesto (SOC 2 analyst) for the comprehensive security review that made this release possible.
v0.1.132026-04-13
- •Python 3.14 compatibility: pysqlite3-binary now uses a conditional marker (`python_version < '3.14'`). On 3.14+ the code falls back to stdlib sqlite3 — modern Pythons already ship with enable_load_extension. Before this fix, initial vault indexing would fail on Macs running Python 3.14 because pysqlite3-binary only has wheels up to cp313.
v0.1.122026-04-13
- •Neo4j auto-recovery fixed: component bind mount (not a named volume) is now actually cleaned when credentials go stale
- •Post-boot auth check via cypher-shell: if the .env password does not match the one persisted in the volume (Neo4j ignores NEO4J_AUTH on non-empty volumes), the installer resets and restarts automatically
v0.1.112026-04-13
- •Auto-recovery: install.sh detects containers in bad state (crashed, volumes with stale credentials) and cleans them up before reinstalling
v0.1.102026-04-13
- •Neo4j password is now generated automatically (32 chars), like Redis and MinIO — no more confusing "will be created now" prompt
v0.1.92026-04-13
- •Neo4j password validation: requires a minimum of 8 characters (Neo4j rejects shorter passwords and would crash the container)
v0.1.82026-04-13
- •Neo4j startup timeout bumped from 60s to 180s (first boot on Mac Docker Desktop takes longer due to virtualization)
- •Heartbeat every 30s while waiting for Neo4j, with dead-container detection to avoid unnecessary waits
v0.1.72026-04-13
- •macOS bash 3.2 compatibility: fixed "unbound variable" error when no Obsidian vault was found
- •Removed `local` usage outside functions that broke the multi-vault selection flow
v0.1.62026-04-13
- •Parrot emoji 🦜 with automatic ASCII fallback for terminals without Unicode support
v0.1.52026-04-13
- •Auto-install dependencies: Docker, uv, Claude Code, Node.js, Obsidian — all installed automatically if missing
- •Automatic Obsidian vault creation: detects existing vaults or creates a new one with .obsidian/, plugins, git init, and welcome note
- •Fix: pysqlite3-binary fallback for Pythons without enable_load_extension (common on Ubuntu via apt)
- •Fix: autoMemoryDirectory now set in settings.json — Claude recognizes Zé after install
- •Post-install screen redesigned: parrot ASCII art, step-by-step usage tutorial, and useful commands
- •Default vault renamed to ~/cofre/ai-zepapagaio to avoid collision with existing vaults
v0.1.42026-04-12
- •macOS compatibility: fallback for realpath -m (GNU/Linux-only flag)
v0.1.32026-04-12
- •Install counter: anonymous ping at end of install, API on site, live display in hero
- •Site favicon replaced with green parrot icon (was Vercel default)
- •Nav reorganized: fewer items, no overflow, hamburger menu on mobile
- •Architecture diagram in docs replaced from ASCII to styled HTML cards
- •Docs and changelog are now fully multilingual (pt-BR + en complete)
v0.1.22026-04-12
- •Installer now detects Obsidian and auto-registers the obsidian MCP server
- •Skills section added to the website landing page
- •Documentation and changelog pages added to the site
v0.1.12026-04-11
- •60 seed skills shipped (API design, debugging, Next.js, security, and more)
- •Auto-index images: hook automatically indexes relevant images without asking
- •npm packaging — npx zepapagaio init now works out of the box
v0.1.0Phase 22026-04-11
- •Unified Docker Compose — all services in a single compose.yml
- •Cache layer: Redis for tool call, RAG, and GitHub API caching
- •Storage layer: MinIO with buckets for images (30d TTL), test artifacts, and vault attachments
- •Multimodal pipeline: screenshot → GPT-4o-mini description → vault note → RAG index
- •Testing: Robot Framework + headless Playwright in isolated container
- •New hooks: auto-extract graph entities, auto-index images
- •New CLI commands: ze cache, ze imagem, ze testa, ze parar, ze voltar
v0.0.1Phase 12026-04-10
- •vault-rag MCP: semantic search via OpenAI embeddings + sqlite-vec
- •vault-graph MCP: Neo4j knowledge graph with Cypher queries
- •Autocommit hook: automatic git commits on vault changes
- •CLI ze: ze status, ze lembra, ze puxa, ze grafo, ze desinstala, ze doctor
- •Seed memory files: initial notes for bootstrapping a new vault
- •Obsidian MCP integration (optional, requires Local REST API plugin)