Agent skill

Gea Framework

by dashersw in dashersw/gea

A skill your agent uses when creating Gea applications, components, stores, routes, SSR entry points, JSX templates, or working with Gea reactivity and DOM patching.

MITAuto-check passedFrontend & Design

Install Gea Framework

skills CLI
$ npx skills add dashersw/gea --skill gea-framework -a claude-code

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

GitHub CLI
$ gh skill install dashersw/gea gea-framework --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/dashersw/gea.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.cursor/skills/gea-framework .claude/skills/gea-framework && 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
gea-framework
GitHub stars
1.3k
Token cost
~4.8k tokens
SKILL.md length
1,514 words
Files
2
Skills in repo
4
Repo updated
First seen
Licence
MIT

At a glance

A skill your agent uses when creating Gea applications, components, stores, routes, SSR entry points, JSX templates, or working with Gea reactivity and DOM patching.

  • Creating Gea applications
  • SKILL.md covers Core Concepts, Router, JSX Rules and Rendering, plus 6 more sections
  • Calls npm
  • SSR entry points

What it does

Gea Framework is an agent skill from dashersw/gea. Use when creating Gea applications, components, stores, routes, SSR entry points, JSX templates, or working with Gea reactivity and DOM patching.

Its SKILL.md is about 4.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file (for example `reference.md`).

It sits in Frontend & Design, covering React components. It works with JavaScript and Vite. The repository describes itself as: A batteries-included, reactive JavaScript UI framework. No virtual DOM. Compile-time JSX transforms. Proxy-based stores. Surgical DOM patching. The licence is MIT.

When your agent uses it

  • Creating Gea applications
  • SSR entry points
  • Working with Gea reactivity and DOM patching

Example prompts

  • “/gea-framework”

What it can do on your machine

Read from SKILL.md and the folder at commit 51da237. 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

    Shell commands in SKILL.md call:

    • npm

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • npmjs.com

    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

Gea Framework loads about 4.8k tokens when it runs. Until then it costs about 40 tokens; SKILL.md has 1,514 words of instructions outside code blocks.

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

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 dashersw/gea at commit 51da237, republished under its MIT licence (© dashersw). 1,514 words, ~4,835 tokens.

Download SKILL.mdSave it as .claude/skills/gea-framework/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
gea-framework
description
Use when creating Gea applications, components, stores, routes, SSR entry points, JSX templates, or working with Gea reactivity and DOM patching.

Gea Framework

Gea is a lightweight, reactive JavaScript UI framework built on the principle that JS code should be simple and understandable. It compiles JSX into efficient DOM operations at build time via a Vite plugin, uses proxy-based stores for state management, and employs event delegation for all user interactions. There is no virtual DOM — the Vite plugin analyzes your JSX templates and generates surgical DOM patches that update only the elements that depend on changed state.

Gea introduces no new programming concepts. There are no signals, no hooks, no dependency arrays, and no framework-specific primitives. Stores are classes with state and methods. Components are classes with a template() method or plain functions. Computed values are getters. The compile-time Vite plugin is the only "magic" — it analyzes ordinary JavaScript and wires up reactivity invisibly, so you write regular OOP/functional code that is fully reactive under the hood.

Read reference.md in this skill directory for the full API surface and detailed examples.

Core Concepts

Stores

A Store holds shared application state. Extend the Store class, declare reactive properties as class fields, and add methods that mutate them. The store instance is wrapped in a deep Proxy that tracks every property change and batches notifications via queueMicrotask.

ts
import { Store } from '@geajs/core'

class CounterStore extends Store {
  count = 0

  increment() {
    this.count++
  }
  decrement() {
    this.count--
  }
}

export default new CounterStore()

Key rules:

  • Always export a singleton instance (export default new MyStore()), not the class.
  • Mutate properties directly — this.count++ triggers reactivity automatically.
  • Use getters for derived/computed values — they re-evaluate on each access.
  • Array mutations (push, pop, splice, sort, reverse, shift, unshift) are intercepted and produce fine-grained change events.
  • Replacing an array with a superset (same prefix + new items) is detected as an efficient append operation.
