Agent skill

Extract Section To Drawer

by getlago in getlago/lago-front

Extract a Formik form section into a TanStack Form drawer with Zod validation, following the plan form migration pattern.

AGPL-3.0Auto-check: notesFrontend & Design

Install Extract Section To Drawer

skills CLI
$ npx skills add getlago/lago-front --skill extract-section-to-drawer -a claude-code

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

GitHub CLI
$ gh skill install getlago/lago-front extract-section-to-drawer --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/getlago/lago-front.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/extract-section-to-drawer .claude/skills/extract-section-to-drawer && 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
extract-section-to-drawer
GitHub stars
163
Token cost
~4k tokens
SKILL.md length
1,220 words
Files
1
Skills in repo
17
Repo updated
First seen
Licence
AGPL-3.0

At a glance

Extract a Formik form section into a TanStack Form drawer with Zod validation, following the plan form migration pattern.

  • Works in 8 steps: Analyze the Section → Define the Form Values Type → Create the Zod Schema → …
  • The user wants to extract a plan form section (or similar Formik section) into an independent TanStack Form drawer
  • SKILL.md covers Reference Files, Migration Steps, Verification Checklist and Common Pitfalls
  • Calls pnpm

What it does

Extract Section To Drawer is an agent skill from getlago/lago-front. Extract a Formik form section into a TanStack Form drawer with Zod validation, following the plan form migration pattern. Use this skill when the user wants to extract a plan form section (or similar Formik section) into an independent TanStack Form drawer.

Its SKILL.md is about 4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Frontend & Design, covering Forms and validation. It works with TanStack and Zod. The repository describes itself as: Open Source Metering and Usage Based Billing. The licence is AGPL-3.0.

When your agent uses it

  • The user wants to extract a plan form section (or similar Formik section) into an independent TanStack Form drawer
  • Tasks that involve Forms and validation

Example prompts

  • “/extract-section-to-drawer”

Requirements

  • Pre-approved tools (allowed-tools): Read, Glob, Grep, Edit, Write, Bash, AskUserQuestion

Workflow steps

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

  1. Analyze the Section
  2. Define the Form Values Type
  3. Create the Zod Schema
  4. Create the Drawer Component
  5. Integrate into the Section Component
  6. Wire Up the Parent Page
  7. Check for Missing TanStack Field Components
  8. Add Translation Keys

What it can do on your machine

Read from SKILL.md and the folder at commit 4e13a85. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Read
    • Glob
    • Grep
    • Edit
    • Write
    • Bash
    • AskUserQuestion

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • pnpm

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

  • Network

    No URLs in SKILL.md. Its commands use pnpm, which can reach the network depending on how they are called.

    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

Extract Section To Drawer loads about 4k tokens when it runs. Until then it costs about 71 tokens; SKILL.md has 1,220 words of instructions outside code blocks.

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

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: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NotePre-approves every shell command (allowed-tools: Bash)SKILL.md
    allowed-tools: Read, Glob, Grep, Edit, Write, Bash, AskUserQuestion

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 getlago/lago-front at commit 4e13a85, republished under its AGPL-3.0 licence (© getlago). 1,220 words, ~4,044 tokens.

