← All plugins

Keep your marketplace plugins up to date, automatically

Update every plugin you use from this marketplace, automatically. An opt-in session-start hook keeps them current - on every session, or a cadence you set - so you always have the latest fixes and features without lifting a finger.

Why auto-update

Plugins move fast. New commentable-html releases ship fixes, new content types, and safer defaults on a regular cadence - but a plugin only helps you if the copy on your machine is current. Updating by hand means remembering to run copilot plugin update (or claude plugin update) for each plugin, on each machine, and noticing when a new version even exists.

The auto-updater removes that chore entirely. It registers a single session-start hook that, once per day at most, updates every plugin you installed from the urikan-ai-marketplace. You keep the newest version without lifting a finger, and because it is a separate opt-in plugin, automatic updates are a choice you make - not something forced on every install.

Install

Works with both Claude Code and the GitHub Copilot CLI. Pick your agent, add the marketplace, then install the auto-updater. That is the whole setup.

Install marketplace
$
copilot plugin marketplace add https://github.com/urikanonov/ai-marketplace
Install plugin
$
copilot plugin install urikan-ai-marketplace-auto-updater@urikan-ai-marketplace

On macOS and Linux the updater needs PowerShell 7 (pwsh) on your PATH; on Windows the Copilot hook runs the script under Windows PowerShell with nothing extra to install, and the Claude hook dispatches it through the shell Claude Code provides. When PowerShell is missing the hook logs a dated skip note instead of failing.

The auto-updater updates every plugin but itself (a plugin cannot update itself while its own hook runs), so update it by hand with copilot plugin update urikan-ai-marketplace-auto-updater@urikan-ai-marketplace or claude plugin update urikan-ai-marketplace-auto-updater@urikan-ai-marketplace. The hook fetches new releases on session start; under Claude Code an update applies on the next restart.

What you get

A tiny, well-behaved hook that does one job well and stays out of your way.

Updates on session start

A session-start hook runs each time you open Claude Code or the Copilot CLI and updates every plugin you have from this marketplace, in name-sorted order for a deterministic log.

Non-blocking by design

All work is wrapped in try/catch. A failure is logged and never surfaced to your session, and each plugin updates in isolation so one failing update never stops the rest.

Throttled, not chatty

A last-run throttle skips the whole pass when the previous one ran less than about 20 hours ago, so opening several sessions a day costs at most one update check.

Opt-in, always

Automatic updates are a separate plugin you choose to install. Do not want them on a given machine? Do not install it there - nothing about the other plugins changes.

A readable activity log

Every pass, skip, and failure is written to a log under plugin-data, and a completed pass is stamped so a skipped run is discoverable rather than silent.

Cross-platform

On Windows it runs under Windows PowerShell 5.1; on macOS and Linux it runs the same script under PowerShell 7 (pwsh), and logs a clear note when pwsh is not installed.

How it works

One hook, one job, and nothing to babysit.

Register a session-start hook

Installing the plugin registers a session-start hook with your agent (a Copilot sessionStart hook, or a Claude Code SessionStart hook). No configuration and no scheduler to set up.

Check the throttle

On each session start the hook checks the last-run stamp. If the previous pass ran within the last ~20 hours it logs a skip and does nothing else.

Update every marketplace plugin

Otherwise it lists your installed plugins, sorts them by name, and runs copilot plugin update (or claude plugin update under Claude Code) for each - checking the exit code and logging any failure. It excludes itself, since a plugin cannot update itself while its own hook is running.

Stamp and log

A completed pass records a fresh last-run stamp and writes activity to the plugin-data log, so you can always see what happened and when.

Quiet and safe by default

The updater is built to be invisible until you go looking for it.

Never breaks your session

The hook can only ever succeed or log a failure. It never throws, never blocks startup, and never surfaces an error into your session.

Scoped to this marketplace

It only updates plugins installed from urikan-ai-marketplace. Plugins from other marketplaces are untouched.

You stay in control