Components

Gea has two component styles. Both compile to the same internal representation.

Class Components

Extend Component and implement a template(props) method that returns JSX. Class components can hold their own reactive properties — use them when you need local, transient UI state.

jsx
import { Component } from '@geajs/core'

export default class Counter extends Component {
  count = 0

  increment() { this.count++ }
  decrement() { this.count-- }

  template() {
    return (
      <div class="counter">
        <span>{this.count}</span>
        <button click={this.increment}>+</button>
        <button click={this.decrement}>-</button>
      </div>
    )
  }
}

Event handlers accept both method references (click={this.increment}) and arrow functions (click={() => this.increment()}). Use method references for simple forwarding; use arrow functions when passing arguments or composing logic.

Use class components when you need local component state or lifecycle hooks.

Function Components

Export a default function that receives props and returns JSX. The Vite plugin converts it to a class component internally.

jsx
export default function Greeting({ name }) {
  return <h1>Hello, {name}!</h1>
}

Use function components for stateless, presentational UI.

Props and Data Flow

Props follow JavaScript's native value semantics:

  • Objects and arrays passed as props are the parent's reactive proxy. The child can mutate them directly, and both parent and child DOM update — two-way binding with zero ceremony.
  • Primitives are copies. Reassigning a primitive prop in the child updates only the child's DOM — the parent is unaffected.

No emit, no v-model, no callback props needed for object/array mutations. Deep nesting works the same way — as long as the same reference is passed down, reactivity propagates across the entire tree.

Component State vs. Stores
ConcernWhere it livesWhen to use
Shared app data (todos, user, cart)StoreData accessed by multiple components or persisted across navigation
Derived / computed valuesStore gettersValues calculated from store state
Local, transient UI state (editing mode, hover)Component propertiesEphemeral state that no other component needs

A class component can have both local state and read from external stores:

jsx
export default class TodoItem extends Component {
  editing = false
  editText = ''

  template({ todo, onToggle, onRemove }) {
    const { editing, editText } = this
    return (
      <li class={`todo-item ${editing ? 'editing' : ''}`}>
        <span dblclick={this.startEditing}>{todo.text}</span>
        {/* ... */}
      </li>
    )
  }
}
Multiple Stores

Split state into domain-specific stores. Each store is an independent singleton.

flight-store.ts    → step, boardingPass
options-store.ts   → luggage, seat, meal
payment-store.ts   → passengerName, cardNumber, paymentComplete

Stores can import and call each other:

ts
class FlightStore extends Store {
  startOver(): void {
    this.step = 1
    optionsStore.reset()
    paymentStore.reset()
  }
}

A root component reads from all relevant stores and passes data down as props:

jsx
export default class App extends Component {
  template() {
    const { step } = flightStore
    const { luggage } = optionsStore
    return <div>{step === 1 && <OptionStep selectedId={luggage} onSelect={id => optionsStore.setLuggage(id)} />}</div>
  }
}

Router

Gea includes a built-in client-side router. The router is a Store that reactively tracks path, params, query, and hash. Define routes with setRoutes or createRouter.

Setup

Create a bare Router in router.ts. Keep this file free of view imports to avoid circular dependencies (views import router, so router.ts must not import views).

ts
// src/router.ts
import { Router } from '@geajs/core'
export const router = new Router()

Set routes in App.tsx where both the router and view components are available:

tsx
// src/App.tsx
import { Component, Outlet } from '@geajs/core'
import { router } from './router'
import AppShell from './views/AppShell'
import Home from './views/Home'
import About from './views/About'
import UserProfile from './views/UserProfile'
import NotFound from './views/NotFound'

