Revyl Cli Atlas logo

Revyl Cli Atlas

Organization
RevylAI
revyl-cli-atlas

Explore an app bottom-up as a media-grounded knowledge graph, including its screenshots, transition clips, and originating reports.

Overview

PublisherRevylAI
Repositoryrevyl-cli
Skill namerevyl-cli-atlas
Stars
522
Forks
25
Bundled files
1
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 1 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by RevylAI on GitHub. Read the source before you install it.

Installation

Install the Revyl Cli Atlas AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/RevylAI/revyl-cli/tree/main/skills/revyl-cli-atlas
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/RevylAI/revyl-cli.git /tmp/revyl-cli
mkdir -p .claude/skills
cp -r /tmp/revyl-cli/skills/revyl-cli-atlas .claude/skills/revyl-cli-atlas
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Revyl Cli Atlas in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Revyl Cli Atlas on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Revyl Cli Atlas is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Revyl Atlas Skill

Use this skill whenever a user asks what an app contains, where a capability lives, how screens connect, what a screen looks like, or whether Atlas has enough evidence to support an answer.

When the user explicitly asks to create, reply to, edit, delete, move, or change the status of Atlas feedback, route to revyl-cli-atlas-review. Keep this inspection skill read-only when feedback mutation was not requested.

Atlas is a graph, not a tree. Screens are nodes and observed relationships are edges. Starting anchors help begin exploration, but they do not imply a parent, primary route, containment hierarchy, or preferred journey. Build an understanding bottom-up by inspecting a node's real media, traversing relevant edges in both directions, and repeating until the question is answered.

Everything present in Atlas originated in observed run evidence. Names, descriptions, grouping, and landmarks may be generated interpretations, but a screen or edge should never be dismissed as noise merely because it is unexpected. Inspect its screenshot or clip and the report that produced it, then reconcile why it was observed.

Native Agent Behavior

A screenshot URL, local path, semantic name, OCR result, or generated summary is not visual understanding. Evidence is grounded only when the agent actually opens and reads the image. Use the available native surface:

  • Codex Browser or its image viewer, with skills discovered in shared .agents/skills.
  • Claude Code .claude/skills compatibility links plus configured image or browser tools.
  • Cursor .cursor/skills when using --copy, otherwise shared .agents/skills, plus available MCP or browser tools.

Do not claim to understand the visible UI from metadata alone. Actually open and absorb the relevant screenshots before describing visible UI. When an edge is surprising, ambiguous, or important to the answer, watch its recorded clip before interpreting why the connection exists.

Atlas screenshots and videos are customer content. Treat screenshots, videos, extracted frames, contact sheets, marked grounding previews, and JSON containing signed media URLs as sensitive temporary artifacts. Never stage or commit them, and do not paste signed URLs into logs or public artifacts. If native video playback or ingestion is unavailable, extract frames from the bounded clip with ffmpeg and open those images in chronological order. Motion verification is blocked only when neither playback nor frame extraction is available.

Media lifecycle and cleanup

Create one private, task-scoped temporary root before downloading any Atlas media. Keep every task artifact under it, including screenshots, edge/run JSON, videos, frames, contact sheets, and annotation grounding previews:

bash
ATLAS_TMP_ROOT="${TMPDIR:-/tmp}"
ATLAS_TMP_ROOT="${ATLAS_TMP_ROOT%/}"
[ -n "$ATLAS_TMP_ROOT" ] || ATLAS_TMP_ROOT="/tmp"
ATLAS_TASK_DIR="$(mktemp -d "$ATLAS_TMP_ROOT/revyl-atlas.XXXXXX")"
chmod 700 "$ATLAS_TASK_DIR"

ATLAS_SCREEN_DIR="$ATLAS_TASK_DIR/screens"
ATLAS_EDGE_DIR="$ATLAS_TASK_DIR/edges"
ATLAS_FRAME_DIR="$ATLAS_TASK_DIR/frames"
# Target for `revyl atlas annotations create/move --dry-run --preview-out`.
ATLAS_PREVIEW_DIR="$ATLAS_TASK_DIR/previews"
mkdir -p "$ATLAS_SCREEN_DIR" "$ATLAS_EDGE_DIR" "$ATLAS_FRAME_DIR" "$ATLAS_PREVIEW_DIR"