It is opt-in and self-excluding. Uninstall it any time and every other plugin keeps working exactly as before - you just go back to updating them yourself.

Changelog

Changes to the auto-updater. See the full changelog on GitHub.

[1.4.2] - 2026-07-23

Fixed
  • The throttle stamp is now written only when ALL plugin updates in the pass succeed. Previously a pass where any plugin update exited non-zero or threw an exception still wrote the stamp, suppressing retries for up to 24 hours after a transient failure. (UPD-21)

[1.4.1] - 2026-07-19

Added
  • The shipped plugin package now includes the MIT license text.
Show 5 older releases

[1.4.0] - 2026-07-17

Changed
  • The default update cadence is now 24 hours (once a day), up from 20 (UPD-08, UPD-17). A user-set cadence and the URIKAN_AI_MARKETPLACE_THROTTLE_HOURS override are unchanged.
Added
  • The marketplace-update skill now presents an explicit four-way choice when the user asks to change the schedule without naming a value (for example "change update schedule"): each session, every 1 hour, every 24 hours (the default), or a custom interval, mapped to throttleHours 0 / 1 / 24 / N. (UPD-19)

[1.3.0] - 2026-07-17

Added
  • Persistent, update-safe update cadence. The session-start throttle is no longer a hardcoded constant in the shipped script (which a plugin update reset); it is now read at runtime from <config-home>/plugin-data/urikan-ai-marketplace-auto-updater.config.json ({ "throttleHours": N }). Because plugin-data/ lives outside the installed-plugins/ subtree a plugin update replaces, a user-set cadence survives updates. throttleHours=0 disables the throttle (updates on every session); a one-off URIKAN_AI_MARKETPLACE_THROTTLE_HOURS env var takes precedence. Any invalid, missing, or unreadable value falls back to the 20h default and never blocks the non-blocking hook. (UPD-17)
  • The marketplace-update skill can now SET the cadence from free text (for example "update every session", "set update frequency to 12 hours", "once a day") by writing that persistent config for the current agent, alongside its existing on-demand update role. (UPD-18)

[1.2.3] - 2026-07-15

Fixed
  • The Claude SessionStart hook surfaced a hook error notice on every macOS/Linux session start. Claude runs every handler in a matched group, so the exec-form powershell handler (kept for Windows without Git Bash) tried to spawn a powershell binary that does not exist on macOS/Linux and failed. The two handlers are now collapsed into a single bash handler that dispatches by uname: pwsh on macOS/Linux, Windows PowerShell (or pwsh) on Windows. Exactly one clean invocation runs per platform, with no cross-platform spawn failure. (UPD-15)
Changed
  • The update pass now logs a pass complete: N plugin(s) checked line so a completed pass is visible in the log (previously only failures and skips were logged), matching the documented logging behavior. (UPD-16)

[1.2.2] - 2026-07-15

Changed
  • Dual-agent audit follow-ups: the shipped pkg/README.md now documents both agents (Copilot and Claude Code hooks, both config-home log/throttle paths, and the on-demand skill) instead of being framed as a GitHub Copilot CLI plugin.
Fixed
  • The Claude SessionStart hook could run the update twice on Windows when both Git Bash and a PowerShell were present (the bash and powershell handlers both fired). The bash handler now no-ops on Windows (uname MINGW/MSYS/CYGWIN), so exactly one handler runs per platform: powershell on Windows, bash+pwsh on macOS/Linux. Updates are idempotent and throttled, so this was harmless but is now clean. (UPD-15)

[1.2.1] - 2026-07-15

Fixed
  • The plugin failed to load in Claude Code with "Duplicate hooks file detected" because .claude-plugin/plugin.json redundantly referenced ./hooks/hooks.json, which Claude Code already auto-loads from the standard hooks/hooks.json location. Removed the redundant hooks manifest field so the plugin loads cleanly; claude plugin validate --strict accepted the manifest either way, so this was caught only by a real claude plugin install. (UPD-14)

6 earlier releases in the full changelog on GitHub.