Public leaderboard

Public assessment

benswel/qr-agent-core (qr-for-agent)

qr-for-agent · v0.12.0 · scanned

What changed in the harness

Selection accuracy 100→98, token cost up 4%, unconfirmed writes 0%→0%.

Category breakdown

Where the score comes from.

Earned points across the four signals Gradable measures. Safety and Legibility are scored out of 30; Economics and Discoverability are scored out of 20.

01Safety

0.0 / 30

0.0 out of 30
02Legibility

19.9 / 30

19.9 out of 30
03Economics

11.8 / 20

11.8 out of 20
04Discoverability

13.4 / 20

13.4 out of 20

Highest-impact fix

Estimated gain +30 points

Add explicit identity and permission preflight tools

Expose machine-readable principal/tenant confirmation and a non-mutating permission check so agents can verify both before destructive actions.

Description evidence

Defects and rewrites.

27 defects found across the exposed tool descriptions. Suggested rewrites make purpose, inputs, boundaries, and returns easier for an agent to understand.

Tool Defect types Suggested rewrite
create_qr_code
no_return_description
Create a new managed QR code with optional custom styling. The QR code points to a short URL that redirects to your target URL. You can change the target URL later without regenerating the QR image. Supports custom colors, dot shapes, corner shapes, and logo embedding. Returns the created QR code's short_id, short URL, and the QR image data in the requested format.
update_qr_destination
no_return_description
Change where an existing QR code redirects to. This is the key 'dynamic link' feature: the QR image stays the same, but scanning it will now go to the new URL. Ideal for updating campaigns, fixing broken links, or A/B testing. Returns the updated QR code record with its new target URL and other fields.
delete_qr_code
no_return_description
Permanently delete a QR code and all its scan analytics. The short URL will stop working immediately. This cannot be undone. Returns a confirmation of deletion.
bulk_create_qr_codes
no_return_description
Create multiple QR codes in a single request (up to 50). Each item supports the same options as create_qr_code. The quota check is all-or-nothing: if the batch would exceed your plan limit, no QR codes are created. Ideal for generating QR codes for product catalogs, event lists, or batch operations. Returns an array of the created QR codes, each with its short_id, short URL, and image data.
bulk_update_qr_codes
no_return_description
Update multiple QR codes in a single request (up to 50). Change target URLs and/or labels. Items with non-existent short_id are reported as not_found without failing the whole batch. Returns an array of per-item results indicating each update's success or not_found status.
bulk_delete_qr_codes
no_return_description
Delete multiple QR codes and their scan analytics in a single request (up to 50). Items with non-existent short_id are reported as not_found without failing the whole batch. Returns an array of per-item results indicating each deletion's success or not_found status.
create_vcard_qr
params_unexplained no_return_description
Create a QR code that encodes a contact card (vCard). When scanned by a phone camera, it prompts the user to save the contact. Supports all standard vCard fields (including phone, the contact's phone number) and custom QR styling such as frame_text_color (hex color for the CTA text on the decorative frame). Returns the created QR code's short_id, short URL, and image data.
create_wifi_qr
params_unexplained no_return_description
Create a QR code that encodes WiFi credentials. When scanned by a phone camera, it offers to auto-join the WiFi network. No internet connection needed to join — the credentials are encoded directly in the QR image. frame_text_color sets the hex color of the CTA text on the decorative frame, if one is used. Returns the created QR code's short_id, short URL, and image data.
update_vcard_qr
params_unexplained no_return_description
Update the contact details of a vCard QR code, including phone (the contact's phone number). Only works on QR codes created with type='vcard'. Partial updates merge with existing data. Note: updating vCard data changes the QR image content. Returns the updated QR code record.
update_wifi_qr
no_return_description
Update the WiFi credentials of a WiFi QR code. Only works on QR codes created with type='wifi'. Note: updating WiFi data changes the QR image content. Returns the updated QR code record.
create_email_qr
params_unexplained no_return_description
Create a QR code that opens a pre-filled email when scanned. The recipient, subject, body, CC, and BCC can all be pre-set, and the QR can be styled with a decorative frame, including frame_text_color for the CTA text's hex color. Returns the created QR code's short_id, short URL, and image data.
create_sms_qr
params_unexplained no_return_description
Create a QR code that opens a pre-filled SMS message when scanned. Set the phone number and optional message text, and optionally style a decorative frame, including frame_text_color for the CTA text's hex color. Returns the created QR code's short_id, short URL, and image data.
create_phone_qr
name_restates_behavior params_unexplained no_return_description
Create a QR code that initiates a phone call to the given phone_number when scanned by a phone camera. Supports custom styling including a decorative frame, where frame_text_color sets the CTA text's hex color. Returns the created QR code's short_id, short URL, and image data.
create_event_qr
params_unexplained no_return_description
Create a QR code that adds a calendar event when scanned. Encodes a standard iCalendar VEVENT that calendar apps can import, with optional decorative frame styling including frame_text_color for the CTA text's hex color. Returns the created QR code's short_id, short URL, and image data.
create_text_qr
params_unexplained no_return_description
Create a QR code that contains plain text. When scanned, the text is displayed directly. Useful for messages, notes, or any freeform content, with optional decorative frame styling including frame_text_color for the CTA text's hex color. Returns the created QR code's short_id, short URL, and image data.
create_location_qr
params_unexplained no_return_description
Create a QR code that opens a map location when scanned. Encodes geographic coordinates that map apps can parse, with optional decorative frame styling including frame_text_color for the CTA text's hex color. Returns the created QR code's short_id, short URL, and image data.
create_social_qr
params_unexplained
Create a QR code that links to social media profiles. When scanned via the short URL, returns a JSON object with all platform links. Provide at least one platform link. Supports decorative frame styling, including frame_text_color for the CTA text's hex color.
create_app_store_qr
params_unexplained
Create a QR code that redirects to the correct app store based on the device. iPhones go to the App Store, Android devices go to Google Play, and other devices go to the fallback URL. Provide at least one store URL. Supports decorative frame styling, including frame_text_color for the CTA text's hex color.
update_social_qr
name_restates_behavior no_return_description
Update the social media profile links (Facebook, Instagram, Twitter/X, LinkedIn, YouTube, TikTok, GitHub, website) of an existing Social QR code. Partial updates merge with existing data. Returns the updated QR code record.
update_app_store_qr
name_restates_behavior params_unexplained no_return_description
Update the app store URLs of an existing App Store QR code, including fallback_url (where non-mobile devices are sent). Partial updates merge with existing data. Returns the updated QR code record.
list_webhooks
no_return_description
List all registered webhook endpoints for your API key. The HMAC secret is not included for security. Returns an array of webhook records with their IDs, URLs, and subscribed events.
delete_webhook
name_restates_behavior no_return_description
Remove a registered webhook endpoint, identified by webhook_id (use list_webhooks to find IDs), and delete all its delivery logs. The endpoint stops receiving events immediately. Returns a confirmation of deletion.
get_usage
name_restates_behavior no_return_description
Check how much of your plan's quota has been consumed. Returns current usage counts (QR codes, scans, webhooks) alongside your plan's limits.
set_utm_params
no_return_description
Set UTM tracking parameters on a URL QR code. These parameters are automatically appended to the target URL on every scan redirect. Use this to track QR code scans in Google Analytics or other analytics tools. Set 'clear' to true to remove all UTM parameters. Returns the updated QR code record with its current UTM configuration.
set_redirect_rules
no_return_description
Set conditional redirect rules on a URL QR code. Rules are evaluated top-to-bottom; each rule has an array of conditions (AND logic) — all must match. First matching rule's URL is used. If no rule matches, the default target_url applies. Conditions: 'device' (mobile/tablet/desktop), 'os' (iOS/Android/Windows/macOS/Linux), 'country' (ISO alpha-2 like 'FR'), 'language' (ISO 639-1 like 'fr'), 'time_range' ({start:'09:00',end:'17:00',timezone:'Europe/Paris'}), 'ab_split' ({percentage:50}). Combine conditions in a single rule for AND logic (e.g. mobile + FR). Pass an empty array to remove all rules. Returns the updated QR code record with its current redirect rules.
set_custom_domain
no_return_description
Set a custom domain for your QR code short URLs (Pro plan required). When set, all new QR codes will use https://your-domain.com/r/... instead of the default URL. You must configure DNS (CNAME) to point to the QR Agent server. Pass domain=null to remove the custom domain. Returns the current custom domain configuration and its DNS verification status.
record_conversion
no_return_description
Record a post-scan conversion event (purchase, signup, etc.) for a QR code you own. Use this to track ROI — e.g., when a user scans a QR code and then makes a purchase, record a 'purchase' conversion with the order value. For client-side tracking without code, use the tracking pixel: <img src="https://yourhost/t/{short_id}?event=purchase&value=49.99">. Returns the recorded conversion event.

Selection evidence

Confusable tool pairs.

16 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.

Tool A Tool B Confidence Why they collide
create_qr_code bulk_create_qr_codes medium A task like 'create QR codes for these 3 URLs' could be done with repeated create_qr_code calls or a single bulk_create_qr_codes call; agent may not realize bulk exists or may misuse single-item bulk call.
delete_qr_code bulk_delete_qr_codes medium A request to delete a single QR code could be routed to bulk_delete_qr_codes with a one-element array, or a request to delete 'a few' codes might be handled with repeated single deletes instead of the bulk tool.
bulk_create_qr_codes bulk_update_qr_codes low Both are bulk batch operations on QR codes but one creates new codes and the other updates existing ones by short_id; wording like 'set up these QR codes' could be ambiguous between creating new vs updating existing if context is unclear, though required fields (target_url vs short_id) differ enough to usually disambiguate.
bulk_create_qr_codes bulk_delete_qr_codes low Different verbs (create vs delete) make confusion unlikely except in careless parsing, but both are 'bulk QR code' batch tools with similar structure.
bulk_update_qr_codes bulk_delete_qr_codes low Different verbs (update vs delete) reduce confusion, but both are same-shape bulk QR batch tools.
create_app_store_qr update_app_store_qr low A task like 'set the iOS URL for this app store QR code' could be ambiguous between creating a new one with ios_url vs updating an existing one, especially if short_id context is missing.
create_email_qr create_sms_qr low Both create pre-filled messaging QR codes with similar description patterns ('opens a pre-filled X'), but distinct required fields (to vs phone_number) and clear semantic difference (email vs SMS) make confusion unlikely.
create_social_qr update_social_qr medium A task like 'add my Instagram link to this QR code' is ambiguous between creating a new social QR with instagram field vs updating an existing one via update_social_qr, especially without an explicit short_id in the request.
create_wifi_qr update_wifi_qr medium A request like 'change the WiFi password on this QR code' could be misrouted to create_wifi_qr instead of update_wifi_qr if the agent doesn't recognize an existing QR code is referenced, or vice versa for ambiguous 'set up wifi QR with new password' phrasing.
create_vcard_qr update_vcard_qr medium A task like 'update the contact QR with a new phone number' is ambiguous between creating a fresh vCard QR and updating an existing one via update_vcard_qr if short_id isn't explicit in the request.
get_qr_code get_qr_analytics low A vague request like 'get info on this QR code' could be routed to either get_qr_code (metadata) or get_qr_analytics (scan stats), though 'analytics'/'scans' wording usually disambiguates.
get_qr_code list_qr_codes low A request like 'show me my QR code' without specifying single vs all could be ambiguous, though get_qr_code requires a short_id which usually clarifies intent.
update_qr_destination update_social_qr low Both update an existing QR's target, but update_qr_destination is for generic URL redirect QR codes while update_social_qr is specific to social platform links; a vague 'update this QR's link' could be misrouted if QR type is unclear.
update_qr_destination update_vcard_qr low update_qr_destination targets simple redirect QR codes while update_vcard_qr updates contact-card content; a vague 'update this QR code's info' could be ambiguous if the underlying QR type isn't clear to the agent.
update_qr_destination update_wifi_qr low Both are 'update' tools for existing QR codes, but one changes redirect target_url and the other changes WiFi credentials; ambiguous only if the QR type is unspecified in the request.
set_utm_params set_redirect_rules low Both configure additional behavior on an existing URL-type QR code and share 'set' naming, but UTM tracking parameters vs conditional redirect rules are functionally distinct enough that confusion is unlikely except in very vague 'configure tracking/routing' requests.

Compare the field

One score is useful.
The evidence makes it actionable.

Back to the leaderboard