Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,8 @@ claude --plugin-dir ./apps/hook
| `PLANNOTATOR_GLIMPSE_HEIGHT` | Height in pixels for the Glimpse native window. Default: `900`. |
| `PLANNOTATOR_VERIFY_ATTESTATION` | **Read by the install scripts only**, not by the runtime binary. Set to `1` / `true` to have `scripts/install.sh` / `install.ps1` / `install.cmd` run `gh attestation verify` on every install. Off by default. Can also be set persistently via `~/.plannotator/config.json` (`{ "verifyAttestation": true }`) or per-invocation via `--verify-attestation`. Requires `gh` installed and authenticated. |
| `PLANNOTATOR_SKIP_AGENT_TERMINAL_INSTALL` | Set to `1` / `true` to skip installing the managed Node/WebTUI runtime used by compiled Bun builds for the annotate-mode agent terminal. Read by `plannotator install-runtime agent-terminal`, which the installers call automatically. |
| `PLANNOTATOR_MINIMAL` | **Read by the install scripts only**, not by the runtime binary. Set to `1` / `true` / `yes` to have `scripts/install.sh` / `install.ps1` / `install.cmd` install **only** the `plannotator` binary — skipping the sem sidecar, the agent-terminal runtime, and all per-agent skills, hooks, slash commands, and config. Equivalent to the `--minimal` (aliased `--binary-only`) flag; `--no-minimal` overrides it. Off by default. |
| `PLANNOTATOR_SKIP_SEM_INSTALL` | **Read by the install scripts only.** Set to `1` / `true` to skip installing the optional `sem` semantic-diff sidecar (used by code review). Off by default. |

**Config-only settings (`~/.plannotator/config.json`)**: Some settings have no env-var equivalent and are toggled by editing the config file directly:

Expand Down
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,12 @@ curl -fsSL https://plannotator.ai/install.sh | bash
irm https://plannotator.ai/install.ps1 | iex
```

Want just the binary and nothing else? Pass `--minimal` (or export `PLANNOTATOR_MINIMAL=1`) to install only the `plannotator` binary to `~/.local/bin`, skipping every skill, hook, slash command, and per-agent config:

```bash
curl -fsSL https://plannotator.ai/install.sh | bash -s -- --minimal
```

Then finish the step for your agent:

| Agent | After the installer | Details |
Expand Down
21 changes: 21 additions & 0 deletions apps/marketing/src/content/docs/getting-started/installation.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,27 @@ Version pinning is fully supported from **v0.17.2 onwards**. v0.17.2 is the firs

</details>

<details>
<summary><strong>Binary-only install (nothing but the CLI)</strong></summary>

Pass `--minimal` (aliased `--binary-only`) to install **only** the `plannotator` binary — no sem semantic-diff sidecar, no agent-terminal runtime, and none of the per-agent skills, hooks, slash commands, or config for Claude, Codex, OpenCode, Gemini, or Kiro. The only thing installed is the binary (the Windows PowerShell installer also adds the install directory to your user `PATH`), and because it skips the sparse checkout, **minimal mode does not require `git`**.

```bash
curl -fsSL https://plannotator.ai/install.sh | bash -s -- --minimal
```

```powershell
& ([scriptblock]::Create((irm https://plannotator.ai/install.ps1))) -Minimal
```

```cmd
curl -fsSL https://plannotator.ai/install.cmd -o install.cmd && install.cmd --minimal && del install.cmd
```

For `curl … | bash` pipelines you can set `PLANNOTATOR_MINIMAL=1` in the environment instead of passing the flag; pass `--no-minimal` to force a full install even when that variable is set.

</details>

Every release includes SHA256 checksums (verified automatically) and optional [SLSA build provenance](/docs/reference/verifying-your-install/) attestations.

## Claude Code
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,8 @@ When running your own paste service binary, these variables configure it:
| Variable | Default | Description |
|----------|---------|-------------|
| `PLANNOTATOR_VERIFY_ATTESTATION` | off | Set to `1` or `true` to have the install script run `gh attestation verify` on the downloaded binary. Requires `gh` CLI installed and authenticated. Can also be set via `~/.plannotator/config.json` (`{ "verifyAttestation": true }`) or per-invocation via `--verify-attestation`. |
| `PLANNOTATOR_MINIMAL` | off | Set to `1` / `true` / `yes` to install **only** the `plannotator` binary — no sem sidecar, agent-terminal runtime, skills, hooks, slash commands, or per-agent config. Equivalent to passing `--minimal` (aliased `--binary-only`); pass `--no-minimal` to override. Read by the install scripts only, not the runtime binary. |
| `PLANNOTATOR_SKIP_SEM_INSTALL` | off | Set to `1` / `true` to skip installing the optional `sem` semantic-diff sidecar used by code review. Read by the install scripts only. |
| `CLAUDE_CONFIG_DIR` | `~/.claude` | Custom Claude Code config directory. The install script places hooks here instead of the default location. |

## Remote mode behavior
Expand Down
90 changes: 75 additions & 15 deletions scripts/install.cmd
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ set "EXTRAS_FLAG="
set "MODEL_INVOCABLE_FLAG="
set "NON_INTERACTIVE=0"
set "RECONFIGURE=0"
REM Binary-only mode. Installs just plannotator.exe and no persistent state
REM elsewhere. Set by --minimal (1) / --no-minimal (0); -1 = neither flag given
REM (fall through to the PLANNOTATOR_MINIMAL env var, resolved after :args_done).
set "MINIMAL_FLAG=-1"

:parse_args
if "%~1"=="" goto args_done
Expand Down Expand Up @@ -92,6 +96,33 @@ if /i "%~1"=="--reconfigure" (
shift
goto parse_args
)
if /i "%~1"=="--minimal" (
if "!MINIMAL_FLAG!"=="0" (
echo --minimal and --no-minimal are mutually exclusive >&2
exit /b 1
)
set "MINIMAL_FLAG=1"
shift
goto parse_args
)
if /i "%~1"=="--binary-only" (
if "!MINIMAL_FLAG!"=="0" (
echo --binary-only and --no-minimal are mutually exclusive >&2
exit /b 1
)
set "MINIMAL_FLAG=1"
shift
goto parse_args
)
if /i "%~1"=="--no-minimal" (
if "!MINIMAL_FLAG!"=="1" (
echo --no-minimal and --minimal are mutually exclusive >&2
exit /b 1
)
set "MINIMAL_FLAG=0"
shift
goto parse_args
)
REM Reject any other dash-prefixed token as an unknown option, so a typoed
REM flag like --verify-attesttion fails fast instead of being interpreted as
REM a version tag (which would 404 on releases/download/v--verify-attesttion/...).
Expand All @@ -106,7 +137,7 @@ REM unquoted arg containing `&` would re-trigger metacharacter interpretation.
set "CURRENT_ARG=%~1"
if "!CURRENT_ARG:~0,1!"=="-" (
echo Unknown option: "%~1" >&2
echo Usage: install.cmd [--version ^<tag^>] [--verify-attestation ^| --skip-attestation] [--extras ^| --no-extras] [--model-invocable ^<list^>] [--non-interactive] [--reconfigure] >&2
echo Usage: install.cmd [--version ^<tag^>] [--verify-attestation ^| --skip-attestation] [--extras ^| --no-extras] [--model-invocable ^<list^>] [--minimal ^| --no-minimal] [--non-interactive] [--reconfigure] >&2
exit /b 1
)
REM Positional form: install.cmd vX.Y.Z (legacy interface).
Expand All @@ -122,6 +153,15 @@ shift
goto parse_args
:args_done

REM Resolve binary-only mode. Precedence: --minimal / --no-minimal flag >
REM PLANNOTATOR_MINIMAL env var > default (off). Mirrors install.sh / install.ps1.
set "MINIMAL=0"
if /i "%PLANNOTATOR_MINIMAL%"=="1" set "MINIMAL=1"
if /i "%PLANNOTATOR_MINIMAL%"=="true" set "MINIMAL=1"
if /i "%PLANNOTATOR_MINIMAL%"=="yes" set "MINIMAL=1"
if "!MINIMAL_FLAG!"=="1" set "MINIMAL=1"
if "!MINIMAL_FLAG!"=="0" set "MINIMAL=0"

set "REPO=backnotprop/plannotator"
set "SEM_REPO=Ataraxy-Labs/sem"
set "SEM_VERSION=v0.8.0"
Expand Down Expand Up @@ -388,23 +428,22 @@ move /y "!TEMP_FILE!" "!INSTALL_PATH!" >nul
echo.
echo plannotator !TAG! installed to !INSTALL_PATH!

REM Binary-only mode stops here (see the MINIMAL resolution after :args_done):
REM the binary is installed, so print PATH advice and exit before any sidecar
REM download, agent integration, skill checkout, or config write runs. No
REM persistent state is written outside !INSTALL_DIR!.
if "!MINIMAL!"=="1" (
call :PrintPathAdvice
echo.
echo Minimal install complete - only the plannotator binary was installed.
echo No skills, hooks, agent integrations, or config files were written.
exit /b 0
)

call :InstallSemSidecar
call :InstallAgentTerminalRuntime

REM Check if install directory is in PATH
echo !PATH! | findstr /i /c:"!INSTALL_DIR!" >nul
if !ERRORLEVEL! neq 0 (
echo.
echo !INSTALL_DIR! is not in your PATH.
echo.
echo Add it permanently with:
echo.
echo setx PATH "%%PATH%%;!INSTALL_DIR!"
echo.
echo Or add it for this session only:
echo.
echo set PATH=%%PATH%%;!INSTALL_DIR!
)
call :PrintPathAdvice

REM Validate plugin hooks.json if plugin is already installed
if defined CLAUDE_CONFIG_DIR (
Expand Down Expand Up @@ -959,6 +998,27 @@ if exist "!PLUGIN_HOOKS!" if exist "!CLAUDE_SETTINGS!" (
echo.
exit /b 0

REM ======================================================================
REM Print the PATH-setup hint if INSTALL_DIR isn't already on PATH. Called by
REM both the --minimal early exit and the normal flow (mirrors install.sh's
REM print_path_advice).
REM ======================================================================
:PrintPathAdvice
echo !PATH! | findstr /i /c:"!INSTALL_DIR!" >nul
if !ERRORLEVEL! neq 0 (
echo.
echo !INSTALL_DIR! is not in your PATH.
echo.
echo Add it permanently with:
echo.
echo setx PATH "%%PATH%%;!INSTALL_DIR!"
echo.
echo Or add it for this session only:
echo.
echo set PATH=%%PATH%%;!INSTALL_DIR!
)
goto :eof

REM ======================================================================
REM Optional annotate agent terminal runtime install. Non-fatal: Plannotator
REM remains installed if Node/npm or npm install is unavailable.
Expand Down
56 changes: 47 additions & 9 deletions scripts/install.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@ param(
[switch]$NoExtras,
[string]$ModelInvocable = "",
[switch]$NonInteractive,
[switch]$Reconfigure
[switch]$Reconfigure,
[Alias("BinaryOnly")]
[switch]$Minimal,
[switch]$NoMinimal
)

$ErrorActionPreference = "Stop"
Expand All @@ -23,6 +26,22 @@ if ($Extras -and $NoExtras) {
[Console]::Error.WriteLine("-Extras and -NoExtras are mutually exclusive. Pass one or the other.")
exit 1
}
if ($Minimal -and $NoMinimal) {
[Console]::Error.WriteLine("-Minimal and -NoMinimal are mutually exclusive. Pass one or the other.")
exit 1
}

# Binary-only mode. Installs just the plannotator binary and no persistent state
# elsewhere — no sem sidecar, agent-terminal runtime, skills, hooks, or per-agent
# config. Precedence: -Minimal / -NoMinimal switch > PLANNOTATOR_MINIMAL env var
# > default (off). Mirrors install.sh's --minimal / --no-minimal.
$minimal = $false
if ($env:PLANNOTATOR_MINIMAL -match '^(1|true|yes)$') {
$minimal = $true
}
if ($Minimal) { $minimal = $true }
if ($NoMinimal) { $minimal = $false }

$repo = "backnotprop/plannotator"
$semRepo = "Ataraxy-Labs/sem"
$semVersion = "v0.8.0"
Expand Down Expand Up @@ -330,18 +349,37 @@ Move-Item -Force $tmpFile "$installDir\plannotator.exe"
Write-Host ""
Write-Host "plannotator $latestTag installed to $installDir\plannotator.exe"

Install-SemSidecar
Install-AgentTerminalRuntime
# Add $installDir to the user PATH if not already there. Extracted so both the
# -Minimal early exit and the normal flow reuse it (mirrors install.sh's
# print_path_advice).
function Show-PathAdvice {
$userPath = [Environment]::GetEnvironmentVariable("Path", "User")
if ($userPath -notlike "*$installDir*") {
Write-Host ""
Write-Host "$installDir is not in your PATH. Adding it..."
[Environment]::SetEnvironmentVariable("Path", "$userPath;$installDir", "User")
Write-Host "Added to PATH. Restart your terminal for changes to take effect."
}
}

# Add to PATH if not already there
$userPath = [Environment]::GetEnvironmentVariable("Path", "User")
if ($userPath -notlike "*$installDir*") {
# Binary-only mode stops here (see the $minimal resolution near the top): the
# binary is installed, so add it to PATH and exit before any sidecar download,
# agent integration, skill checkout, config write, or cleanup runs. Only the
# binary and its PATH entry are added — none of the sem sidecar, agent-terminal
# runtime, or per-agent skills, hooks, or config.
if ($minimal) {
Show-PathAdvice
Write-Host ""
Write-Host "$installDir is not in your PATH. Adding it..."
[Environment]::SetEnvironmentVariable("Path", "$userPath;$installDir", "User")
Write-Host "Added to PATH. Restart your terminal for changes to take effect."
Write-Host "Minimal install complete - only the plannotator binary was installed."
Write-Host "No skills, hooks, agent integrations, or config files were written."
exit 0
}

Install-SemSidecar
Install-AgentTerminalRuntime

Show-PathAdvice

# Validate plugin hooks.json if plugin is already installed
$pluginHooks = if ($env:CLAUDE_CONFIG_DIR) { "$env:CLAUDE_CONFIG_DIR\plugins\marketplaces\plannotator\apps\hook\hooks\hooks.json" } else { "$env:USERPROFILE\.claude\plugins\marketplaces\plannotator\apps\hook\hooks\hooks.json" }
if (Test-Path $pluginHooks) {
Expand Down
Loading