skills/oref/SKILL.md
Guidance for using the Oref Flutter signals/state management library and its DevTools/analyzer tooling. Use when answering questions about installing Oref, creating signals/computed/effects, async data, reactive collections, SignalBuilder usage, analyzer lints, DevTools extension setup/usage, or troubleshooting Oref behavior.
npx skillsauth add medz/oref orefInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Based on the Oref docs and repository examples. Use BuildContext-bound APIs inside widget builds when possible.
signal(context, ...)/computed(context, ...)/effect(context, ...) inside build.null context only outside widgets, and keep the dispose handle.SignalBuilder to scope rebuilds to small subtrees.batch() for multi-step updates or collection mutations.computed getters.| Topic | Description | Reference |
| ----------------- | --------------------------------------------------------------------------- | ------------------------------------------------ |
| Quick Start | Install + minimal signal/computed/effect usage | quick-start |
| Reactivity Core | Signals, computed, writableComputed, effects, batch, untrack, SignalBuilder | core-api |
| Hooks & Lifecycle | Hook ordering rules, onMounted/onUnmounted, cleanup | hooks-lifecycle |
| Async Data | useAsyncData lifecycle and rendering | async-data |
| Collections | ReactiveList/Map/Set patterns | collections |
| Topic | Description | Reference | | --------------- | ------------------------------- | ------------------------------------------------ | | Analyzer Lints | Plugin setup + lint catalog | analyzer-lints | | DevTools | Extension setup + runtime notes | devtools | | Troubleshooting | Common pitfalls and fixes | troubleshooting |
import 'package:flutter/material.dart';
import 'package:oref/oref.dart';
class Counter extends StatelessWidget {
const Counter({super.key});
@override
Widget build(BuildContext context) {
final count = signal(context, 0);
final doubled = computed(context, (_) => count() * 2);
return Column(
children: [
Text('Count: ${count()} / ${doubled()}'),
TextButton(onPressed: () => count.set(count() + 1), child: const Text('Add')),
],
);
}
}
import 'package:oref/oref.dart';
pubspec.yaml or ask them to confirm.tools
Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layers like Lobster, ACPX, plugins, or plain code. Keep conditional logic in the caller; use TaskFlow for flow identity, child-task linkage, waiting state, revision-checked mutations, and user-facing emergence.
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
A CLI tool for making authenticated requests to the X (Twitter) API. Use this skill when you need to post tweets, reply, quote, search, read posts, manage followers, send DMs, upload media, or interact with any X API v2 endpoint.