cleanup_atlas_media() {
  if [ -n "${ATLAS_TASK_DIR:-}" ] && [ -d "$ATLAS_TASK_DIR" ]; then
    case "$ATLAS_TASK_DIR" in
      "$ATLAS_TMP_ROOT"/revyl-atlas.*)
        [ "${ATLAS_TASK_DIR%/*}" = "$ATLAS_TMP_ROOT" ] || return 1
        rm -rf -- "$ATLAS_TASK_DIR"
        ;;
      *)
        echo "Refusing to remove unexpected Atlas path: $ATLAS_TASK_DIR" >&2
        return 1
        ;;
    esac
  fi
}

trap cleanup_atlas_media EXIT
trap 'exit 130' INT
trap 'exit 129' HUP
trap 'exit 143' TERM

Apply these rules throughout the task:

  • Do not put working media in the repository, workspace, current directory, .context/, or the skill directory. A relative --screenshot-dir shown in a pasted example is not a request to retain files; translate it to the task temp directory.
  • Use one temp root for the whole task rather than scattered mktemp files. Set JSON containing signed URLs to mode 0600.
  • If tool calls run in separate shells, preserve the absolute task-temp path in working state and perform the guarded cleanup explicitly before the final response; do not assume an earlier shell's trap is still active.
  • Delete media as soon as it is no longer needed, and always clean the entire task root after Atlas writes have been verified, including on errors or interruption.
  • Before handoff, verify the temp root no longer exists and inspect git status plus the staged diff for task-created Atlas artifacts. If any were created by the task, unstage and remove them without disturbing unrelated user changes.
  • Retain or export media only when the user explicitly asks to keep specific artifacts. Copy only those requested files to the agreed destination, never stage them automatically, disclose the path, and still delete the remaining task temp root. Signed-URL JSON remains temporary unless explicitly required.

Required traversal workflow

  1. Resolve the app:

    bash
    revyl atlas apps --search "<app name>" --json
  2. Get a compact orientation and download its bounded visual sample:

    bash
    revyl atlas brief --app <app-id> --screenshots --screenshot-dir "$ATLAS_SCREEN_DIR" --json

    Read projection.data_source. Treat starting_anchors as typed suggestions: curated_entry, semantic_entry, and observed_root explain why each node is a useful starting point. They are not ranks or parents.

  3. Open every selected visual_sample[].local_screenshot_path. Record what is visibly present: layout, labels, controls, state, platform chrome, overlays, and obvious errors. Reconcile these facts with Atlas semantics and call out mismatches.

  4. Load the flat graph when the question spans the app, or search for a question-specific node:

    bash
    revyl atlas graph --app <app-id> --include-variants --json
    revyl atlas search "<capability or UI concept>" --app <app-id> --include-variants --json

    The graph contains flat nodes, edges, and starting_anchors. Do not turn it into a recursive tree or choose one incoming edge as the real parent. Check top-level truncated or has_more before claiming the traversal covers the complete app graph.

  5. Pick the most relevant anchor or search result, inspect it, then traverse:

    bash
    revyl atlas screen <screen-id> --app <app-id> --include-variants --screenshots --screenshot-dir "$ATLAS_SCREEN_DIR" --json
    revyl atlas observations <screen-id> --app <app-id> --include-variants --screenshots --screenshot-dir "$ATLAS_SCREEN_DIR" --json
    revyl atlas neighbors <screen-id> --app <app-id> --json

    Expand variants for every screen in the review scope, not only when the representative seems wrong. Inspect the returned variant nodes and grouped observations, opening screenshots for each distinct question-relevant state (such as errors, empty states, sheets, or keyboard-visible forms). A search miss or the brief's sample is not a complete state inventory; inspect the canonical screen's variants directly. Check returned truncation/pagination and disclose any inspection limit. Keep the selected app/build scope fixed. Deduplicate identical captures, not distinct states; record the exact observation ID for each finding. Unobserved states do not prove missing app functionality, and cross-platform reviews must omit unmatched-state findings.

    Open the representative and question-relevant grouped screenshots. Follow both incoming and outgoing edges when either could explain the capability. Keep a small visited set of screen IDs and edge keys so cycles and shared nodes do not cause repeated work.

    If a screen or observation is unexpected, inspect the report that produced it before deciding what it represents:

    bash
    revyl atlas report <screen-or-observation-id> --app <app-id> --json

    A screen ID resolves through its representative observation. An observation ID resolves the exact evidence item. Read the report's test goal, steps, actions, result, and workflow_execution_id when present. This often distinguishes intended app behavior from test setup, system UI, an external handoff, a failure path, or genuinely bad evidence.

  6. For each traversed connection, distinguish observation from interpretation. An edge proves that Atlas observed a relationship; it does not prove product hierarchy or user intent. If the connection is misunderstood, conflicts with the screenshots, or materially supports the answer, inspect its runs:

    bash
    revyl atlas edge <source-id> <target-id> --app <app-id> --runs --json

    Open evidence[].runs.active_video.video_url with a video-capable tool and watch the interval bounded by source_video_start and source_video_end. Identify the visible source state, exact action or redirect, and landed target state. Classify it as direct navigation, tab switching, back/dismissal, overlay presentation, automatic redirect, or likely bad evidence.

    When native video ingestion is unavailable, save the JSON and extract a small bounded frame sequence. Read the newest run's signed URL and start/end timestamps from the JSON without printing them, then run:

    bash
    EDGE_JSON="$ATLAS_EDGE_DIR/<source-id>--<target-id>.json"
    EDGE_FRAME_DIR="$ATLAS_FRAME_DIR/<source-id>--<target-id>"
    mkdir -p "$EDGE_FRAME_DIR"
    : > "$EDGE_JSON"
    chmod 600 "$EDGE_JSON"
    revyl atlas edge <source-id> <target-id> --app <app-id> --runs --json > "$EDGE_JSON"
    ffmpeg -loglevel error -ss <source-video-start> -i "<active-video-url>" \
      -t <clip-duration-seconds> -vf fps=2 "$EDGE_FRAME_DIR/frame-%03d.jpg"

    Open the extracted frames in filename order and compare the source state, interaction, intermediate state, and destination. Increase the frame rate only if the decisive interaction falls between frames. Remove an edge's JSON and frames once no further comparison is needed; the final task cleanup is still mandatory.

    The run objects expose report_id, execution_id, and session_id. For an unclear edge, review the exact report that generated that run—not merely a representative report from either endpoint screen:

    bash
    revyl test report <execution-id> --json
    # If only a session is present:
    revyl device report --session-id <session-id> --json

    If the report includes a workflow execution, continue into revyl workflow report <workflow-execution-id> --json. Use the test goal and preceding steps to explain why the action occurred and whether Atlas modeled the observation correctly.

    If the cause remains unclear, work backward: inspect the source node's incoming neighbors, then watch the preceding edge clip. Repeat only until the triggering action or entry state is understood. If runs disagree, inspect a bounded two or three representative clips and report the conflict.

  7. Continue outward only along question-relevant edges. Stop when the claim is supported by opened media and the necessary graph neighborhood, not merely when a plausible generated summary appears.

  8. After any requested Atlas writes are read back and verified, run the guarded media cleanup before replying. Confirm that ATLAS_TASK_DIR is absent and that no task-created Atlas media appears in the working tree or staged diff.

