Skip to content
Back to skills

Openamer Update Recovery

BSecurity

Recover from a failed or broken `openamer update`.

  • 5 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 4, 2026
ai-agentspythonshellbashgitbackend

Works with

  • terminal
  • cli

Security analysis

B89/100
  • highPerforms destructive filesystem operations
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro shows the line behind each finding and how to fix it

Scanned October 4, 2026

npx -y skills add openamer/openamer --skill openamer-update-recovery --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Openamer Update Recovery?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Openamer Update Recovery
[![Security: B — Skills Directory](https://www.skillsdirectory.com/api/skills/openamer-openamer-update-recovery/badge)](https://www.skillsdirectory.com/skills/openamer-openamer-update-recovery)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: openamer-update-recovery
description: Recover from a failed or broken `openamer update`.
version: 1.0.0
author: OpenAmer Agent
license: MIT
platforms: [windows, linux, macos]
metadata:
  openamer:
    tags: [openamer, update, recovery, troubleshooting, self-update, windows]
    related_skills: [openamer-agent]
---

# OpenAmer Update Recovery Skill

Recover from a failed or interrupted `openamer update`. The update is a
multi-stage process (git pull → dependency install → optional ZIP fallback),
and any stage can fail partway, leaving the install in a half-updated state
that then misbehaves on every subsequent launch. This skill diagnoses the
marker lifecycle and walks through a clean reinstall.

## When to Use

- `openamer update` printed `✗ ZIP update failed` / `Git update failed` / a
  non-zero exit.
- Every `openamer` launch now prints `⚠ A previous openamer update was
  interrupted mid-install — finishing dependency installation now...` and then
  `✗ Could not auto-recover the interrupted install.`
- `openamer --version` shows "Up to date" but the recovery warning still fires.

## Prerequisites

- A working `git` checkout of the install (the git stage usually succeeds even
  when deps fail).
- The managed `uv` binary (see "Locating the install" below).
- Shell access to the install directory.

## Locating the install

The install directory and the managed `uv` binary are platform-specific. Do
NOT hardcode `~/.openamer/openamer-agent` — that is the *data* directory, not
the install. The reliable way to find the install directory is:

```bash
openamer --version
# → "Install directory: <path>"  ← this is the install dir (contains openamer_cli/)
```

Typical locations:

- **Windows (native):** `%LOCALAPPDATA%\openamer-laptop\openamer-agent`
- **Linux/macOS (managed):** `~/.openamer/openamer-agent` (or `$OPENAMER_HOME/openamer-agent`)

The managed `uv` binary lives at `$OPENAMER_HOME/bin/uv` (on Windows
`%LOCALAPPDATA%\openamer-laptop\bin\uv.exe`), NOT inside the install dir.

## How to Run

Run the recovery steps below with the `terminal` tool. On Windows the venv
Python lives at `venv/Scripts/python.exe` (NOT `venv/bin/`). The `VIRTUAL_ENV`
env var is required so `uv` targets the project venv instead of creating a new
one.

## Quick Reference

```bash
cd <install-dir>                 # from `openamer --version` → "Install directory:"
VIRTUAL_ENV="$(pwd)/venv" <uv> pip install -e ".[all]"
rm -f .update-incomplete .update-incomplete.lock .lazy-refresh-incomplete
rm -rf apps.openamer-update-staging apps.openamer-update-old
openamer --version   # must print version with NO ⚠ warning
```

## Procedure

### The marker lifecycle (root cause of the "stuck" symptom)

A failed update writes a breadcrumb file at the **install directory root**
(the directory that contains `openamer_cli/`), NOT under `$OPENAMER_HOME`.
On every launch, `openamer_cli/main.py::_recover_from_interrupted_install()`
sees the marker and tries to finish the install. If that recovery itself
fails, it **leaves the marker in place**, so the next launch tries again —
forever. The fix is to make the install actually succeed, THEN delete the
marker.

Key facts (from `openamer_cli/main.py` and `_early_recovery.py`):

- `.update-incomplete` → core `.[all]` install was interrupted. Recovered ONLY
  by a full `.[all]` reinstall; narrow import-probe repair never clears it.
- `.lazy-refresh-incomplete` → lazy-backend refresh may have corrupted
  packages; recovered by import-probe repair.
- `.update-incomplete.lock` → single-flight guard (O_EXCL); a stale lock is
  broken after 1 hour (3600s).
- The marker is intentionally NOT cleared by the stdlib-only early-recovery
  pass — only the full recovery in `main.py` clears it, and only on success.

### Recovery steps

1. **Confirm the code is actually current** — the git stage often succeeds even
   when deps fail:
   ```bash
   cd <install-dir>
   git log --oneline -3
   openamer --version              # shows "Up to date" if git pulled fine
   ```

2. **Run the full `.[all]` reinstall manually** (this is what the auto-recovery
   tries and fails at). Use the managed uv binary, not a bare `pip`:
   ```bash
   cd <install-dir>
   VIRTUAL_ENV="$(pwd)/venv" <uv> pip install -e ".[all]"
   # fallback if uv is missing:
   ./venv/Scripts/python.exe -m pip install -e ".[all]"
   ```

3. **Delete the marker** once the install succeeds:
   ```bash
   rm -f .update-incomplete .update-incomplete.lock .lazy-refresh-incomplete
   ```

4. **Clean up update leftovers** (staging/old dirs the ZIP fallback leaves):
   ```bash
   rm -rf apps.openamer-update-staging apps.openamer-update-old
   ```

## Pitfalls

- **`openamer update` says "Already up to date!" but the marker is still there** —
  when git has no new commit, the update path skips the dependency reinstall
  entirely and does NOT clear `.update-incomplete`. The marker then keeps
  firing the recovery warning on every launch. Fix: run the manual `.[all]`
  reinstall yourself (step 2), then delete the marker. Do NOT rely on
  `openamer update` to clear it when there's nothing to pull.
- **The agent is running INSIDE the desktop app it needs to kill** — you
  cannot `taskkill` the app from your own session without killing yourself
  mid-turn. Solution: write a detached PowerShell script that (a) sleeps a few
  seconds, (b) kills `OpenAmer.exe` + `openamer.exe`, (c) runs the manual
  reinstall with `VIRTUAL_ENV` set, (d) deletes the markers on success, (e)
  restarts `openamer desktop`, and launch it with
  `Start-Process powershell -ArgumentList '-NoProfile','-ExecutionPolicy','Bypass','-File',... -WindowStyle Hidden`.
  The script survives your session's death and finishes the job. Log every
  step to a file so you can verify afterward (PowerShell `Out-File` writes
  UTF-16 — read it back with `iconv -f UTF-16LE -t UTF-8` or `tr -d '\000'`).
- **`[WinError 5] Zugriff verweigert` on the `apps` folder** — the running
  desktop app (or another OpenAmer window) holds file locks on `apps/`, so the
  ZIP fallback can't rename it. This is why the ZIP path fails on Windows. The
  git path is the primary path and works fine; the ZIP failure is non-fatal.
  To avoid it entirely, close the desktop app before updating, or run
  `openamer update` from a separate terminal.
- **`Failed to inspect Python interpreter ... venv\Scripts\python.exe`** — this
  error is often a red herring: the interpreter exists and works. The real
  blocker is usually the file-lock or a missing `VIRTUAL_ENV`. Test the
  interpreter directly (`./venv/Scripts/python.exe -c "print('ok')"`) before
  assuming the venv is broken.
- **Don't just delete the marker without a successful reinstall.** The marker
  exists because the install is genuinely incomplete. Deleting it first can
  leave a half-installed venv that fails later. Reinstall → verify → then
  delete.
- **`uv pip install -e .` (base only) is not enough** — the recovery path
  requires `.[all]` (extras). A base-only install leaves the marker's
  condition unmet.
- **The `openamer update` command restarts the gateway and kills running
  agents** — it's flagged for approval. Expect the running session to be
  affected.

## Verification

```bash
openamer --version   # should print version + "Up to date" with NO ⚠ warning
ls .update-incomplete .update-incomplete.lock .lazy-refresh-incomplete
# → "No such file or directory" for all three means the recovery is complete
```

## Related

The bundled `openamer-agent` skill (protected) is the umbrella for general
OpenAmer usage; this skill is the focused companion for the self-update
failure mode. If `openamer-agent` gains a troubleshooting section for this,
this skill can be absorbed into it.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…