mnt/skills/knotty/SKILL.md
C# MVI state management framework. Use when working with KnottyStore, KnottyBus, IEffect, IntentHandlingStrategy, or "using Knotty;".
npx skillsauth add lukewire129/knotty knottyInstall 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.
무엇을 만들고 있나?
│
├─ Store 신규 작성 → Knotty.md
├─ DI 등록 / 플랫폼 bootstrapping → Knotty.Setup.md
├─ View에 Store 바인딩 → Knotty.Binding.md
├─ XAML Command 생성 / 바인딩 → Knotty.Command.md
├─ 네비게이션 / Toast / Dialog → Knotty.Effect.md
├─ 검색 debounce / 취소 / 동시 처리 → Knotty.IntentHandling.md
├─ 에러 처리 / HasErrors / 롤백 → Knotty.ErrorHandling.md
├─ Store 간 통신 (Bus) → Knotty.Bus.md
└─ 디버깅 / 로그 → Knotty.Debugger.md
1. State record 정의
public record MyState(int Count = 0);
2. Intent record 정의
public abstract record MyIntent
{
public record Increment : MyIntent;
}
3. Store 구현
public partial class MyStore : KnottyStore<MyState, MyIntent>
{
public MyStore() : base(new MyState()) { }
protected override async Task HandleIntent(MyIntent intent, CancellationToken ct) { ... }
}
4. DI 등록 → Knotty.Setup.md 참고 (플랫폼마다 다름)
5. View에서 DataContext 설정 + Effect 구독 → Knotty.Binding.md 참고
| 주제 | 파일 | |------|------| | State / Intent / Store 시그니처 | Knotty.md | | DI 등록 (MAUI / WPF / Avalonia) | Knotty.Setup.md | | View 바인딩 패턴 | Knotty.Binding.md | | Command 생성 / Source Generator | Knotty.Command.md | | Side Effect (navigation, toast) | Knotty.Effect.md | | 동시성 전략 (debounce, cancel) | Knotty.IntentHandling.md | | 에러 처리 패턴 | Knotty.ErrorHandling.md | | Store 간 통신 | Knotty.Bus.md | | 디버깅 | Knotty.Debugger.md |
using Knotty; 하나로 모든 타입 접근 가능. 다른 Knotty 하위 namespace 불필요.partial 필수HandleIntent 내부 모든 await에 ct 전달Unloaded/OnNavigatedFrom에서 반드시 .Dispose()[ObservableProperty], [RelayCommand] — CommunityToolkit과 혼용 금지State.SomeProperty = value — 직접 mutation. 반드시 State = State with { ... }bool ShowToast, string NavigateTo 같은 일회성 플래그State 필드에 IEffect 인스턴스 저장HandleIntent 안에서 _ = SomeAsync() fire-and-forget (ct 전파 끊김)| 실수 | 올바른 방법 |
|------|------------|
| [ObservableProperty] public int Count { ... } | State record 필드로 관리, Store가 INPC 자동 구현 |
| State.Count++ 직접 mutation | State = State with { Count = State.Count + 1 } |
| await Task.Delay(1000) — ct 없이 | await Task.Delay(1000, ct) |
| Store에 partial 없이 [IntentCommand] 사용 | public partial class MyStore : KnottyStore<...> |
| Effect를 bool IsDialogOpen으로 State에 넣음 | EmitEffect(new MyEffect.ShowDialog(...)) |
| KnottyBus.Subscribe 없이 Bus 메시지 수신 기대 | 생성자에서 SubscribeToBus() 명시적 호출 |
development
Maintainer-only workflow for handling GitHub Secret Scanning alerts on OpenClaw. Use when Codex needs to triage, redact, clean up, and resolve secret leakage found in issue comments, issue bodies, PR comments, or other GitHub content.
development
Maintainer workflow for OpenClaw releases, prereleases, changelog release notes, and publish validation. Use when Codex needs to prepare or verify stable or beta release steps, align version naming, assemble release notes, check release auth requirements, or validate publish-time commands and artifacts.
development
Run, watch, debug, and extend OpenClaw QA testing with qa-lab and qa-channel. Use when Codex needs to execute the repo-backed QA suite, inspect live QA artifacts, debug failing scenarios, add new QA scenarios, or explain the OpenClaw QA workflow. Prefer the live OpenAI lane with regular openai/gpt-5.4 in fast mode; do not use gpt-5.4-pro or gpt-5.4-mini unless the user explicitly overrides that policy.
development
End-to-end Parallels smoke, upgrade, and rerun workflow for OpenClaw across macOS, Windows, and Linux guests. Use when Codex needs to run, rerun, debug, or interpret VM-based install, onboarding, gateway smoke tests, latest-release-to-main upgrade checks, fresh snapshot retests, or optional Discord roundtrip verification under Parallels.