Documentation

cannedIQ User Guide

Everything you need to create powerful commands, automate repetitive typing, and let AI draft responses for you — on any webpage.

Overview

cannedIQ is a Chrome Extension that stores your text snippets, templates, and AI prompts and inserts them into any text field on any webpage — emails, support tickets, LinkedIn messages, GitHub comments, Slack, and more.

There are three core building blocks:

Quick Start

Getting your first command running takes about 60 seconds:

  1. Click the cannedIQ icon in your Chrome toolbar to open Options.
  2. Click + New Command in the Commands tab.
  3. Give it a name, write your template text, and save.
  4. Navigate to any webpage with a text field, click into it, and press Ctrl+Space (or +Space on Mac).
  5. Find your command, press Enter — done.
💡 Tip: You can also trigger commands by typing a slash keyword directly in any text field (e.g. /thanks) and pressing Tab or Space.

Keyboard Shortcuts

ShortcutAction
Ctrl+SpaceOpen the command palette on any page
/ Navigate commands in the palette
EnterLaunch the selected command
EscapeClose the palette or cancel a variable prompt
/keyword + TabInline slash trigger — expand command directly in a text field
/keyword + SpaceAlternative inline slash expand

Creating Commands

Open Options → Commands tab → click + New Command. Every command has these core fields:

FieldDescription
NameShown in the palette. Make it scannable — e.g. "Thank you — Order Delay".
StackThe folder/category this command belongs to.
Slash TriggerA short keyword (no spaces) you can type inline to expand this command, e.g. thanks.
TemplateThe text to insert. Supports {{variables}}.
Command TypeStatic (plain text/template) or AI (prompt sent to GPT).
ConditionsRules that limit when this command appears (site, URL, etc.). Pro
ActionsWhat happens after text is resolved — insert, copy, open URL, etc.
FavoritePins the command to the top of the palette with a ★.

Static Templates

A static command inserts plain text, optionally with variable placeholders. It's instant — no network call, no delay.

Basic Example

Command: "Greeting — Support"
Hi {{firstName}}, Thanks for reaching out to support! My name is {{agentName}} and I'll be helping you today. Could you provide your order number so I can look into this for you?

When launched, cannedIQ prompts you to fill in firstName and agentName, then inserts the completed text at your cursor.

Multi-line & Formatted Text

Line breaks in your template are preserved exactly. Write the template the way you want it to appear in the output — what you see is what gets inserted.

AI Commands Pro + AI

AI commands send a prompt to GPT and insert the generated response. You write the instructions — cannedIQ handles the API call. No API key required.

How it works: The prompt is resolved (variables filled in), sent to cannedIQ's secure AI service, and the generated text is inserted into your active field. Your session JWT is used — the API key never touches your browser.

Writing an AI Prompt

Think of the AI prompt as instructions to a writing assistant. Be specific about tone, length, and purpose. Use {{inputText}} to pass whatever you've already written or selected into the prompt.

AI Prompt: "Improve — Tone Polisher"
Rewrite the following message in a friendly but professional tone. Keep it concise, under 3 sentences. Do not change the core meaning. Message to rewrite: {{inputText}}

With text already in the field, launch this command — it sends what you wrote to GPT and replaces it with the polished version.

AI Prompt: "Generate — Cold Outreach"
Write a short, personalized LinkedIn connection request for someone in {{role}} at {{company}}. My goal: {{goal}}. Tone: warm, direct, no fluff. Max 3 sentences.

Variables role, company, and goal are prompted when you launch — you fill them in and AI writes the message.

AI Prompt Best Practices

Stacks

Stacks are folders for organizing commands. You might have stacks for "Support", "Sales", "HR Templates", or "Personal". In the command palette, stacks appear as section headers so you can navigate large libraries quickly.

Free accounts can have up to 3 stacks. Pro and Team plans are unlimited.

Each stack has a name, color, and icon. Team stacks synced from a team admin show a 🏢 icon and cannot be edited by members.

How Variables Work

Variables are placeholders written as {{variableName}} inside your template or AI prompt. When a command is launched, cannedIQ resolves each placeholder to its real value before inserting the text.

There are two types:

Dynamic Variables

These are resolved automatically — you just drop the placeholder in your template and it fills itself in.

VariableResolves toExample output
{{today}}Current date (locale format)5/21/2026
{{now}}Current date & time5/21/2026, 2:34:00 PM
{{time}}Current time only2:34:00 PM
{{pageTitle}}Title of the current tabDashboard — Acme Corp
{{currentUrl}}Full URL of the current pagehttps://github.com/acme/repo/issues/42
{{hostname}}Domain name onlygithub.com
{{siteName}}Friendly site name (if recognized)GitHub, Gmail, LinkedIn…
{{selectedText}}Text you have highlighted on the pagewhatever you selected
{{activeInput}}Current content of the focused text fieldwhat's already typed
{{inputText}}Active field content, or selected text if field is empty. Best for AI prompts.draft or selection
{{clipboard}}Your clipboard contents (requires clipboard setting enabled)last copied text
Best practice for AI commands: Use {{inputText}} instead of {{selectedText}} or {{activeInput}} separately. It intelligently falls back — if there's text in the field it uses that; if you've selected text on the page it uses that instead.

