Agent skill

Signals Core Advanced Primitives

by rodydavis in rodydavis/signals.dart

Reference for the advanced parts of Dart's signals_core: reactive primitives, async signals, reactive collections and utility types, with a linked page for each.

Apache-2.0Auto-check passedDevelopment

Install Signals Core Advanced Primitives

skills CLI
$ npx skills add rodydavis/signals.dart --skill signals-dart -a claude-code

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

GitHub CLI
$ gh skill install rodydavis/signals.dart signals-dart --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/rodydavis/signals.dart.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/signals-dart .claude/skills/signals-dart && 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
signals-dart
GitHub stars
819
Token cost
~1.7k tokens
SKILL.md length
506 words
Files
26
Skills in repo
15
Repo updated
First seen
Licence
Apache-2.0

At a glance

Reference for the advanced parts of Dart's signals_core: reactive primitives, async signals, reactive collections and utility types, with a linked page for each.

  • Works in 5 steps: signal(initialValue) → untracked(fn) → computed(fn) → …
  • Managing app state with signals in a Dart or Flutter project
  • SKILL.md covers Related Documentation & Items, Core Primitives Quick Start…, 1. Writable Computed Signal… and 2. Collections and Async…, plus 1 more section
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

This skill is a guide to the advanced features of `signals_core`, the reactive state package for Dart and Flutter. Its main page indexes a set of linked notes covering the core primitives (`signal`, `computed`, `effect`, readonly views and `batch`), asynchronous signals and reactive collections.

The async notes cover future and stream signals, a container that maps loading, data and error states, composable async computations with race-condition protection, and a signal that merges several async signals into one result. The collection notes cover list, set, map, iterable and queue signals that react at element level. A section on utility primitives is cut off in the excerpt. The folder carries a CONTEXT.md and a separate note for each signal type.

When your agent uses it

  • Managing app state with signals in a Dart or Flutter project
  • Wrapping a Future or Stream in a signal with loading, data and error states
  • Using reactive lists, maps or sets that notify on element changes
  • Batching several state updates to avoid redundant recomputation

Example prompts

  • “Replace the ValueNotifier in my Flutter counter screen with a signal and a computed value.”
  • “Show me how to turn this API Future into a future signal with loading and error states.”
  • “Convert my to-do list state into a list signal so the UI updates per element.”
  • “Batch these three signal updates so the effect only runs once.”

Requirements

  • The `signals_core` package in a Dart or Flutter project

Workflow steps

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

  1. signal(initialValue)
  2. untracked(fn)
  3. computed(fn)
  4. effect(fn)
  5. batch(fn)

What it can do on your machine

Read from SKILL.md and the folder at commit 81d64e8. 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 dart).

    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

Signals Core Advanced Primitives loads about 1.7k tokens when it runs. Until then it costs about 25 tokens; SKILL.md has 506 words of instructions outside code blocks.

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

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 rodydavis/signals.dart at commit 81d64e8, republished under its Apache-2.0 licence (© rodydavis). 506 words, ~1,705 tokens.

