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.
copilot plugin marketplace add https://github.com/urikanonov/ai-marketplace
copilot plugin install urikan-ai-marketplace-auto-updater@urikan-ai-marketplace
claude plugin marketplace add https://github.com/urikanonov/ai-marketplace
claude 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
- 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
- The shipped plugin package now includes the MIT license text.
Show 5 older releases
[1.4.0] - 2026-07-17
- 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_HOURSoverride are unchanged.
- The
marketplace-updateskill 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 tothrottleHours0 / 1 / 24 / N. (UPD-19)
[1.3.0] - 2026-07-17
- 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 }). Becauseplugin-data/lives outside theinstalled-plugins/subtree a plugin update replaces, a user-set cadence survives updates.throttleHours=0disables the throttle (updates on every session); a one-offURIKAN_AI_MARKETPLACE_THROTTLE_HOURSenv 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-updateskill 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
- The Claude
SessionStarthook surfaced ahook errornotice on every macOS/Linux session start. Claude runs every handler in a matched group, so the exec-formpowershellhandler (kept for Windows without Git Bash) tried to spawn apowershellbinary that does not exist on macOS/Linux and failed. The two handlers are now collapsed into a singlebashhandler that dispatches byuname:pwshon macOS/Linux, Windows PowerShell (orpwsh) on Windows. Exactly one clean invocation runs per platform, with no cross-platform spawn failure. (UPD-15)
- The update pass now logs a
pass complete: N plugin(s) checkedline 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
- Dual-agent audit follow-ups: the shipped
pkg/README.mdnow 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.
- The Claude
SessionStarthook 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 (unameMINGW/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
- The plugin failed to load in Claude Code with "Duplicate hooks file detected" because
.claude-plugin/plugin.jsonredundantly referenced./hooks/hooks.json, which Claude Code already auto-loads from the standardhooks/hooks.jsonlocation. Removed the redundanthooksmanifest field so the plugin loads cleanly;claude plugin validate --strictaccepted the manifest either way, so this was caught only by a realclaude plugin install. (UPD-14)
6 earlier releases in the full changelog on GitHub.