Usage Examples

Template using dynamic variables
Following up on our conversation from {{today}}. I noticed you were viewing {{pageTitle}} — happy to answer any questions! Here's the link for reference: {{currentUrl}}

Custom Variables

Any {{placeholder}} that isn't a built-in dynamic variable becomes a custom variable. When the command launches, a modal appears asking you to fill in each one.

Defining Custom Variables

In the command editor, scroll to the Variables section. For each custom variable you want to configure, add an entry with:

FieldDescription
KeyMust match the placeholder exactly (case-sensitive). E.g. firstName for {{firstName}}.
LabelHuman-readable prompt shown in the fill-in modal. E.g. "Customer's first name".
Typetext, textarea, date, or dropdown.
OptionsFor dropdown type — comma-separated list of choices.
RequiredIf checked, the command won't fire until this field is filled in.

Variable Types

Text input variable
Key: firstName Label: Customer's first name Type: text Required: yes
Dropdown variable
Key: priority Label: Issue priority Type: dropdown Options: Low, Medium, High, Critical

Template using it:

This has been escalated as a {{priority}} priority issue and will be reviewed within 24 hours.
Date variable
Key: followUpDate Label: Follow-up date Type: date

Template using it:

I'll circle back with you on {{followUpDate}}. If you need anything before then, don't hesitate to reach out.
Textarea variable (for longer input)
Key: issueDescription Label: Describe the issue in detail Type: textarea

How Triggers Work

There are two ways to fire a command:

Slash Text Triggers

A slash trigger lets you type a short code inside any text field to expand a command without opening the palette. Set it in the Slash Trigger field when creating a command.

How to Use

  1. Click into any text field on a webpage.
  2. Type /yourkeyword.
  3. Press Tab or Space — the keyword disappears and the command fires.
Note: Slash triggers are case-insensitive and must not contain spaces. Keep them short and memorable — e.g. ty, cob, outreach.

Slash Trigger Examples

Slash keywordCommand nameWhat it inserts
/tyThank You — QuickShort appreciation message
/cobClose of Business"I'll have this ready by close of business today."
/refundRefund PolicyFull refund policy paragraph
/sigEmail SignatureName, title, contact info
/oooOut of OfficeAuto-reply template with {{returnDate}}
/improveAI: Polish ThisSends current field text to AI for rewriting

Conditions Pro

Conditions are rules that control when a command is visible and executable. A command with unmet conditions is hidden from the palette on that page — keeping your list clean and contextual.

All conditions must pass (AND logic). You can add multiple conditions to a single command.

Condition Types

TypeWhat it checks
Site / HostnameThe domain of the current page (e.g. zendesk.com).
URLThe full URL of the current page.
Site NameRecognized friendly name — Gmail, LinkedIn, GitHub, Slack, etc.
Selected Text ExistsWhether the user has text highlighted on the page.
Input FocusedWhether the cursor is inside a text field.

Operators

OperatorMeaning
containsThe field includes the value anywhere
equalsExact match (case-insensitive)
startsWithField begins with the value
endsWithField ends with the value
existsThe field is not empty
notExistsThe field is empty

Condition Examples

Only show on Zendesk
Type: hostname Operator: contains Value: zendesk.com
Only show when text is selected
Type: selectedTextExists Operator: exists

Useful for AI "rewrite selection" commands — no text selected = command hidden.

Only show on GitHub issues and PRs
Type: url Operator: contains Value: github.com/
Only show on LinkedIn (recognized site)
Type: siteName Operator: equals Value: LinkedIn

Action Types

After a command's template is resolved, an action defines what happens with the resulting text. Most commands use the default Insert Text action, but you can chain multiple actions or pick alternatives.

ActionWhat it does
Insert Text
insert_text
Types the resolved text into the focused input at cursor position. This is the default.
Replace Selection
replace_selection
Replaces highlighted text with the resolved text. Falls back to Insert Text if nothing is selected.
Copy to Clipboard
copy_to_clipboard
Puts the resolved text on your clipboard and shows a toast. Nothing is inserted.
Open URL
open_url
Opens a URL in a new tab. The template becomes the URL (variables are resolved, so you can build dynamic URLs).
Submit Form
submit_form
Inserts text then submits the nearest <form>. Shows a confirmation prompt first.
Click Button
click_button
Clicks a button on the page using a CSS selector. Useful for automating repetitive UI flows.
Chain Command
chain_command
Runs another command after this one completes. Lets you compose complex sequences.