router.setRoutes({
  '/': {
    layout: AppShell,
    children: {
      '/': Home,
      '/about': About,
      '/users/:id': UserProfile,
    },
  },
  '*': NotFound,
})

export default class App extends Component {
  template() {
    return <Outlet />
  }
}

Layouts receive the resolved child as a page prop:

tsx
export default class AppShell extends Component {
  template({ page }: any) {
    return (
      <div class="app">
        <nav>
          <Link to="/" label="Home" />
          <Link to="/about" label="About" />
        </nav>
        <main>{page}</main>
      </div>
    )
  }
}

For simple apps without layouts/guards (no circular dependency risk), you can use createRouter directly in router.ts and render with <RouterView router={router} />:

ts
import { createRouter } from '@geajs/core'
import Home from './views/Home'
import About from './views/About'

export const router = createRouter({
  '/': Home,
  '/about': About,
} as const)
tsx
import { Component, RouterView } from '@geajs/core'
import { router } from './router'

export default class App extends Component {
  template() {
    return <RouterView router={router} />
  }
}
Guards

Guards are synchronous functions on route groups that control access. A guard returns:

  • true — proceed to the route
  • string — redirect to that path
  • Component — render it instead of the route
ts
import authStore from './stores/auth-store'

const AuthGuard = () => {
  if (authStore.isAuthenticated) return true
  return '/login'
}

router.setRoutes({
  '/login': Login,
  '/': {
    layout: AppShell,
    guard: AuthGuard,
    children: {
      '/dashboard': Dashboard,
      '/settings': Settings,
    },
  },
})

Guards on nested groups stack parent → child. Guards are intentionally synchronous — they check store state, not async APIs. For async checks, use created() in the component.

Route Patterns
  • Static: /about
  • Named params: /users/:id — extracted as { id: '42' }
  • Wildcard: * — matches any unmatched path
  • Redirects: '/old': '/new' — string values trigger a redirect
  • Lazy routes: '/admin': () => import('./views/Admin') — code-split route components

Renders an <a> tag that navigates with history.pushState. Modifier keys (Cmd/Ctrl+click) open in a new tab. Active links receive data-active and an active class; pass exact to require an exact path match.

jsx
<Link to="/about" label="About" class="nav-link" />
Programmatic Navigation
ts
import { router } from './router'

router.push('/about')         // pushState
router.navigate('/about')     // alias for push
router.replace('/login')      // replaceState
router.back()
router.forward()
router.go(-2)
Route Parameters

Function components receive matched params as props:

jsx
export default function UserProfile({ id }) {
  return <h1>User {id}</h1>
}

Class components receive them via created(props) and template(props). Route params are also available on router.params.

Active State
ts
router.isActive('/dashboard')  // true if path starts with /dashboard
router.isExact('/dashboard')   // true only for exact match
matchRoute Utility

Use matchRoute for manual route matching:

ts
import { matchRoute } from '@geajs/core'

const result = matchRoute('/users/:id', '/users/42')
// { path: '/users/42', pattern: '/users/:id', params: { id: '42' } }
RouterView

RouterView renders the current route. Use it with a router prop for createRouter setups, or with an inline routes array for quick prototypes:

jsx
// With createRouter (recommended)
<RouterView router={router} />

// With inline routes (uses the singleton router)
<RouterView routes={[
  { path: '/', component: Home },
  { path: '/about', component: About },
  { path: '/users/:id', component: UserProfile },
]} />

JSX Rules

Gea JSX differs from React JSX in several ways:

FeatureGeaReact
CSS classesclass="foo"className="foo"
Event handlersclick={fn} or onClick={fn}onClick={fn}, onInput={fn}, onChange={fn}
Checked inputschecked={bool} + change={fn}checked={bool} + onChange={fn}
Conditional render{cond && <Child />}Same
Lists with keys{arr.map(item => <Item key={item.id} />)}Same
Dynamic classesclass={`btn ${active ? 'on' : ''}`}Same (with className)