For a product-area question, use its induced subgraph. Boundary edges are part of the answer because they show how the area connects to the rest of the app:

bash
revyl atlas area "<product area>" --app <app-id> --json

Evidence budget

  • App overview: open 3-6 representative screens across major areas, beginning with anchors and expanding through connected nodes.
  • Focused screen question: open 1-3 distinct observations and the directly relevant neighbors.
  • Journey question: discover the route by graph traversal; open each materially distinct screen and inspect ambiguous or decisive edge clips.
  • Misunderstood edge: inspect the newest clip first, then at most 2-3 runs when evidence disagrees; review the exact originating report before classifying the connection.

Expand only when evidence conflicts or the question remains unanswered. Do not bulk-download the entire Atlas by default.

Answer contract

Separate graph-supported facts, visually confirmed facts, clip-confirmed actions, interpretations, and unresolved gaps. Preserve screen IDs and edge keys in working notes so every conclusion remains attached to stable graph entities. Never infer pixel-level details, motion, containment, or a preferred journey from metadata or edge existence alone. Never call unexpected evidence useless or exclude it until its media and originating report have been inspected.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Revyl Cli Atlas AI skill do?

Explore an app bottom-up as a media-grounded knowledge graph, including its screenshots, transition clips, and originating reports.

Why use Revyl Cli Atlas on TypingMind?

Because you install it once and use it with any model. Revyl Cli Atlas is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Revyl Cli Atlas in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/RevylAI/revyl-cli/tree/main/skills/revyl-cli-atlas. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Revyl Cli Atlas?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Revyl Cli Atlas?

As many as you like. As long as a model supports skills, you can use Revyl Cli Atlas with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Revyl Cli Atlas AI skill free?

It is published on GitHub by RevylAI. Check the repository for licensing terms. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