AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Deferred Refresh Flag Contract

skill-ychampion-cskill-agents-deferred-refresh-flag-contract · by ychampion

Decide when to auto-refresh plugins after marketplaces change and when to defer to a manual `/reload-plugins` via the `needsRefresh` flag.

No reviews yet
0 installs
14 views
0.0% view→install

Install

$ agentstack add skill-ychampion-cskill-agents-deferred-refresh-flag-contract

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-ychampion-cskill-agents-deferred-refresh-flag-contract)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
4mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Deferred Refresh Flag Contract? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

SKILL: Deferred Refresh Flag Contract

Domain: extensions-mcp Trigger: performBackgroundPluginInstallations completes reconcileMarketplaces and must decide whether to auto-refresh plugins or set plugins.needsRefresh via AppState. Source Pattern: Distilled from reviewed extension lifecycle and source-reconciliation patterns.

Core Method

When new marketplaces are installed (result.installed.length > 0), treat the change as urgent: clear both marketplace and plugin caches, then call refreshActivePlugins(setAppState) so MCP connections re-establish with the freshly cloned sources. If that auto-refresh fails, log the error, clear the plugin cache with a reason string, and set plugins.needsRefresh = true so the UI prompts /reload-plugins. When only updates are available (result.updated.length > 0), do not auto-refresh; instead clear caches and set needsRefresh so the user opts into the reload. needsRefresh updates must be idempotent: the setter checks prev.plugins.needsRefresh and returns early if already true.

Key Rules

  • Always run clearMarketplacesCache() before refreshing or flagging; it ensures the cached metadata is rebuilt before the next plugin load.
  • For installs, wrap refreshActivePlugins(setAppState) in a try/catch. On failure, call clearPluginCache('performBackgroundPluginInstallations: auto-refresh failed') and fall back to the needsRefresh guard that sets the flag to true only once.
  • For updates-only, clear the plugin cache with clearPluginCache('performBackgroundPluginInstallations: marketplaces reconciled') so stale plugin bundles are not re-used, but leave control in the user’s hands by setting needsRefresh instead of forcing a reload.
  • The needsRefresh setter uses setAppState(prev => { if (prev.plugins.needsRefresh) return prev; return { ...prev, plugins: { ...prev.plugins, needsRefresh: true } }; }) so the UI can show a single prompt and avoid redundant re-renders.

Example Application

After reconcileMarketplaces returns result.installed = [ ... ], the manager clears caches and calls refreshActivePlugins. If the refresh completes, caches stay clear and MCP reconnects automatically. If the refresh throws, the catch logs the failure, clears the plugin cache with a descriptive reason, and the guard flips plugins.needsRefresh so /reload-plugins shows up instead. When only result.updated is populated, the same cache-clearing and guard runs, but without trying to refresh automatically.

Anti-Patterns (What NOT to do)

  • Do not auto-refresh when only marketplace updates exist; forcing a reload can interrupt long-running contexts when an update can safely wait for an explicit /reload-plugins.
  • Do not leave cache-clearing out of either branch—stale marketplace metadata or plugin bundles will confuse the auto-refresh or manual reload paths.
  • Do not set needsRefresh by overwriting the object blindly; always check the previous flag so a failed refresh path does not recreate the AppState slice on every error log.

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.