Download SKILL.mdSave it as .claude/skills/extract-section-to-drawer/SKILL.md (or your agent's skills folder).
name
extract-section-to-drawer
description
Extract a Formik form section into a TanStack Form drawer with Zod validation, following the plan form migration pattern. Use this skill when the user wants to extract a plan form section (or similar Formik section) into an independent TanStack Form drawer.
allowed-tools
Read, Glob, Grep, Edit, Write, Bash, AskUserQuestion
user-invocable
true
argument-hint
<path-to-section-component>

Extract Formik Section to TanStack Drawer Skill

Target section to extract: $ARGUMENTS

Important: If no path was provided above (empty or missing), use the AskUserQuestion tool to ask the user for the path to the section component they want to extract into a drawer.

This skill extracts a Formik-based form section into an independent TanStack Form inside a ref-based Drawer, bridging data back to the parent Formik form via a callback. Both the existing Formik section and the new drawer coexist during migration.

Reference Files

Before starting, read these files to understand existing patterns:

TanStack Form Infrastructure
  1. useAppForm hook: src/hooks/forms/useAppForm.ts — registered field components
  2. Field context: src/hooks/forms/formContext.ts — useFieldContext for TanStack fields
  3. Zod validation example: src/pages/settings/teamAndSecurity/members/dialogs/CreateInviteDialog.tsx
Drawer Pattern
  1. Drawer component: src/components/designSystem/Drawer.tsx — ref-based DrawerRef with openDrawer/closeDrawer
Existing Implementation (reference)
  1. SubscriptionFeeDrawer: src/components/plans/drawers/SubscriptionFeeDrawer.tsx — first completed extraction
  2. SubscriptionFeeSection: src/components/plans/SubscriptionFeeSection.tsx — section that hosts its drawer internally
  3. PlanFormContext: src/contexts/PlanFormContext.tsx — shared read-only context for currency/interval
TanStack Field Components
  1. TextInputField: src/components/form/TextInput/TextInputFieldForTanstack.tsx
  2. AmountInputField: src/components/form/AmountInput/AmountInputFieldForTanstack.tsx
  3. SwitchField: src/components/form/Switch/SwitchFieldForTanstack.tsx
  4. RadioGroupField: src/components/form/Radio/RadioGroupFieldForTanstack.tsx

Migration Steps

Phase 1: Analyze the Section
  1. Read the target section component completely
  2. Identify:
    • All form fields and their Formik names/types
    • Which fields are editable vs read-only/disabled
    • Any shared context needed (currency, interval, etc.)
    • The parent component(s) that render this section
Phase 2: Define the Form Values Type

Create an interface for the drawer's form values. The field names must match the Formik field names exactly so the parent can spread them back with setValues:

ts
interface SectionNameFormValues {
  fieldA: string
  fieldB: boolean
  fieldC: number | null
}

Critical rule: The keys in this type must be a subset of the parent Formik form's type (PlanFormInput or equivalent). This enables the spread pattern:

ts
formikProps.setValues({ ...formikProps.values, ...drawerValues })
Phase 3: Create the Zod Schema

Define a Zod schema that validates exactly the form values shape:

ts
const sectionNameSchema = z.object({
  fieldA: z.string().min(1, 'text_translationKeyForError'),
  fieldB: z.boolean(),
  fieldC: z.number().positive().nullable(),
})

Important:

  • Use z.enum(MyEnum) for GraphQL/TS string enums. z.nativeEnum() is deprecated in Zod v4.
  • Pass translation keys (not translated strings) as Zod error messages. The TanStack field components translate them via useInternationalization.
Phase 4: Create the Drawer Component

Create the drawer file at src/components/plans/drawers/SectionNameDrawer.tsx following this structure:

tsx
import { revalidateLogic, useStore } from '@tanstack/react-form'
import { forwardRef, useImperativeHandle, useRef } from 'react'
import { z } from 'zod'

import { Button } from '~/components/designSystem/Button'
import { Drawer, DrawerRef } from '~/components/designSystem/Drawer'
// ... other imports

export interface SectionNameFormValues { /* ... */ }

const sectionNameSchema = z.object({ /* ... */ })

const DEFAULT_VALUES: SectionNameFormValues = { /* ... */ }

const SECTION_NAME_FORM_ID = 'section-name-drawer-form'

export interface SectionNameDrawerRef {
  openDrawer: (values: SectionNameFormValues) => void
  closeDrawer: () => void
}

interface SectionNameDrawerProps {
  onSave: (values: SectionNameFormValues) => void
}

export const SectionNameDrawer = forwardRef<SectionNameDrawerRef, SectionNameDrawerProps>(
  ({ onSave }, ref) => {
    const drawerRef = useRef<DrawerRef>(null)

    const form = useAppForm({
      defaultValues: DEFAULT_VALUES,
      validationLogic: revalidateLogic(),
      validators: { onDynamic: sectionNameSchema },
      onSubmit: async ({ value }) => {
        onSave(value)
        drawerRef.current?.closeDrawer()
      },
    })

    useImperativeHandle(ref, () => ({
      openDrawer: (values) => {
        // keepDefaultValues: true prevents the React adapter's formApi.update()
        // from overwriting values — it compares opts.defaultValues against
        // this.options.defaultValues, and since we keep DEFAULT_VALUES as both,
        // they match and no overwrite occurs. isDirty starts as false because
        // reset() clears all field meta.
        form.reset(values, { keepDefaultValues: true })
        drawerRef.current?.openDrawer()
      },
      closeDrawer: () => drawerRef.current?.closeDrawer(),
    }))

    // IMPORTANT: subscribe to isDirty via useStore — reading form.state.isDirty
    // directly is a passive read that does NOT trigger re-renders.
    const isDirty = useStore(form.store, (state) => state.isDirty)

    const handleFormSubmit = (event: React.FormEvent) => {
      event.preventDefault()
      form.handleSubmit()
    }

    return (
      <Drawer
        ref={drawerRef}
        title="..."
        showCloseWarningDialog={isDirty}
        onClose={() => form.reset()}
        stickyBottomBar={({ closeDrawer }) => (
          <div className="flex justify-end gap-3">
            <Button variant="quaternary" onClick={closeDrawer}>Cancel</Button>
            {/* form.SubmitButton uses type="submit" which requires being inside <form>.
                In drawers, stickyBottomBar is outside <form> in the DOM, so use
                form.Subscribe + programmatic form.handleSubmit() instead. */}
            <form.Subscribe selector={(state) => ({ canSubmit: state.canSubmit })}>
              {({ canSubmit }) => (
                <Button disabled={!canSubmit} onClick={() => form.handleSubmit()}>
                  Save
                </Button>
              )}
            </form.Subscribe>
          </div>
        )}
      >
        <form id={SECTION_NAME_FORM_ID} onSubmit={handleFormSubmit}>
          {/* Hidden submit button enables Enter-key submission.
              The visible SubmitButton is in stickyBottomBar, outside the <form> in the DOM. */}
          <button type="submit" hidden aria-hidden="true" />
          {/* form.AppField for each field */}
        </form>
      </Drawer>
    )
  },
)
Key patterns:
  • <form> wrapper: Always wrap drawer content in a <form> element with an id and onSubmit handler. Add a <button type="submit" hidden aria-hidden="true" /> inside the form — the visible SubmitButton is in stickyBottomBar (outside <form> in the DOM), so the hidden button is needed for Enter-key submission to work.
  • onSubmit on useAppForm: The save logic lives in the form's onSubmit config, not in a manual handler. This ensures Zod validation runs via form.handleSubmit() before saving.
  • Programmatic submit in drawers: form.SubmitButton uses type="submit" which only works inside a <form> element. In drawers, the stickyBottomBar is rendered outside the <form> in the DOM, so use form.Subscribe + form.handleSubmit() instead: <form.Subscribe selector={(state) => ({ canSubmit: state.canSubmit })}>{({ canSubmit }) => (<Button disabled={!canSubmit} onClick={() => form.handleSubmit()}>Save</Button>)}</form.Subscribe>. This gives you the same canSubmit gating as SubmitButton with programmatic submission.
  • reset(values, { keepDefaultValues: true }): On openDrawer, reset the form to the provided values while keeping DEFAULT_VALUES as the internal defaultValues. This prevents the React adapter's formApi.update() from overwriting values on re-render, without needing a useState workaround.
  • Enhanced ref: openDrawer(values) accepts initial values from Formik, not just openDrawer()
  • Dirty detection: Subscribe via useStore(form.store, (state) => state.isDirty) — reading form.state.isDirty directly is a passive read that does NOT trigger re-renders.
  • onSave callback: Does NOT write to Formik directly — the parent handles that via the callback
  • Form reset on close: onClose={() => form.reset()} cleans up when drawer closes
Phase 5: Integrate into the Section Component

The drawer lives inside the section component, not at the page level:

  1. Add a useRef<SectionNameDrawerRef> inside the section component
  2. Add an onDrawerSave prop (required, not optional) to the section's props interface
  3. Add a trigger element (e.g., Selector component) that calls drawerRef.current?.openDrawer(currentValues)
  4. Render <SectionNameDrawer ref={drawerRef} onSave={onDrawerSave} /> inside the section
tsx
interface SectionProps {
  formikProps: FormikProps<PlanFormInput>
  onDrawerSave: (values: SectionNameFormValues) => void
  // ... other existing props
}
Single Drawer Instance for List/Loop Sections

Critical rule for sections that render items in a loop (e.g., fixed charges, usage charges, where each charge is an accordion item):

The drawer must be rendered once at the section level, NOT inside each loop item. Only the drawerRef is passed down to each item as a prop. This prevents N drawer instances in the DOM (one per item).

tsx
// ✅ Correct: ONE drawer at the section level, ref passed to items
const ChargesSection = ({ formikProps, onDrawerSave }: ChargesSectionProps) => {
  const drawerRef = useRef<ChargeDrawerRef>(null)

  return (
    <>
      {formikProps.values.charges.map((charge, index) => (
        <ChargeAccordionItem
          key={charge.id}
          charge={charge}
          drawerRef={drawerRef}  // ← pass only the ref
        />
      ))}
      <ChargeDrawer ref={drawerRef} onSave={onDrawerSave} />
    </>
  )
}

// Each item calls drawerRef.current?.openDrawer(itsValues)
const ChargeAccordionItem = ({ charge, drawerRef }: ChargeAccordionItemProps) => {
  return (
    <Selector
      onClick={() => drawerRef.current?.openDrawer(charge)}
      // ...
    />
  )
}
tsx
// ❌ Wrong: drawer rendered inside each loop item = N drawers in DOM
{formikProps.values.charges.map((charge, index) => (
  <ChargeAccordionItem key={charge.id} charge={charge}>
    <ChargeDrawer onSave={onDrawerSave} />  {/* duplicated per item! */}
  </ChargeAccordionItem>
))}
Phase 6: Wire Up the Parent Page

In the parent page (e.g., CreatePlan.tsx, CreateSubscription.tsx):

  1. Pass onDrawerSave using the spread pattern:
tsx
<SectionComponent
  formikProps={formikProps}
  onDrawerSave={(values) => {
    formikProps.setValues({ ...formikProps.values, ...values })
  }}
/>
  1. Ensure PlanFormProvider wraps the section (provides currency/interval to the drawer):
tsx
<PlanFormProvider
  currency={formikProps.values.amountCurrency || CurrencyEnum.Usd}
  interval={formikProps.values.interval || PlanInterval.Monthly}
>
  {/* ... section components ... */}
</PlanFormProvider>
Show full SKILL.md (512 more words)Show less
Phase 7: Check for Missing TanStack Field Components

If the section uses a Formik field component that doesn't have a TanStack equivalent yet:

  1. Check src/hooks/forms/useAppForm.ts for the fieldComponents map
  2. If missing, create a *ForTanstack.tsx file following the pattern of existing ones (e.g., SwitchFieldForTanstack.tsx)
  3. Register it in useAppForm.ts

The TanStack field pattern:

tsx
const FieldName = (props: Omit<OriginalProps, 'name' | 'value' | 'onChange'>) => {
  const field = useFieldContext<FieldType>()
  return (
    <OriginalComponent
      {...props}
      name={field.name}
      value={field.state.value}
      onChange={(value) => field.handleChange(value)}
    />
  )
}
Phase 8: Add Translation Keys

Never manually create translation keys. Always use the script to generate properly formatted keys:

bash
pnpm translations:add <count>

This generates <count> keys with the format text_<timestamp><random> and appends them with empty values to translations/base.json. Then fill in the values for each generated key.

For example, if you need 2 new strings ("Pricing settings" and "Open drawer"):

  1. Run pnpm translations:add 2
  2. Find the new empty keys at the bottom of translations/base.json
  3. Fill in the values: "text_1771963033466...": "Pricing settings"
  4. Use the generated keys in code: translate('text_1771963033466...')

Verification Checklist

After completing the extraction:

  1. TypeScript: Run pnpm tsc --noEmit — zero errors
  2. Lint: Run pnpm eslint on changed files — zero new errors
  3. Existing section: The original Formik-based accordion/section still works unchanged
  4. Drawer trigger: Clicking the trigger opens the drawer with current Formik values pre-filled
  5. Field rendering: All TanStack fields render correctly with proper labels and validation
  6. Save flow: Saving copies values back to Formik (verify in the existing section's display)
  7. Dirty detection: Closing the drawer with unsaved changes shows a warning dialog
  8. All parent pages: Every page that renders the section passes onDrawerSave and is wrapped with PlanFormProvider

Common Pitfalls

  • Missing <form> wrapper: Always wrap drawer content in a <form> element. Without it, form.handleSubmit() won't trigger the validation → submit lifecycle, and Zod validation is never enforced.
  • Manual value reading instead of form.handleSubmit(): Never read form.state.values directly and pass to onSave. Always use form.handleSubmit() which runs validation first, then calls the onSubmit handler only if valid.
  • useState for defaultValues: Don't use useState to track defaultValues. Use form.reset(values, { keepDefaultValues: true }) instead — this prevents the React adapter's formApi.update() from overwriting values while keeping isDirty correct.
  • z.nativeEnum() usage: Deprecated in Zod v4. Use z.enum(MyEnum) for GraphQL/TS string enums.
  • Optional onDrawerSave: Keep it required. If a parent doesn't need the drawer, it still passes a handler. This avoids conditional rendering bugs.
  • Field name mismatch: The drawer's form values type keys MUST match Formik field names exactly for the spread pattern to work.
  • Missing PlanFormProvider: The drawer uses usePlanFormContext() for currency/interval. Every parent that renders the section must be wrapped.
  • Import path: useAppForm is imported from ~/hooks/forms/useAppform (lowercase 'f').
  • Revalidation logic: Always pass validationLogic: revalidateLogic() from @tanstack/react-form.
  • Drawer in a loop: When the section renders items in a loop (charges, thresholds, etc.), render the drawer once at the section level and pass the drawerRef to each item. Never render a drawer inside each loop iteration.
  • Manual translation keys: Never hand-craft translation keys. Always run pnpm translations:add <count> to generate them with the correct format.
  • TanStack field error handling: Ensure all TanStack field wrappers (*ForTanstack.tsx) wire up error state via useStore(field.store, (state) => state.meta.errors) and getErrorToDisplay(). If the underlying component accepts an error prop, it must be connected.

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

Files

Just SKILL.md in .agents/skills/extract-section-to-drawer of getlago/lago-front.

Open the folder on GitHubat commit 4e13a85

Compare with similar skills

Extract Section To Drawer 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.

Extract Section To Drawer compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Extract Section To Drawer this skillgetlago/lago-front163—~4kAutomated safety check: NotesAGPL-3.0
Buzzformbuildnbuzz/buzzform102—~1.5kAutomated safety check: PassMIT
Opik Frontend Patternscomet-ml/opik22k—~1.1kAutomated safety check: PassApache-2.0
Tanstack Formexceptionless/Exceptionless2.5k—~544Automated safety check: PassApache-2.0
Web Frontendlatitude-dev/latitude-llm4.7k—~5.2kAutomated safety check: PassMIT
React TypescriptMadAppGang/claude-code285—~4.1kAutomated safety check: PassMIT

Similar skills

  • Buzzform

    buildnbuzz/buzzform

    A skill your agent uses when working with BuzzForm schema-driven forms, @buildnbuzz/form-core, @buildnbuzz/form-react, or any related APIs like defineSchema, InferType, FormProvider, useDataField…

    102 GitHub stars~1.5k tokensUpdated 4 mo ago
    Frontend & DesignAuto-check passed
  • Sets the conventions for the Opik React frontend: TanStack Query for data, Zustand for shared state, one-way layer imports and a fix for Google Translate crashes.

    22k GitHub stars~1.1k tokensUpdated today
    Frontend & DesignAuto-check passed
  • Tanstack Form

    exceptionless/Exceptionless

    Build Svelte forms with TanStack Form, Zod validation, and API error mapping.

    2.5k GitHub stars~544 tokensUpdated yesterday
    Frontend & DesignAuto-check passed
  • Web Frontend

    latitude-dev/latitude-llm

    apps/web UI — routes, @repo/ui, TanStack Start server functions and collections, navigation (Link vs useNavigate), forms (useForm + createFormSubmitHandler + fieldErrorsAsStrings for Zod field…

    4.7k GitHub stars~5.2k tokensUpdated yesterday
    Frontend & DesignAuto-check passed
  • React Typescript

    MadAppGang/claude-code

    Modern React 19+ patterns with TypeScript including function components, hooks, state management, TanStack Query integration, form handling with Zod, error boundaries, and performance optimization.

    285 GitHub stars~4.1k tokensUpdated 6 mo ago
    Frontend & DesignAuto-check passed
  • Tanstack Router

    Mindrally/skills

    Type-safe, file-based routing for React with TanStack Router.

    269 GitHub stars~1.9k tokensUpdated yesterday
    DevelopmentAuto-check passed

More from getlago/lago-front

All 17 skills in this repo
  • Babysit

    getlago/lago-front

    A skill your agent uses when asked to babysit, monitor, shepherd, or keep working on a GitHub pull request until it is green, review-ready, approved, mergeable, or ready to merge.

    163 GitHub stars~5.2k tokensUpdated today
    Auto-check passed
  • Cve Doctor

    getlago/lago-front

    Triage a CVE / Dependabot alert in a JS/TS project and recommend the least-invasive fix.

    163 GitHub stars~2.9k tokensUpdated today
    Auto-check passed
  • Loop Build

    getlago/lago-front

    Phase 2 of the loop pipeline for lago-front. An agent skill from getlago/lago-front.

    163 GitHub stars~3.5k tokensUpdated today
    Auto-check: notes
  • Loop Clean

    getlago/lago-front

    Cleanup phase of the loop pipeline for lago-front, for the worktree layout only.

    163 GitHub stars~816 tokensUpdated today
    Auto-check passed
  • Docker Expert

    getlago/lago-front

    You are an advanced Docker containerization expert with comprehensive, practical knowledge of container optimization, security hardening, multi-stage builds, orchestration patterns, and production…

    163 GitHub starsUsed in 10 repos~3.6k tokens
    Auto-check passed
  • Loop Flywheel

    getlago/lago-front

    Harvest phase of the loop pipeline for lago-front. An agent skill from getlago/lago-front.

    163 GitHub stars~1.9k tokensUpdated today
    Auto-check passed

Works with

Questions about Extract Section To Drawer

What does Extract Section To Drawer do?

Extract a Formik form section into a TanStack Form drawer with Zod validation, following the plan form migration pattern. Extract Section To Drawer is an agent skill from getlago/lago-front. Extract a Formik form section into a TanStack Form drawer with Zod validation, following the plan form migration pattern.

When should I use Extract Section To Drawer?

Extract Section To Drawer fits situations like: the user wants to extract a plan form section (or similar Formik section) into an independent TanStack Form drawer; tasks that involve Forms and validation.

How do I install Extract Section To Drawer in Claude Code?

Run `npx skills add getlago/lago-front --skill extract-section-to-drawer -a claude-code`. Or copy the skill folder (.agents/skills/extract-section-to-drawer in getlago/lago-front) into .claude/skills/extract-section-to-drawer in your project. Claude Code loads it when a task matches its description.

How do I install Extract Section To Drawer in Codex?

Run `npx skills add getlago/lago-front --skill extract-section-to-drawer -a codex`. Or copy the skill folder (.agents/skills/extract-section-to-drawer in getlago/lago-front) into .agents/skills/extract-section-to-drawer in your project. Codex loads it when a task matches its description.

Can I use Extract Section To Drawer 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 getlago/lago-front --skill extract-section-to-drawer -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/extract-section-to-drawer, .gemini/skills/extract-section-to-drawer, .github/skills/extract-section-to-drawer and .opencode/skills/extract-section-to-drawer in your project.

What does Extract Section To Drawer need to run?

Going by SKILL.md and its folder, Extract Section To Drawer needs the command-line tools its instructions call (pnpm). Its frontmatter pre-approves these tools: Read, Glob, Grep, Edit, Write, Bash, AskUserQuestion.

Does Extract Section To Drawer 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 Extract Section To Drawer safe to install?

Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Extract Section To Drawer use?

Extract Section To Drawer is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Extract Section To Drawer use?

About 4k tokens (SKILL.md is roughly 16k 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 Extract Section To Drawer?

Skills that share tags, products or a category with Extract Section To Drawer: Buzzform (buildnbuzz/buzzform, 102 stars), Opik Frontend Patterns (comet-ml/opik, 22k stars), Tanstack Form (exceptionless/Exceptionless, 2.5k stars) and Web Frontend (latitude-dev/latitude-llm, 4.7k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Extract Section To Drawer?

getlago (a GitHub organization) maintains it in getlago/lago-front, which has 163 GitHub stars. The repository holds 17 skills in this directory. The repository was last updated on October 9, 2026.

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