Action Examples

Copy to clipboard (no insertion)

Command: "Copy — Meeting Link"
Template: https://meet.google.com/abc-defg-hij Action: copy_to_clipboard

Slash trigger /meet → copies your link to clipboard instantly. No text is typed.

Open a dynamic URL

Command: "Search — Jira Ticket"
Template: https://yourcompany.atlassian.net/browse/{{ticketId}} Action: open_url

You're prompted for the ticket ID, then the URL opens in a new tab.

Replace selected text (AI rewrite)

Command: "AI — Shorten This" (AI type)
AI Prompt: Make this more concise. Keep the same meaning. Max 2 sentences: {{inputText}} Action: replace_selection

Highlight a paragraph → launch → AI replaces just the selected text with a shorter version.

Chain commands

Command: "Insert & Copy — Promo Code"
Template: Use code {{promoCode}} for 20% off your first order! Actions: 1. insert_text → types the text into the field 2. chain_command → then runs "Log — Promo Used" command

Examples — Support Teams

Command: "Refund Approved" · Slash: /refund-ok
Hi {{firstName}}, Great news — your refund of {{amount}} has been approved and will appear back on your {{paymentMethod}} within 5–10 business days. Your refund reference number is {{refundId}}. Let me know if there's anything else I can help with! — {{agentName}}
Command: "Escalation Notice" · Condition: hostname contains zendesk.com
Hi {{firstName}}, I want to let you know that I've escalated your ticket to our {{team}} team. They specialize in {{issueType}} and will be reaching out within {{sla}}. Your original ticket #{{ticketNumber}} remains open, so you can reply anytime. Thank you for your patience.
AI Command: "Summarize — Ticket Thread" · Slash: /summarize
You are a support agent assistant. Summarize the following customer support thread in 3 bullet points: - The customer's core issue - What was tried or offered - Current status / next step Thread: {{inputText}}

Select the entire ticket thread, then run this command. The summary is inserted above or copied to clipboard.

Examples — Sales Outreach

Command: "LinkedIn Connect Request" · AI · Condition: siteName equals LinkedIn
Write a short LinkedIn connection request to {{name}}, who works as {{role}} at {{company}}. Context about why I'm reaching out: {{reason}}. Tone: friendly, direct, not salesy. Max 2 sentences. No emojis.
Command: "Follow-Up — No Response" · Slash: /followup
Hi {{firstName}}, I wanted to follow up on my message from {{lastContactDate}}. I know things get busy — just wanted to make sure this didn't get lost. Would a quick {{duration}}-minute call work this week to explore if {{productName}} might be a fit for {{company}}? Happy to work around your schedule.
Command: "Open — CRM Record" · Slash: /crm · Action: open_url
https://app.hubspot.com/contacts/search?query={{email}}

Type a customer email when prompted — their HubSpot record opens instantly.

Examples — Recruiting

Command: "Interview Invite" · Slash: /invite
Hi {{candidateName}}, Thank you for applying to the {{role}} position at {{company}}! We've reviewed your background and would love to schedule an interview. The interview will be a {{duration}} conversation with {{interviewerName}} covering {{topics}}. You can book a time that works for you here: {{schedulingLink}} Looking forward to speaking with you!
AI Command: "Personalize — Outreach" · Condition: siteName equals LinkedIn
Write a personalized recruiter outreach message for a candidate on LinkedIn. Role we're hiring for: {{role}} What makes this role interesting: {{pitch}} Candidate's background (from their profile): {{inputText}} Keep it under 4 sentences. Don't use phrases like "I came across your profile."

Examples — Developers

Command: "PR Description Template" · Condition: hostname contains github.com
## What does this PR do? {{summary}} ## Why? {{motivation}} ## How to test 1. {{testStep1}} 2. {{testStep2}} ## Checklist - [ ] Tests added/updated - [ ] Docs updated - [ ] No breaking changes (or noted above)
AI Command: "Explain — Selected Code" · Action: copy_to_clipboard
Explain the following code in plain English. Assume the reader is a mid-level developer. Format: 1 sentence summary, then a bulleted breakdown of key logic. Code: {{selectedText}}

Highlight a function → run → AI explanation is copied to clipboard ready to paste into a comment or Slack.

Command: "Open — Docs Search" · Slash: /docs · Action: open_url
https://your-internal-docs.com/search?q={{searchTerm}}

Type your search term in the prompt → internal docs open in a new tab.

Ready to build your library?

Start with a few commands in your most-used workflow and grow from there.

Add cannedIQ to Chrome →