Agent skill

Add Tour

by macro-inc in macro-inc/macro

Add or change an in-app feature tour (a view's guided flyover) in the web app.

AGPL-3.0Auto-check passed

Install Add Tour

skills CLI
$ npx skills add macro-inc/macro --skill add-tour -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install macro-inc/macro add-tour --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/macro-inc/macro.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/add-tour .claude/skills/add-tour && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
add-tour
GitHub stars
4.6k
Token cost
~1.8k tokens
SKILL.md length
831 words
Files
1
Skills in repo
19
Repo updated
First seen
Licence
AGPL-3.0

At a glance

Add or change an in-app feature tour (a view's guided flyover) in the web app.

  • Works in 6 steps: Declare targets → Attach targets → Define the tour → …
  • Adding a tour to a view
  • SKILL.md covers 1. Declare targets, 2. Attach targets, 3. Define the tour and 4. Never navigate for the…, plus 2 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Add Tour is an agent skill from macro-inc/macro. Add or change an in-app feature tour (a view's guided flyover) in the web app. Use when adding a tour to a view, adding or editing tour steps, pointing a step at a new control, or when a step's target needs something opened first.

Its SKILL.md is about 1.8k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

The repository describes itself as: Macro is a unified workspace for teams: email, chat, docs, tasks, agents, calls, and CRM — @-linked together with shared AI memory. The licence is AGPL-3.0.

When your agent uses it

  • Adding a tour to a view
  • Editing tour steps
  • Pointing a step at a new control
  • A steps target needs something opened first

Example prompts

  • “/add-tour”

Workflow steps

6 steps, taken from the step headings in SKILL.md.

  1. Declare targets
  2. Attach targets
  3. Define the tour
  4. Never navigate for the user: use an entry
  5. Mount it
  6. Test and document

What it can do on your machine

Read from SKILL.md and the folder at commit 73b0244. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are typescript).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Add Tour loads about 1.8k tokens when it runs. Until then it costs about 60 tokens; SKILL.md has 831 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~60
When it runs · the whole SKILL.md, loaded when a task matches
~1.8k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from macro-inc/macro at commit 73b0244, republished under its AGPL-3.0 licence (© macro-inc). 831 words, ~1,819 tokens.

Download SKILL.mdSave it as .claude/skills/add-tour/SKILL.md (or your agent's skills folder).
name
add-tour
description
Add or change an in-app feature tour (a view's guided flyover) in the web app. Use when adding a tour to a view, adding or editing tour steps, pointing a step at a new control, or when a step's target needs something opened first.

Add or change an in-app tour

Frontend only. Two layers:

LayerWhereWhat
Primitiveapps/web/src/components/ui/components/Tour/Tour.* parts, defineTourTargets, tourTarget. Generic; no app knowledge.
Appapps/web/src/features/tours/ViewTour (desktop gate, per-user dismissal, connector/video CTAs), defineViewTour.
Per viewapps/web/src/features/<view>/tour.tsThe view's targets and its tour definition.

Read an existing tour.ts first. channels-view/tour.ts and agents-view/tour.ts show entries; calendar-view/tour.ts shows the sidebar toggle entry.

1. Declare targets

In the view's tour.ts:

ts
export const REPORTS_TOUR = defineTourTargets('reports', ['filters', 'chart']);
  • Ids are namespace.name. Use the view's name as the namespace.
  • Targets are view-scoped: they resolve only inside the tour's split. Pass { scope: 'app' } only for shared chrome outside any split (see command/sidebar/tour.ts).
  • Reuse shared targets before adding new ones:
    • VIEW_SHELL_TOUR (@app/components/view-shell/tour): aside, main, topBar, sidebarToggle. Every ViewShell registers these.
    • SOUP_TOUR (features/next-soup/tour.ts): list.
    • CHANNEL_TOUR (features/channel/tour.ts): messages, composer, call.
    • APP_TOUR (features/command/sidebar/tour.ts): createMenu.

Never target with selectors, data-* attributes, or aria-label lookups. If the control you want isn't registered, register it (step 2).

2. Attach targets

tsx
<div ref={tourTarget(REPORTS_TOUR.filters)}>…</div>
  • The element must have a box. display: contents wrappers never resolve; attach to a real element.
  • Never write a conditional ref like ref={cond ? tourTarget(X) : undefined}. The Solid compiler silently drops it, and the target never registers. Create the ref in the component body and decide inside a callback: const target = tourTarget(X); then ref={(el) => { if (cond) target(el); }}.
  • If the element already has a ref, call both: ref={(el) => { existing(el); target(el); }} with const target = tourTarget(...) created in the component body, or use mergeRefs from @solid-primitives/refs.
  • For a component that doesn't forward ref, add a ref prop that it passes to its root (see SidebarCreateButton).
  • A lower-level feature may import targets from the view that owns the tour (for example, features/calendar imports CALENDAR_TOUR).

3. Define the tour

ts
export const reportsTour = defineViewTour({
  id: 'reports',            // dismissal key: never reuse or rename casually
  title: 'Reports',
  connector: { kind: 'mcp', label: 'Linear', tools: ['Linear'] }, // optional
  video: { youtubeId: '…', title: '…', duration: '1:23' },          // optional
  steps: [
    { target: REPORTS_TOUR.filters, title: '…', description: '…' },
    { target: [REPORTS_TOUR.chart, VIEW_SHELL_TOUR.main], title: '…', description: '…' },
  ],
});
  • target may be a list; the first shown one wins. Use this for features that aren't always rendered (behind a flag, a connection, or data such as "more than one calendar"): list the real control first and the nearest always-present surface after it, and set missingHint. The hint shows whenever the step falls back.
  • Before relying on a target, check every branch that renders it: touch vs desktop headers, preview vs workspace, empty states. Register the same target in each branch that shows the control.
  • A step without target floats in the split.
  • missingHint explains how to reach or enable the feature when the step floats or falls back.
  • placement (a floating-ui Placement) overrides the default right-start.
Show full SKILL.md (442 more words)Show less

4. Never navigate for the user: use an entry

If a step's target is behind something (a collapsed sidebar, another page, an unopened item), don't open it from the tour. Give the step an entry:

ts
{
  target: REPORTS_TOUR.chart,
  entry: VIEW_SHELL_TOUR.sidebarToggle,
  entryLabel: 'Open the sidebar to continue the tour',
  title: '…',
  description: '…',
}

While the target is missing and the entry is shown, the card hides, a beacon marks the entry, and a small card beside it shows entryLabel with Skip. The beacon stays until the target appears, however the user gets there. Register the entry control as a target like any other.

  • Keep entryLabel short and imperative: "Open a channel or DM to continue".
  • Chain entries when the entry itself can be hidden. The first shown one wins, so list the real control first and the sidebar toggle last: entry: [CHANNELS_TOUR.conversation, VIEW_SHELL_TOUR.sidebarToggle]. With the sidebar collapsed the beacon marks the toggle; once it opens, the beacon moves to the row.
  • ViewTour appends VIEW_SHELL_TOUR.sidebarToggle to every step that has a target, so a step whose target is in a collapsed sidebar always marks the toggle. You still need it explicitly only as the last link of a chain you write yourself.
  • A view that collapses its sidebar itself instead of through ViewShell (like Customers' NavigationToggle) must register its own expand control as VIEW_SHELL_TOUR.sidebarToggle, or those steps will float.
  • Point entries at a specific control, not a large container. When many elements share a target (every conversation row), the top-most one on screen is used.

5. Mount it

Mount once, inside the view's split (usually in ViewShell.Main or next to the list):

tsx
<ViewTour tour={reportsTour} />
<ViewTour tour={tasksTour} actions={<ImportLinearAction />} />  // extra CTAs
  • For SoupView-based routes, pass it through the slot: <SoupView … tour={<ViewTour tour={callsTour} />} />.
  • Don't put it inside a <Show> branch that remounts on navigation, or the tour restarts at step 1.
  • Don't gate it on desktop or on a flag yourself; ViewTour already checks both. All tours sit behind the enableInAppTours flag (enable-in-app-tours in PostHog). To see tours on the local dev server, start it with VITE_ENABLE_IN_APP_TOURS=true.
  • Don't pass step callbacks that change pages or open panels.

6. Test and document

  • Unit behavior of the primitive lives in Tour/Tour.test.tsx and app behavior in features/tours/ViewTour.test.tsx; add cases there when you change them.
  • The primitive's gallery page is Tour/Tour.docs.tsx.
  • Progress is saved per user in local storage under macro:tour:<id> (completed, dismissed, or the active step). Changing a tour's steps doesn't reset it for users who finished it; bump the id only if everyone must see the new version.
  • Check it in a browser with VITE_ENABLE_IN_APP_TOURS=true: on localhost the tour reopens on every mount. Walk every step, including one that waits on an entry, once with the sidebar open and once collapsed.
  • Update docs/AGENT_GUIDE/view-tours.md when a view gains a tour or its steps change.

© macro-inc, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/add-tour of macro-inc/macro.

Open the folder on GitHubat commit 73b0244

Compare with similar skills

Add Tour next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Add Tour compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Add Tour this skillmacro-inc/macro4.6k—~1.8kAutomated safety check: PassAGPL-3.0
Code Touraffaan-m/ECC276k1 repos~2kAutomated safety check: PassMIT
Code Touraffaan-m/ECC276k—~1kAutomated safety check: PassMIT
Mem0 Memory Tourmem0ai/mem067k—~652Automated safety check: PassApache-2.0
Code Touraffaan-m/ECC276k—~295Automated safety check: PassMIT
Code Tourgithub/awesome-copilot40k1 repos~5.6kAutomated safety check: PassMIT

Similar skills

  • Code Tour

    affaan-m/ECC

    Create CodeTour .tour files — persona-targeted, step-by-step walkthroughs with real file and line anchors.

    276k GitHub starsUsed in 1 repo~2k tokens
    DevelopmentAuto-check passed
  • Code Tour

    affaan-m/ECC

    创建 CodeTour .tour 文件——针对特定角色的、带有真实文件和行锚点的逐步演练。用于入职引导、架构演练、PR 演练、RCA 演练以及结构化的“解释其工作原理”请求。

    276k GitHub stars~1k tokensUpdated 4 days ago
    DevelopmentAuto-check passed
  • Mem0 Memory Tour

    mem0ai/mem0

    Shows every stored Mem0 memory grouped by category with full text, optionally across all projects or filtered by a search query.

    67k GitHub stars~652 tokensUpdated today
    Agent WorkflowsAuto-check passed
  • Code Tour

    affaan-m/ECC

    CodeTour .tourファイルを作成 — ペルソナターゲット、ステップバイステップウォークスルー(実際のファイルとラインアンカー付き)。オンボーディングツアー、アーキテクチャウォークスルー、PRツアー、RCAツアー、構造化「これがどのように機能するかを説明」リクエストに使用。

    276k GitHub stars~295 tokensUpdated 4 days ago
    DevelopmentAuto-check passed
  • Code Tour

    github/awesome-copilot

    Official

    A skill your agent uses to create CodeTour .tour files — persona-targeted, step-by-step walkthroughs that link to real files and line numbers.

    40k GitHub starsUsed in 1 repo~5.6k tokens
    DevelopmentAuto-check passed
  • Shows everything mem0 has stored for the current project, grouped by category, with a compact search mode and an all-projects view.

    67k GitHub stars~1.6k tokensUpdated today
    Agent WorkflowsAuto-check passed

More from macro-inc/macro

All 19 skills in this repo
  • Mintlify API

    macro-inc/macro

    Interact with the Mintlify REST API to manage deployments, trigger builds, and query documentation site metadata programmatically.

    4.6k GitHub starsUsed in 2 repos~333 tokens
    Auto-check passed
  • Define Feature Flag

    macro-inc/macro

    Define a frontend feature flag with defineFlag and wire its readers.

    4.6k GitHub stars~780 tokensUpdated today
    Auto-check passed
  • Run App

    macro-inc/macro

    Run the Macro app on Cursor Cloud and pick up edits. An agent skill from macro-inc/macro.

    4.6k GitHub stars~712 tokensUpdated today
    Auto-check passed
  • Add SDK Endpoint

    macro-inc/macro

    Wrap a new backend endpoint in the TypeScript SDK (packages/sdk), or record it as skipped.

    4.6k GitHub stars~1k tokensUpdated today
    Auto-check: notes
  • Enforce hexagonal architecture in the Rust backend. An agent skill from macro-inc/macro.

    4.6k GitHub stars~3k tokensUpdated today
    Auto-check passed
  • Collab Surface Core

    macro-inc/macro

    A skill your agent uses when adding collaborative markdown, notes, or descriptions to a feature with collab surfaces.

    4.6k GitHub stars~639 tokensUpdated today
    Auto-check passed

Questions about Add Tour

What does Add Tour do?

Add or change an in-app feature tour (a view's guided flyover) in the web app. Add Tour is an agent skill from macro-inc/macro. Add or change an in-app feature tour (a view's guided flyover) in the web app.

When should I use Add Tour?

Add Tour fits situations like: adding a tour to a view; editing tour steps; pointing a step at a new control; A steps target needs something opened first.

How do I install Add Tour in Claude Code?

Run `npx skills add macro-inc/macro --skill add-tour -a claude-code`. Or copy the skill folder (.claude/skills/add-tour in macro-inc/macro) into .claude/skills/add-tour in your project. Claude Code loads it when a task matches its description.

How do I install Add Tour in Codex?

Run `npx skills add macro-inc/macro --skill add-tour -a codex`. Or copy the skill folder (.claude/skills/add-tour in macro-inc/macro) into .agents/skills/add-tour in your project. Codex loads it when a task matches its description.

Can I use Add Tour in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add macro-inc/macro --skill add-tour -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/add-tour, .gemini/skills/add-tour, .github/skills/add-tour and .opencode/skills/add-tour in your project.

What does Add Tour need to run?

SKILL.md names no scripts, command-line tools or credentials: Add Tour is instructions for the agent only.

Does Add Tour access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Add Tour safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Add Tour use?

Add Tour is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Add Tour use?

About 1.8k tokens (SKILL.md is roughly 7.3k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Add Tour?

Skills that share tags, products or a category with Add Tour: Code Tour (affaan-m/ECC, 276k stars), Code Tour (affaan-m/ECC, 276k stars), Mem0 Memory Tour (mem0ai/mem0, 67k stars) and Code Tour (affaan-m/ECC, 276k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Add Tour?

macro-inc (a GitHub organization) maintains it in macro-inc/macro, which has 4,597 GitHub stars. The repository holds 19 skills in this directory. The repository was last updated on October 9, 2026.

Source: macro-inc/macro on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.