Both native-style (click, change) and React-style (onClick, onChange) event attribute names are supported. Native-style is preferred by convention.

Supported event attributes include mouse, keyboard, form, drag, touch, pointer, wheel, scroll, animation, and transition events: click, dblclick, input, change, submit, keydown, keyup, blur, focus, pointerdown, pointerup, pointermove, touchstart, touchmove, touchend, wheel, scroll, dragstart, dragend, dragover, dragleave, drop, animationstart, animationend, transitionstart, transitionend, and related variants.

With @geajs/mobile: tap, longTap, swipeRight, swipeUp, swipeLeft, swipeDown.

Show full SKILL.md (545 more words)Show less
Style Objects

Gea supports React-style inline style objects. The compiler converts static style objects to CSS strings at build time and generates runtime conversion for dynamic values:

jsx
// Static — compiled to a CSS string at build time (zero runtime cost)
<div style={{ backgroundColor: 'red', fontSize: '14px', fontWeight: 'bold' }}>
  Styled content
</div>

// Dynamic — converted to cssText at runtime
<div style={{ color: this.textColor, opacity: this.isVisible ? 1 : 0 }}>
  Dynamic styling
</div>

// String styles still work (passed through as-is)
<div style={`width:${this.width}px`}>Sized content</div>

CSS property names use camelCase (like React). The compiler converts them to kebab-case: backgroundColor → background-color, fontSize → font-size.

ref Attribute

Use ref to get a direct reference to a DOM element after render:

jsx
export default class Canvas extends Component {
  canvasEl = null

  template() {
    return (
      <div class="canvas-wrapper">
        <canvas ref={this.canvasEl} width="800" height="600"></canvas>
      </div>
    )
  }

  onAfterRender() {
    const ctx = this.canvasEl.getContext('2d')
    ctx.fillRect(0, 0, 100, 100)
  }
}

The compiler emits a direct assignment that sets the component property to the DOM element after the template is cloned. Multiple refs on different elements are supported.

Compiler Errors (Unsupported Patterns)

The Gea compiler throws clear errors for JSX patterns it cannot compile. These are caught at build time, not at runtime:

PatternErrorFix
<{DynamicTag} />Dynamic component tags not supportedUse conditional rendering ({isA ? <A /> : <B />})
{() => <div />}Function-as-child not supportedUse render props with named attributes instead
export function Foo() { return <div /> }Named JSX component exports not supportedUse export default function
<>{items.map(...)}</>Fragments as .map() item roots not supportedWrap each item in a single root element

