Skip to content

Releases: gregoryoviedo/agentower

v0.4.1 — Windows self-install & login auto-start

Choose a tag to compare

@gregoryoviedo gregoryoviedo released this 16 Sep 01:00

Highlights

  • Windows self-install & login auto-start — Agentower.exe can now self-install and register itself to start on login, mirroring the macOS flow.
  • Windows settings polish — settings hints now match the macOS wording, and the idle thresholds are documented as 2 min (completion) / 1 min (question).
  • Docs — the Windows install and auto-start flow is documented.

Assets

  • Agentower.app.zip — macOS: ad-hoc signed menu-bar app (arm64). Unzip and drag to /Applications. Requires macOS 13.0+.
  • Agentower.exe — Windows: self-contained tray app (win-x64). Requires Windows 10/11 x64; no .NET install needed.

Requirements

  • Go 1.22+ (only if you build the remote-bot binary yourself)
  • At least one of: opencode, claude, kiro, copilot, codex, agy on PATH
  • macOS 13.0+ for the macOS app; Windows 10/11 x64 for the Windows app

v0.4.0 — Windows wrapper & Codex/Antigravity support

Choose a tag to compare

@gregoryoviedo gregoryoviedo released this 15 Sep 23:20

Highlights

  • Native Windows wrapper — new Agentower.exe (C#/.NET 8 WinForms) lives in the notification area with feature parity to macOS: settings, agent detection with Windows paths, idle notifications and login auto-start. It is published as a self-contained win-x64 binary, so no .NET runtime is required.
  • Codex agent — headless codex exec --json - transport, resumed with codex exec resume <id> --json -. History is read from ~/.codex/sessions/**/rollout-*.jsonl (AGENTOWER_CODEX_STATE_DIR to override). Auto-approval flags by default, overridable via AGENT_CODEX_ARGS.
  • Antigravity agent — headless agy -p --output-format stream-json transport, resumed with --conversation <id>. Reads the readable transcript_full.jsonl / history.jsonl (the per-conversation .db files are opaque protobuf). CLI args overridable via AGENT_ANTIGRAVITY_ARGS.
  • Structured questions (opencode) — pending questions now suppress the completion notification and are rendered one Telegram message per question with q| / qd| option buttons; free-text answers are routed back through ReplyQuestion.
  • Session resume — /resume fans out to every SessionLocator (opencode HTTP, Claude JSONL, Kiro JSONL, VS Code Copilot) and /continue reactivates the last completed session.
  • Auto-start — both wrappers launch the bot automatically on start when the config is valid.
  • Cross-platform core — agent detection and subprocess handling are split per OS (process_unix.go / process_windows.go); PATH is augmented on GUI launches (Finder/launchd and the Explorer environment) so agents installed in user bin dirs are found.
  • Detection & icons — detection probes PATH and then app bundles/installers (VS Code Copilot, Kiro, Antigravity); refreshed menu-bar and app icons.
  • Docs — README, DESIGN, PRODUCT, SECURITY, CONTRIBUTING plus the macOS and Windows wrapper READMEs updated.

Assets

  • Agentower.app.zip — macOS: ad-hoc signed menu-bar app (arm64). Unzip and drag to /Applications. Requires macOS 13.0+.
  • Agentower.exe — Windows: self-contained tray app (win-x64). Requires Windows 10/11 x64; no .NET install needed.

Requirements

  • Go 1.22+ (only if you build the remote-bot binary yourself)
  • At least one of: opencode, claude, kiro, copilot, codex, agy on PATH
  • macOS 13.0+ for the macOS app; Windows 10/11 x64 for the Windows app

v0.3.0 — Multi-agent registry & macOS Settings

Choose a tag to compare

@gregoryoviedo gregoryoviedo released this 09 Sep 06:10

Highlights

  • Multi-agent registry — single bot now drives opencode (HTTP), Claude Code, Codex, Kiro (stdio JSON) and GitHub Copilot (LSP). Pick an agent per chat from Telegram with /agent or /agents.
  • macOS app — Settings tabbed UI — agent detection in PATH, better empty/error states, multi-agent section in the menu-bar app.
  • Persistence — new agent_state table + agent_kind migration. Workspace, project, session and active agent survive restarts.
  • Refactor — opencode moved into internal/adapter/agents/opencode, introduces AgentKind and AgentAdapter port.
  • Tests — coverage for agent management and session handling.
  • Docs — refreshed README, DESIGN, PRODUCT, SECURITY, CONTRIBUTING and macOS README.

Asset

  • Agentower.app.zip — ad-hoc signed macOS menu-bar app. Unzip and drag to /Applications. macOS 13.0+.

Requirements

  • Go 1.22+ (only if you build the binary yourself)
  • At least one of: opencode, claude, codex, kiro, copilot on PATH

v0.1.0 — macOS menu-bar wrapper

Choose a tag to compare

@gregoryoviedo gregoryoviedo released this 20 Aug 01:43

✨ Novedades

  • App nativa de macOS (OpenCodeRemote.app, arm64, ~12 MB)
    • Icono en la barra de menús con toggle estilo Bluetooth.
    • Formulario de Settings en SwiftUI (WORKSPACE_ROOT, token de Telegram, chat ID, puerto y bin de OpenCode, autostart, TELEGRAM_API_ROOT, TELEGRAM_PROXY_URL).
    • Auto-inicio al login vía SMAppService.mainApp.
    • Logs accesibles desde el menú (~/Library/Logs/OpenCodeRemote/bot.log).
    • Build reproducible con make app (XcodeGen + xcodebuild + codesign ad-hoc).
  • Binario Go endurecido:
    • TELEGRAM_API_ROOT y TELEGRAM_PROXY_URL ahora se leen del entorno o del .env, y el wrapper los reenvía al proceso hijo en proc.environment (antes se quedaban en el .env y nunca llegaban al bot).
    • Respuestas JSON del cliente OpenCode capadas a 32 MB con io.LimitReader para evitar OOM ante un server rebelde.
    • domain/errors.go ahora expone sentinels (ErrUnauthorizedNavigation, ErrServerNotRunning, ErrSessionRequired, ErrProjectRequired, ErrWorkspaceNotConfigured) para que adapters y callers puedan hacer errors.Is.
    • Renombrado usecase.BotHandler a usecase.Handler para eliminar la colisión con el port domain.BotHandler.
    • Eliminado código muerto: domain.AppConfig, domain.OpenCodeEvent, OpenCodeClient.SubscribeEvents y el pipeline SSE completo (unas 80 líneas sin caller).
  • Wrapper Swift más robusto:
    • TELEGRAM_API_ROOT y TELEGRAM_PROXY_URL se exportan al binario Go en proc.environment (bug crítico corregido).
    • StatusBarController ya no leakea el observer de NotificationCenter (se desuscribe en deinit).
    • LoginItemManager.isInstalledInApplications exige match exacto de /Applications/ o ~/Applications/ (antes matcheaba falsos positivos como ~/Downloads/.../Applications/).
    • El "Tiempo activo" del popover refresca cada segundo con un Timer.publish(every: 1).
    • applyPaste(.port) ahora muestra feedback en lugar de descartar silenciosamente valores inválidos.
    • savedAt se limpia cuando un guardado falla.
    • Quitada la duplicación stateSubject + onStateChange en AppDelegate; queda una sola vía de notificación.
  • Documentación:
    • README.md: sección nueva App nativa de macOS con build, instalación, Gatekeeper, auto-inicio, toggle y prerequisitos (Xcode, XcodeGen, Go, Pillow).
    • docs/DESIGN.md: nueva sección Why two different architectures in one project explicando por qué Go usa hexagonal y Swift usa MVVM, y por qué la frontera entre los dos runtimes es un contrato de proceso (.env + Process), no código compartido.
    • docs/PRODUCT.md: el wrapper Swift queda registrado en Implemented; Out of scope se ajusta (sigue siendo single-user / single-chat; el wrapper no toca la red).

🐛 Bug fix crítico

TELEGRAM_API_ROOT y TELEGRAM_PROXY_URL configurados en Settings del wrapper ahora sí llegan al proceso Go (antes se escribían al .env pero el bot los leía con os.Getenv, no del .env). Si usás un mirror de la API o un proxy corporativo, esto te afecta directamente.

📦 Artefactos

  • OpenCodeRemote.app — bundle macOS arm64 ad-hoc firmado, ~12 MB.
    Embeido: binario remote-bot arm64 (~10 MB) generado con go build -trimpath -ldflags="-s -w".

🔧 Instalación

# 1. Mover a /Applications
cp -R OpenCodeRemote.app /Applications/

# 2. Quitar marca de Gatekeeper (no tiene Developer ID)
xattr -dr com.apple.quarantine /Applications/OpenCodeRemote.app

# 3. Abrir
open /Applications/OpenCodeRemote.app

Primera vez: abrir Settings…, llenar los 3 campos obligatorios, Guardar. A partir de ahí el toggle funciona.

🧪 Uso sin wrapper (CLI puro)

go build -o remote-bot ./cmd/remote-bot
cp .env.example .env
$EDITOR .env
./remote-bot

⚠️ Notas

  • App ad-hoc firmada. macOS la bloquea en la primera apertura; click-derecho → Abrir, o xattr -dr com.apple.quarantine /Applications/OpenCodeRemote.app.
  • arm64-only (sin slice Intel por ahora).
  • Sandbox deshabilitado en el wrapper porque hace spawn de un binario externo y escribe en ~/Library/....