Supermarket

WarnAudited by ClawScan on May 10, 2026.

Overview

The skill matches its grocery-shopping purpose, but cart/profile use routes reusable Kroger OAuth tokens through a hosted proxy with loose scope and retention boundaries.

Product and store searches are lower risk, but do not use cart or profile features unless you are comfortable logging into Kroger through the hosted proxy. Check the OAuth permissions, keep the login link private, confirm every cart change, and consider self-hosting or revoking access after use.

Findings (7)

Artifact-based informational review of SKILL.md, metadata, install specs, static scan signals, and capability signals. ClawScan does not execute the skill or run runtime probes.

What this means

Anyone with access to the cached token or agent context could potentially read Kroger profile data or add items to the user's cart until the token expires or is revoked.

Why it was flagged

The skill directs the agent to receive and cache reusable Kroger OAuth tokens for profile and cart operations, but the artifacts do not specify a secure cache location, retention limit, or revocation workflow.

Skill content
If HTTP 200: tokens are returned. Cache `access_token` and `refresh_token`.
Recommendation

Treat this as a credentialed account integration: use it only in a trusted agent environment, revoke access after use, and prefer a version that stores tokens in a secure vault with clear expiry and deletion behavior.

What this means

A manipulated login URL could ask the user to approve broader Kroger permissions than the skill's normal cart/profile scope, if the Kroger app is allowed to request them.

Why it was flagged

The OAuth scope can be supplied through the request query rather than being fixed or allowlisted in the proxy.

Skill content
const scope = (req.query.scope as string) || "cart.basic:write profile.compact";
Recommendation

The proxy should ignore arbitrary scope input or validate it against a narrow allowlist, and users should check the permissions shown on the Kroger login/consent page.

What this means

A failed or abandoned login completion flow could leave reusable account tokens stored on the hosted proxy longer than the user expects.

Why it was flagged

The hosted callback stores access and refresh tokens in Firestore. The provided tokenUser code deletes after successful retrieval, but the artifacts do not show automatic cleanup for completed sessions that are never polled.

Skill content
await sessionRef.update({ access_token: data.access_token, refresh_token: data.refresh_token, expires_in: data.expires_in, token_type: data.token_type, completed: true });
Recommendation

Add enforced Firestore TTL/scheduled cleanup, avoid storing refresh tokens when possible, and document exactly where tokens are stored and when they are deleted.

What this means

Users may trust the hosted proxy more than the provided code fully supports, especially for refresh-token retention.

Why it was flagged

This assurance is stronger than the visible implementation: tokens are stored after a successful callback and deletion is tied to later tokenUser retrieval, with no artifact showing cleanup for unclaimed completed sessions.

Skill content
Privacy guarantees (verifiable in source): ... User tokens are **deleted from Firestore immediately** after being returned to the agent ... Login sessions **expire after 5 minutes**
Recommendation

Align the privacy wording with the implementation, or add enforceable cleanup and include the relevant rules/TTL configuration in the reviewed artifacts.

What this means

The agent could add the wrong item or quantity if the user's request is ambiguous.

Why it was flagged

The skill/CLI can mutate the user's Kroger cart. This is purpose-aligned, but it is still an account-changing action.

Skill content
err = client.AddToCart([]krogerapi.CartItem{{UPC: c.UPC, Quantity: c.Qty}})
Recommendation

Confirm the product, store context, and quantity before adding items to the cart.

What this means

If used, the login session link is exposed to Telegram and whoever can access that chat or bot configuration.

Why it was flagged

An optional CLI path can send the OAuth login URL through Telegram using a bot token/chat ID.

Skill content
msg := fmt.Sprintf("Kroger login URL:\n%s", loginURL) ... telegram.SendMessage(cfg.BotToken, cfg.ChatID, msg)
Recommendation

Avoid the Telegram option for sensitive accounts unless the bot and chat are trusted, and keep the login link private.

What this means

Users have less registry-level provenance for the deployed proxy that receives their OAuth flow.

Why it was flagged

The registry metadata does not bind the skill to an official source or homepage, which matters because the workflow depends on a hosted OAuth proxy handling user tokens.

Skill content
Source: unknown; Homepage: none
Recommendation

Verify the linked repository and hosted proxy ownership before logging in, or self-host the proxy if available.