ahel is live on Product Hunt today. Upvote

Skills.

Give your AI a better way to work.

A skill is a set of written instructions that teaches an AI how to do one job the way it should be done: review a pull request, plan a migration, write the release notes.

Install one here and it travels with your account into Claude, Claude Code, Cursor and every other client you sign in with.

Category: Dev tools

16,980 results · page 177 of 566

  • dual-mode-persist-blocking-or-asyncSkillDev tools

    One suspend persistence body driven two ways — blocking on the shutdown path, where the write must complete before the scope dies, and fire-and-forget on periodic ticks — instead of two copies that drift apart. Use when saved state is correct while the app runs but wrong after a hard quit, when a te

    Ready to connect★ 315

    github.com/maxrave-dev/kotlin-footguns390 stars

    View details
  • dual-source-queue-syncSkillDev tools

    A UI-facing track list and the playback engine's timeline both hold the queue, so the UI list is re-derived from the engine timeline by media id after every engine-side change, refused when the sizes disagree, and mutated on both sides for user reorders. Use when the queue on screen plays in a diffe

    Ready to connect★ 315

    github.com/maxrave-dev/kotlin-footguns390 stars

    View details
  • edit-a-shape-as-a-shapeSkillDev tools

    When the value being edited is a curve, draw a draggable curve instead of N sliders and embed it in the settings list instead of pushing a screen — with a raw pointer loop rather than a drag-gesture helper, a draft that commits once per gesture, and smoothing that never overshoots a handle the user

    Ready to connect★ 315

    github.com/maxrave-dev/kotlin-footguns390 stars

    View details
  • encoded-continuation-tokens-local-sortSkillDev tools

    Carry locally sorted and shuffled paging through the same token slot a remote API uses, by prefixing the token with a mode tag and encoding a cursor after it — and reject an unrecognised prefix loudly, because a silently ignored token leaves the pager stuck in its in-flight state and the list never

    Ready to connect★ 315

    github.com/maxrave-dev/kotlin-footguns390 stars

    View details
  • endless-queue-managementSkillDev tools

    One StateFlow holds a growing playback queue but has two write paths on purpose — a full setter that resets derived snapshots, and continuation appends that write the backing field directly so those snapshots survive. Use when a feature keyed on "where the queue came from" stops working once the que

    Ready to connect★ 315

    github.com/maxrave-dev/kotlin-footguns390 stars

    View details
  • enum-normalize-over-legacy-dataSkillDev tools

    Reading a type marker the remote source declares for itself — normalizing before every comparison because locally stored rows from older app versions hold labels the app invented, treating null as "the source did not say" rather than as a default, exposing an is-known predicate so callers branch on

    Ready to connect★ 315

    github.com/maxrave-dev/kotlin-footguns390 stars

    View details
  • equal-buckets-or-no-bucketsSkillDev tools

    Split a span into buckets of exactly equal width and let the remainder fall outside, pick the bucket unit from how many rows a person will read, and never draw a partial newest bucket at full width. Use when a bar chart's oldest or newest bar is inexplicably long or short, when a range produces thir

    Ready to connect★ 315

    github.com/maxrave-dev/kotlin-footguns390 stars

    View details
  • event-not-state-edge-for-one-shot-effectsSkillDev tools

    Fire a one-shot celebration effect from the click that caused it, never from the state that click produced — an effect watching a boolean for a false→true edge cannot tell a tap from data arriving a beat later, so moving to an already-marked record fires the same edge. Covers the @Stable holder that

    Ready to connect★ 315

    github.com/maxrave-dev/kotlin-footguns390 stars

    View details
  • expandable-and-linkified-textSkillDev tools

    Clamp long text to a few lines with a more/less affordance driven by measured overflow instead of a character count, and make timestamps or URLs inside the same text tappable. Use when "more" shows on text that already fits, never shows on text that does not, gets truncated along with the text, or w

    Ready to connect★ 315

    github.com/maxrave-dev/kotlin-footguns390 stars

    View details
  • expect-actual-composable-capabilitySkillDev tools

    Expose a device capability to shared Compose code as a @Composable expect function, with a full implementation on the platform that has it and a stub that returns the neutral value on the platform that does not. Covers the three shapes these take — a measurement, an effect with an undo, and a subscr

    Ready to connect★ 315

    github.com/maxrave-dev/kotlin-footguns390 stars

    View details
  • fgs-state-ended-trapSkillDev tools

    Suppress the "ended" playback state at a forwarding-player boundary while the underlying player is being replaced, so the media service is not torn down in the gap between one player finishing and the next starting. Use when background playback stops partway through a queue on some devices but never

    Ready to connect★ 315

    github.com/maxrave-dev/kotlin-footguns390 stars

    View details
  • filter-chain-two-owners-one-writerSkillDev tools

    Two independent features want entries in one engine property that holds the WHOLE chain, so writing it replaces everything — keep each feature's entries in its own field, compose them in a single writer, and let "clear" drop only its own tier. Use when a second effect is added beside an existing one

    Ready to connect★ 315

    github.com/maxrave-dev/kotlin-footguns390 stars

    View details
  • first-ever-not-first-in-windowSkillDev tools

    Counting entities encountered for the first time means taking MIN over the entity's whole history and asking whether that minimum lands inside the window — the natural version, which filters to the window and then groups, calls every entity new. Covers why the wrong query passes its first test, why

    Ready to connect★ 315

    github.com/maxrave-dev/kotlin-footguns390 stars

    View details
  • flat-twin-shares-geometry-not-materialSkillDev tools

    When a user setting picks between two renderings of the same control — an expensive decorative one and a plain twin — every geometry decision has to be mirrored between them (item width, bar height, indicator size, inset, and the rule that computes the width budget) so toggling changes the material

    Ready to connect★ 315

    github.com/maxrave-dev/kotlin-footguns390 stars

    View details
  • flatmaplatest-resubscribe-composite-keySkillDev tools

    Re-subscribe a downstream flow whenever a key flow changes using flatMapLatest, then collapse the resulting high-frequency stream to a composite key with distinctUntilChanged before firing expensive one-shot work. Use when a fetch re-runs on every progress tick, when it fires for the wrong item afte

    Ready to connect★ 315

    github.com/maxrave-dev/kotlin-footguns390 stars

    View details
  • floating-overlay-reserves-its-own-stripSkillDev tools

    A control floated over a scrolling column is a sibling that takes part in no measurement, so the column has to reserve the strip it covers explicitly — as a leading spacer, or as a header row whose twin spacers keep a centred title centred over the hole. Covers what the strip constant may and may no

    Ready to connect★ 315

    github.com/maxrave-dev/kotlin-footguns390 stars

    View details
  • follower-item-built-from-shared-payloadSkillDev tools

    Build a follower's playable item from the payload the shared session carries, not by re-resolving it from your own catalogue — a local resolver that infers the rendition from artwork shape lands on the wrong one, and a per-item network round trip inside the apply collector wedges every later command

    Ready to connect★ 315

    github.com/maxrave-dev/kotlin-footguns390 stars

    View details
  • follower-transport-stays-localSkillDev tools

    A follower in a shared session owns its own stop button — pausing is local and silent, and pressing play asks where the session is now rather than restoring where this device stopped. Use when a follower cannot pause because the next state update immediately resumes it, when a follower's pause stops

    Ready to connect★ 315

    github.com/maxrave-dev/kotlin-footguns390 stars

    View details
  • force-dark-immersive-subtreeSkillDev tools

    Keep one part of a Compose app rendered dark — screens drawn over dark artwork — while the rest of the app follows the user's light theme, by providing a whole dark colour scheme plus your own token locals to that subtree; includes why a text-colour flag alone is not enough, and the verified fact th

    Ready to connect★ 315

    github.com/maxrave-dev/kotlin-footguns390 stars

    View details
  • foss-vs-proprietary-module-pairsSkillDev tools

    Ship one codebase in two forms — a full build carrying a proprietary or credentialed integration and an open build carrying a no-op stub — using twin modules with an identical public API selected by a Gradle property rather than product flavors, which do not exist for non-Android multiplatform targe

    Ready to connect★ 315

    github.com/maxrave-dev/kotlin-footguns390 stars

    View details
  • gate-optional-effect-at-the-shared-primitiveSkillDev tools

    Put a user's on/off setting for an optional decorative surface treatment inside the one shared primitive that draws it — published from the theme as a CompositionLocal defaulting to on — instead of asking every call site to check the flag. Covers why the off path must keep the shape and the hit targ

    Ready to connect★ 315

    github.com/maxrave-dev/kotlin-footguns390 stars

    View details
  • generic-paged-db-accumulatorSkillDev tools

    One reusable helper that reads an entire table through a (limit, offset) data-access function in a bounded loop, stopping on the first short page — plus when reading everything is legitimate (export, backup, bulk mapping) and the smell that means you needed a real query instead. Use when several rep

    Ready to connect★ 315

    github.com/maxrave-dev/kotlin-footguns390 stars

    View details
  • github-actions-multiplatform-releaseSkillDev tools

    Structure a GitHub Actions release pipeline for a multiplatform desktop app so one Linux runner cross-builds every platform's artifacts and a second, tiny macOS job does only the one step that genuinely requires macOS — with artifact handoff between them and no compilation on the costly runner; reac

    Ready to connect★ 315

    github.com/maxrave-dev/kotlin-footguns390 stars

    View details
  • glance-layout-vocabularySkillDev tools

    The composable widget toolkit is not Compose with a different import — it has no aspect ratio, its weight is always 1 so an even split is the entire vocabulary, its corner radius only applies from API 31, and a widget always fills the launcher's cell so the spare height must be spent deliberately. C

    Ready to connect★ 315

    github.com/maxrave-dev/kotlin-footguns390 stars

    View details
  • glance-widget-over-existing-stateSkillDev tools

    Build a home-screen widget that renders the app's existing state holder rather than a parallel copy of it, by injecting the same shared state object and the same long-lived scope the app already uses and re-issuing the widget update whenever that state changes. Covers dispatching the app's own UI ev

    Ready to connect★ 315

    github.com/maxrave-dev/kotlin-footguns390 stars

    View details
  • hidden-setting-does-not-clear-the-stored-valueSkillDev tools

    A style or effect option is correctly hidden from a settings picker below some OS version or capability floor, yet the effect it names still shows up broken — flat, unblurred, or simply wrong — on a device that should never be able to select it, because the picker gates what a user can choose next,

    Ready to connect★ 315

    github.com/maxrave-dev/kotlin-footguns390 stars

    View details
  • identity-compare-immutable-settingSkillDev tools

    Bundle a multi-field setting into one immutable value and hand it to a hot consumer as a supplier, so the consumer asks "has this changed?" with a single reference comparison instead of diffing N numbers per buffer — and can never observe the fields half-updated. Use when a per-buffer or per-frame c

    Ready to connect★ 315

    github.com/maxrave-dev/kotlin-footguns390 stars

    View details
  • inclusive-period-boundaries-and-offset-resetSkillDev tools

    Pick one boundary convention for a stepping period navigator and hold it everywhere — a closed upper bound at 23:59:59 drops the last second's sub-second remainder, and half-open bounds handed to an inclusive BETWEEN double-count the shared instant — then reset the step offset whenever the granulari

    Ready to connect★ 315

    github.com/maxrave-dev/kotlin-footguns390 stars

    View details
  • intent-flag-not-observed-stateSkillDev tools

    A component that is committed to running but not yet running reports "not running", so anything that means intent must read the intent flag, not the observed one — and at a transition the intent flag must be waited for with a timeout rather than sampled inline. Use when one client's buffering hiccup

    Ready to connect★ 315

    github.com/maxrave-dev/kotlin-footguns390 stars

    View details
  • joiner-catches-up-by-askingSkillDev tools

    The state a relay pushes to a new member is the source's last command replayed, so its position is however old that command is — obeying it drops the joiner at the start of something everyone else is halfway through. Ask for the live position the moment you are in, and again whenever this client rej

    Ready to connect★ 315

    github.com/maxrave-dev/kotlin-footguns390 stars

    View details

What is a skill?

A skill is plain text, usually a SKILL.md file and the scripts it refers to, written for an AI rather than for a person. It carries the steps, the house rules and the examples a good answer needs, so you stop pasting the same briefing into every new chat.

53,462 of the 53,895 skills listed here can be served through ahel today, and they come from public repositories. Each one has its own page with the instructions themselves on it, so you can read what a skill will tell your AI to do before you install it.

Install one and every AI you use gets it

Installing a skill adds it to your gateway and turns it on in the same step. Claude Code surfaces it as a slash command; any client can read the full instructions with the skill_read tool.

Nothing is copied into a project folder. The instructions are served from your account, so the same skill is there in every AI you connect, and turning it off removes it from all of them at once.

See how to connect your AI