Spreading onto a component tag (<Comp {...props} />) is not supported yet, and it raises no error: the compiler drops the spread, so the component receives none of those props (#198). Pass the props individually.

Rendering

js
import MyApp from './my-app.jsx'

const app = new MyApp()
app.render(document.getElementById('app'))

Components are instantiated with new, then .render(parentEl) inserts them into the DOM.

Gea Mobile

The @geajs/mobile package extends Gea with mobile-oriented UI primitives:

  • View — a full-screen Component that renders to document.body by default.
  • ViewManager — manages a navigation stack with iOS-style transitions, back gestures, and sidebar support.
  • Sidebar, TabView, NavBar — pre-built layout components.
  • PullToRefresh, InfiniteScroll — scroll-driven UI patterns.
  • GestureHandler — registers tap, longTap, swipeRight, swipeLeft, swipeUp, swipeDown events.
js
import { View, ViewManager } from '@geajs/mobile'

class HomeView extends View {
  template() {
    return (
      <view>
        <h1>Home</h1>
      </view>
    )
  }
  onActivation() {
    /* called when view enters viewport */
  }
}

const vm = new ViewManager()
const home = new HomeView()
vm.setCurrentView(home)

Project Setup

Scaffolding a New Project
bash
npm create gea@latest my-app
cd my-app
npm install
npm run dev

The create-gea package scaffolds a Vite project with TypeScript, a sample store, class and function components, and the Vite plugin pre-configured.

Manual Setup
js
// vite.config.js
import { defineConfig } from 'vite'
import { geaPlugin } from '@geajs/vite-plugin'

export default defineConfig({
  plugins: [geaPlugin()]
})

The @geajs/vite-plugin Vite plugin handles JSX transformation, reactivity wiring, event delegation generation, and HMR.

SSR

@geajs/ssr provides server rendering and hydration for Gea apps. Use handleRequest(App, options) for Fetch-style request handlers, hydrate(App, element, { storeRegistry }) on the client, and geaSSR() in Vite for development middleware. SSR can serialize registered stores, resolve route configs on the server, stream HTML, and inject head tags.

ts
// server.ts
import { handleRequest } from '@geajs/ssr'
import App from './src/App'
import store from './src/store'

export default handleRequest(App, {
  storeRegistry: { AppStore: store },
})
ts
// src/main.ts
import { hydrate } from '@geajs/ssr/client'
import App from './App'
import store from './store'

hydrate(App, document.getElementById('app'), {
  storeRegistry: { AppStore: store },
})

@geajs/ui Component Library

@geajs/ui is a Tailwind-styled, Zag.js-powered component library for Gea. It provides ~35 ready-to-use components: simple styled primitives (Button, Card, Input) and behavior-rich interactive widgets (Select, Dialog, Tabs, Toast). For full usage instructions, component API, and examples, see the gea-ui-components skill in skills/gea-ui-components/.

npm Packages

PackagenpmDescription
@geajs/corenpmCore framework — stores, components, reactivity, DOM patching
@geajs/uinpmTailwind + Zag.js component library — Button, Select, Dialog, Tabs, Toast, etc.
@geajs/mobilenpmMobile UI primitives — views, navigation, gestures, layout
@geajs/vite-pluginnpmVite plugin — JSX transform, reactivity wiring, HMR
@geajs/ssrnpmServer-side rendering, hydration, streaming, store serialization, Vite SSR middleware
create-geanpmProject scaffolder (npm create gea@latest)
gea-tools—VS Code / Cursor extension for Gea JSX code intelligence

VS Code / Cursor Extension

The gea-tools extension (in packages/gea-tools) provides:

  • Component completion inside JSX tags
  • Prop completion based on component signatures
  • Event attribute completion (click, input, change, etc.)
  • Hover details for components and props
  • Unknown component warnings

Documentation

Full documentation is in the docs/ directory of the repository, structured for GitBook:

  • Getting started, core concepts, Gea Mobile, tooling, and API reference
  • Comparison pages: React vs Gea, Vue vs Gea

© dashersw, MIT. 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 1 other file in .cursor/skills/gea-framework of dashersw/gea.

  • SKILL.md
  • reference.md

Open the folder on GitHubat commit 51da237

Compare with similar skills

Gea Framework 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.

Gea Framework compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Gea Framework this skilldashersw/gea1.3k—~4.8kAutomated safety check: PassMIT
Vite Proxy Folder Name Conflictdivinevideo/divine-mobile265—~1.3kAutomated safety check: PassMPL-2.0
Web Artifacts Builderanthropics/skills180k40 repos~769Automated safety check: PassApache-2.0
Tailwindcss Developmentanonaddy/anonaddy4.9k10 repos~865Automated safety check: PassMIT
React Router Developmentremix-run/react-router57k1 repos~1.5kAutomated safety check: PassMIT
Chakra UI v3 Builderchakra-ui/chakra-ui41k—~3.1kAutomated safety check: PassMIT

Similar skills

  • Vite Proxy Folder Name Conflict

    divinevideo/divine-mobile

    Fix 404 errors for frontend JS files when using Vite proxy. An agent skill from divinevideo/divine-mobile.

    265 GitHub stars~1.3k tokensUpdated today
    Frontend & DesignAuto-check passed
  • Web Artifacts Builder

    anthropics/skills

    Official

    Builds multi-component claude.ai HTML artifacts as a small React, TypeScript and Tailwind project, then bundles it into one shareable HTML file.

    180k GitHub starsUsed in 40 repos~769 tokens
    Frontend & DesignAuto-check passed
  • Tailwindcss Development

    anonaddy/anonaddy

    Always invoke when the user's message includes 'tailwind' in any form.

    4.9k GitHub starsUsed in 10 repos~865 tokens
    Frontend & DesignAuto-check passed
  • React Router Development

    remix-run/react-router

    Guides work on React Router apps by first identifying whether the app uses Framework, Data or Declarative mode, then loading the matching reference and the installed package docs.

    57k GitHub starsUsed in 1 repo~1.5k tokens
    Frontend & DesignAuto-check passed
  • Chakra UI v3 Builder

    chakra-ui/chakra-ui

    Builds responsive, accessible Chakra UI v3 components and layouts, sets up Chakra in new or existing projects, and designs themes with tokens, semantic tokens and recipes.

    41k GitHub stars~3.1k tokensUpdated today
    Frontend & DesignAuto-check passed
  • Creative Tim UI Blocks

    creativetimofficial/ui

    Helps install, generate and review Creative Tim UI blocks: shadcn/ui-based React and Tailwind sections that follow a restrained, production-minded design philosophy.

    12k GitHub stars~2.1k tokensUpdated 6 mo ago
    Frontend & DesignAuto-check: notes

More from dashersw/gea

  • Gea UI Components

    dashersw/gea

    Guide for using @geajs/ui — a Tailwind-styled, Zag.js-powered component library for the Gea framework.

    1.3k GitHub stars~2k tokensUpdated 7 days ago
    Auto-check passed
  • Rebuild the website playground browser bundles after changing @geajs/core or @geajs/vite-plugin source.

    1.3k GitHub stars~350 tokensUpdated 7 days ago
    Auto-check passed
  • Step-by-step guide for migrating React applications to Gea — covering project setup, component conversion, state management, routing, styling, and known pitfalls.

    1.3k GitHub stars~8.1k tokensUpdated 7 days ago
    Auto-check passed

Works with

Questions about Gea Framework

What does Gea Framework do?

A skill your agent uses when creating Gea applications, components, stores, routes, SSR entry points, JSX templates, or working with Gea reactivity and DOM patching. Gea Framework is an agent skill from dashersw/gea. Use when creating Gea applications, components, stores, routes, SSR entry points, JSX templates, or working with Gea reactivity and DOM patching.

When should I use Gea Framework?

Gea Framework fits situations like: creating Gea applications; SSR entry points; working with Gea reactivity and DOM patching.

How do I install Gea Framework in Claude Code?

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

How do I install Gea Framework in Codex?

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

Can I use Gea Framework 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 dashersw/gea --skill gea-framework -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/gea-framework, .gemini/skills/gea-framework, .github/skills/gea-framework and .opencode/skills/gea-framework in your project.

What does Gea Framework need to run?

Going by SKILL.md and its folder, Gea Framework needs the command-line tools its instructions call (npm).

Does Gea Framework access the network?

SKILL.md names 1 domain. As links in the text: npmjs.com. This is read from the text; nothing was executed.

Is Gea Framework 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 Gea Framework use?

Gea Framework is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Gea Framework use?

About 4.8k tokens (SKILL.md is roughly 19k 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 Gea Framework?

Skills that share tags, products or a category with Gea Framework: Vite Proxy Folder Name Conflict (divinevideo/divine-mobile, 265 stars), Web Artifacts Builder (anthropics/skills, 180k stars), Tailwindcss Development (anonaddy/anonaddy, 4.9k stars) and React Router Development (remix-run/react-router, 57k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Gea Framework?

dashersw (a GitHub user) maintains it in dashersw/gea, which has 1,257 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on September 30, 2026.

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