Download SKILL.mdSave it as .claude/skills/signals-dart/SKILL.md (or your agent's skills folder). This skill also uses 25 other files; get the full folder from GitHub.
name
signals-dart
description
Advanced reactive state primitives, collections, mixins, and utilities of signals_core.

Signals Core Advanced Primitives

This skill details advanced state management primitives, reactive collections, async features, and value options semantics in signals_core.

Core Primitives
Related FileDescription
signal.mdStandard writeable reactive state primitive containing value accessors, mutation mechanics, and basic custom options.
computed.mdLazy, memoized read-only derived state signal tracking reactive dependencies dynamically.
effect.mdSynchronous observer managing active subscription loops, dynamic dependency updates, and lifecycle teardown.
readonly.mdRead-only signal views ensuring unidirectional data access flows.
batch.mdTransactional state mutation blocks optimizing reactive computations and preventing rendering/recompute churn.
Asynchronous Operations
Related FileDescription
future_signal.mdSingle-evaluation asynchronous future state representation resolving the double-evaluation issue.
stream_signal.mdDynamic, lifecycle-safe, self-disposing stream listener mapping to async loading/data/error states.
async_signal.mdUnifying async state container mapping loading, success data, and failure error states cleanly.
computed_async.mdComposable asynchronous operations built over reactive signals with active race condition protection.
computed_from.mdState aggregator signal merging multiple async signals into a single unified result.
Reactive Collections
Related FileDescription
list_signal.mdOptimized list wrapper proxying standard operations to support element-level reactivity.
set_signal.mdCustom set wrapper ignoring duplicates and notifying on unique mutations.
map_signal.mdGranular map wrapper supporting isolated dictionary element lookup triggers.
iterable_signal.mdIterable wrapper mapping custom lazy traversals to dynamic subscription layers.
queue_signal.mdDouble-ended queue wrapper supporting optimized reactive pipeline structures.
Utility Primitives
Related FileDescription
linked_signal.mdWritable computed signals supporting manual override resets and custom equivalence checks.
tracked_signal.mdState history wrapper enabling clean out-of-the-box undo/redo mechanisms.
timer_signal.mdPeriodically emitting stopwatch signal with built-in pause, resume, and reset.
connect.mdDynamic event connector feeding multiple external data pipelines into single targets.

Core Primitives Quick Start Guide

The signals library exposes five core functions which are the building blocks to model any reactive business logic.

1. signal(initialValue)

Creates a new mutable signal container. You read a signal's value or subscribe to updates by accessing .value.

dart
final counter = signal(0);
print(counter.value); // 0
counter.value = 1; // Mutates value and schedules dependent updates
Show full SKILL.md (202 more words)Show less
.peek()

Reads a signal's current value without subscribing to its mutations.

dart
final counter = signal(0);
final logCount = signal(0);

effect(() {
  print(counter.value);
  // Read using peek to avoid subscribing/triggering loop
  logCount.value = logCount.peek() + 1;
});
2. untracked(fn)

Executes a callback that reads signals without subscribing to any of them.

dart
final counter = signal(0);
final count = signal(0);

effect(() {
  print(counter.value);
  count.value = untracked(() => count.value + 1);
});
3. computed(fn)

Combines the values of multiple signals into a lazy, memoized derived signal.

dart
final first = signal('John');
final last = signal('Doe');
final fullName = computed(() => '${first.value} ${last.value}');
print(fullName.value); // John Doe
4. effect(fn)

Orchestrates immediate synchronous side effects by running a callback and subscribing to any signals read within it.

dart
final name = signal('Jane');
final dispose = effect(() => print('Hello $name'));
dispose(); // Clean up subscription
5. batch(fn)

Groups multiple signal writes into a single transaction, executing all dependent computed evaluations and effects exactly once at the end.

dart
final a = signal(0);
final b = signal(0);

batch(() {
  a.value = 1;
  b.value = 2;
});

1. Writable Computed Signal (linkedSignal)

A writable computed signal (LinkedSignal) provides a derived default value that can be overridden manually, resetting back to the derived default whenever its upstream dependencies mutate.

Usage
dart
// Basic reset shorthand:
final size = signal('M');
final selection = linkedSignal(() => size.value);

// Advanced structural comparison:
final user = signal((id: 1, name: 'Alice'));
final name = linkedSignal<String, ({int id, String name})>(
  () => user.value,
  options: LinkedSignalOptions(
    computation: (u, prev) {
      if (prev != null && prev.source.id == u.id) {
        return prev.value; // Retain manual override
      }
      return u.name; // Reset on ID changes
    },
  ),
);

2. Collections and Async Primitives

A. Collections

Always use specialized collections (listSignal, setSignal, mapSignal, etc.) to wrap collections to ensure optimized mutations (only triggering updates when elements actually change).

dart
final list = listSignal([1, 2], options: ListSignalOptions(autoDispose: true));
list.add(3); // Reacts to changes
B. Optimized FutureSignal

FutureSignal inherits directly from AsyncSignal to bypass Stream subscription overhead and tracks its dependencies manually via computed execution, executing future computations exactly once (avoiding double-evaluation loops).

dart
final search = signal('');
final results = futureSignal(() => fetchResults(search.value));

3. Options Classes Value Semantics

All signal option objects support full value semantics (copyWith, custom equality, and hashCode overrides) for flexible copying and accurate comparisons:

  • SignalOptions
  • ComputedOptions
  • AsyncSignalOptions
  • LinkedSignalOptions
  • ListSignalOptions / SetSignalOptions / MapSignalOptions

© rodydavis, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 25 other files in skills/signals-dart of rodydavis/signals.dart.

  • SKILL.md
  • CONTEXT.md
  • async/CONTEXT.md
  • async/async_signal.md
  • async/computed_async.md
  • async/computed_from.md
  • async/future_signal.md
  • async/stream_signal.md
  • collections/CONTEXT.md
  • collections/iterable_signal.md
  • collections/list_signal.md
  • collections/map_signal.md
  • collections/queue_signal.md
  • collections/set_signal.md
  • core/CONTEXT.md
  • core/batch.md
  • core/computed.md
  • core/effect.md
  • … and 8 more

Open the folder on GitHubat commit 81d64e8

Compare with similar skills

Signals Core Advanced Primitives 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.

Signals Core Advanced Primitives compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Signals Core Advanced Primitives this skillrodydavis/signals.dart819—~1.7kAutomated safety check: PassApache-2.0
Squadron Workerd-markey/squadron138—~1.6kAutomated safety check: PassMIT
Flutter Dart Code Reviewaffaan-m/ECC277k2 repos~5.8kAutomated safety check: NotesMIT
Flutter Bloc and Cubitandrewyng/context-hub14k—~998Automated safety check: PassMIT
Flutter ExpertFNOSP/FlyNarwhal5092 repos~758Automated safety check: PassMIT
Flutter Riverpod State Managementandrewyng/context-hub14k—~1.1kAutomated safety check: PassMIT

Similar skills

  • Squadron Worker

    d-markey/squadron

    A skill your agent uses when building, writing, or refactoring Squadron workers, worker pools, worker services, or using squadronbuilder annotations (@SquadronService, @SquadronMethod) for…

    138 GitHub stars~1.6k tokensUpdated 18 days ago
    MobileAuto-check passed
  • Library-agnostic Flutter/Dart code review checklist covering widget best practices, state management patterns (BLoC, Riverpod, Provider, GetX, MobX, Signals), Dart idioms, performance…

    277k GitHub starsUsed in 2 repos~5.8k tokens
    MobileAuto-check: notes
  • Flutter Bloc and Cubit

    andrewyng/context-hub

    Helps choose between Bloc and Cubit in Flutter and sets defaults for packages, lifecycle, widget binding and tests.

    14k GitHub stars~998 tokensUpdated 4 mo ago
    MobileAuto-check passed
  • Flutter Expert

    FNOSP/FlyNarwhal

    A skill your agent uses when building cross-platform applications with Flutter 3+ and Dart.

    509 GitHub starsUsed in 2 repos~758 tokens
    MobileAuto-check passed
  • Guides Flutter state management with Riverpod: choosing provider types, wiring ConsumerWidgets, handling async state and lifecycle, and overriding providers in tests.

    14k GitHub stars~1.1k tokensUpdated 4 mo ago
    MobileAuto-check passed
  • Bloc

    VeryGoodOpenSource/vgv-ai-flutter-plugin

    Best practices for Bloc state management in Flutter/Dart, covering Cubit versus Bloc, event and state naming, sealed classes with Equatable, the Page/View split with BlocProvider, BlocBuilder…

    170 GitHub stars~2k tokensUpdated 5 days ago
    MobileAuto-check passed

More from rodydavis/signals.dart

All 15 skills in this repo
  • Jaspr Component Fundamentals

    rodydavis/signals.dart

    Teaches the agent Jaspr's Flutter-like component model and typed HTML elements, with strict rules on build methods and helper syntax.

    819 GitHub stars~1.8k tokensUpdated 27 days ago
    Auto-check passed
  • Jaspr CSS-in-Dart Styling

    rodydavis/signals.dart

    Guides styling of Jaspr web components with the type-safe Styles API in Dart, covering @css annotations, inline styles and global stylesheets.

    819 GitHub stars~1.7k tokensUpdated 27 days ago
    Auto-check passed
  • Jaspr JS Interop

    rodydavis/signals.dart

    Rules for calling JavaScript from Jaspr web apps in Dart: which interop libraries to import in server, static and client modes, and how to wrap functions, objects and libraries.

    819 GitHub stars~823 tokensUpdated 27 days ago
    Auto-check passed
  • Jaspr Pre-Rendering and Hydration

    rodydavis/signals.dart

    Sets the rules for static or server mode Jaspr apps in Dart, covering dual entrypoints, the client annotation and data hydration.

    819 GitHub stars~1.2k tokensUpdated 27 days ago
    Auto-check passed
  • Update Dart Examples Dependencies

    rodydavis/signals.dart

    Upgrades every package under ./examples to the repository's latest signals version, runs pub upgrade on third-party dependencies, and fixes the resulting analysis problems.

    819 GitHub stars~514 tokensUpdated 27 days ago
    Auto-check passed
  • Jaspr HTML Converter

    rodydavis/signals.dart

    Use when you need to convert / rewrite existing HTML (from a file or url) into Jaspr code.

    819 GitHub stars~378 tokensUpdated 27 days ago
    Auto-check passed

Works with

Questions about Signals Core Advanced Primitives

What does Signals Core Advanced Primitives do?

Reference for the advanced parts of Dart's signals_core: reactive primitives, async signals, reactive collections and utility types, with a linked page for each. This skill is a guide to the advanced features of `signals_core`, the reactive state package for Dart and Flutter. Its main page indexes a set of linked notes covering the core primitives (`signal`, `computed`, `effect`, readonly views and `batch`), asynchronous signals and reactive collections.

When should I use Signals Core Advanced Primitives?

Signals Core Advanced Primitives fits situations like: managing app state with signals in a Dart or Flutter project; wrapping a Future or Stream in a signal with loading, data and error states; using reactive lists, maps or sets that notify on element changes; batching several state updates to avoid redundant recomputation.

How do I install Signals Core Advanced Primitives in Claude Code?

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

How do I install Signals Core Advanced Primitives in Codex?

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

Can I use Signals Core Advanced Primitives 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 rodydavis/signals.dart --skill signals-dart -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/signals-dart, .gemini/skills/signals-dart, .github/skills/signals-dart and .opencode/skills/signals-dart in your project.

What does Signals Core Advanced Primitives need to run?

SKILL.md names no scripts, command-line tools or credentials: Signals Core Advanced Primitives is instructions for the agent only. Our summary lists: The `signals_core` package in a Dart or Flutter project.

Does Signals Core Advanced Primitives 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 Signals Core Advanced Primitives 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 Signals Core Advanced Primitives use?

Signals Core Advanced Primitives is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Signals Core Advanced Primitives use?

About 1.7k tokens (SKILL.md is roughly 6.8k 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 Signals Core Advanced Primitives?

Skills that share tags, products or a category with Signals Core Advanced Primitives: Squadron Worker (d-markey/squadron, 138 stars), Flutter Dart Code Review (affaan-m/ECC, 277k stars), Flutter Bloc and Cubit (andrewyng/context-hub, 14k stars) and Flutter Expert (FNOSP/FlyNarwhal, 509 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Signals Core Advanced Primitives?

rodydavis (a GitHub user) maintains it in rodydavis/signals.dart, which has 819 GitHub stars. The repository holds 15 skills in this directory. The repository was last updated on September 14, 2026.

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