agentleFS
factor241factor241/ketos-bot/.agents/skills/frontend-query-mutation/SKILL.md

frontend-query-mutation

Skill1 starsChanged 2 months agoMITView on GitHub

Guide for implementing Ketos frontend query and mutation patterns with Axios and TanStack React Query v5. Trigger when creating or updating API hooks in controllers/API/queries, consuming UseRequestProcessor in components, deciding whether to use useQuery or useMutation, handling conditional queries, cache invalidation, mutation error handling, or migrating legacy API calls to the query hook pattern.

2 other projects use a version of this, 2 of them edited.

Adopted by

Most recently taken up by

The file

Show its rules and text

We split this skill into the rules it gives an agent

14 rules. About 0 are common, 2 are distinctive, and 12 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈2

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 12

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Keep API hooks in controllers/API/queries/{domain}/ as the organized source of truth.

    line 11
  2. Very specific:

    Use UseRequestProcessor for consistent retry, invalidation, and error handling.

    line 12
  3. Very specific:

    Use Axios api instance for all HTTP calls (never raw fetch for REST).

    line 13
  4. Very specific:

    Use performStreamingRequest() for streaming operations (build, chat).

    line 14
  5. Very specific:

    Keep cache invalidation in mutation onSettled callbacks.

    line 15
  6. Very specific:

    Read references/query-patterns.md for hook structure, naming, URL patterns, and query/mutation call-site shape.

    line 44
  7. Very specific:

    Read references/runtime-rules.md for conditional queries, invalidation, error handling, and streaming.

    line 45
  8. Distinctive:

    Read both references when a task spans hook creation and runtime behavior.

    line 46
  9. Very specific:

    Use UseRequestProcessor for query() and mutate() wrappers.

    line 48
  10. Very specific:

    Use the api Axios instance for all HTTP calls.

    line 49
  11. Very specific:

    Use getURL() for constructing API paths.

    line 50
  12. Very specific:

    Use references/query-patterns.md for hook structure, naming conventions, directory layout, and anti-patterns.

    line 70
  13. Very specific:

    Use references/runtime-rules.md for conditional queries, invalidation, mutate versus mutateAsync, error handling, and streaming requests.

    line 71
  14. Distinctive:

    Treat this skill as the single query and mutation entry point for Ketos frontend work.

    line 73

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Frontend Query & Mutation

Intent

  • Keep API hooks in controllers/API/queries/{domain}/ as the organized source of truth.
  • Use UseRequestProcessor for consistent retry, invalidation, and error handling.
  • Use Axios api instance for all HTTP calls (never raw fetch for REST).
  • Use performStreamingRequest() for streaming operations (build, chat).
  • Keep cache invalidation in mutation onSettled callbacks.

Architecture Overview

Ketos uses Axios + TanStack React Query v5 for data fetching. There is no oRPC or contract layer. The architecture is:

Component
  -> API hook (controllers/API/queries/{domain}/use-{verb}-{resource}.ts)
    -> UseRequestProcessor (controllers/API/services/request-processor.ts)
      -> useQuery / useMutation (TanStack React Query)
        -> queryFn / mutationFn
          -> api.get/post/patch/delete (Axios instance from controllers/API/api.tsx)

Key Files

FilePurpose
controllers/API/api.tsxAxios instance, ApiInterceptor component, performStreamingRequest()
controllers/API/services/request-processor.tsUseRequestProcessor hook wrapping useQuery/useMutation with retry defaults
controllers/API/helpers/constants.tsURL constants (URLs) and getURL() helper
controllers/API/queries/{domain}/Domain-organized query and mutation hooks
types/api/index.tsuseQueryFunctionType, useMutationFunctionType type helpers
stores/Zustand stores for client-side state

Workflow

  1. Identify the change surface.
    • Read references/query-patterns.md for hook structure, naming, URL patterns, and query/mutation call-site shape.
    • Read references/runtime-rules.md for conditional queries, invalidation, error handling, and streaming.
    • Read both references when a task spans hook creation and runtime behavior.
  2. Implement the hook following existing patterns.
    • Use UseRequestProcessor for query() and mutate() wrappers.
    • Use the api Axios instance for all HTTP calls.
    • Use getURL() for constructing API paths.
    • Type the hook with useQueryFunctionType or useMutationFunctionType.
  3. Preserve Ketos conventions.
    • Query keys are arrays with the hook name: ["useGetFlows"].
    • Mutations invalidate related queries in onSettled.
    • Zustand store updates happen in the query/mutation function, not in components.
    • UseRequestProcessor provides default retry (5 for queries, 3 for mutations) with exponential backoff.

Files Commonly Touched

  • controllers/API/queries/{domain}/use-get-*.ts (query hooks)
  • controllers/API/queries/{domain}/use-post-*.ts (create mutations)
  • controllers/API/queries/{domain}/use-patch-*.ts (update mutations)
  • controllers/API/queries/{domain}/use-delete-*.ts (delete mutations)
  • controllers/API/helpers/constants.ts (URL constants)
  • types/api/index.ts (API type definitions)
  • stores/ (Zustand store updates triggered by queries)

References

  • Use references/query-patterns.md for hook structure, naming conventions, directory layout, and anti-patterns.
  • Use references/runtime-rules.md for conditional queries, invalidation, mutate versus mutateAsync, error handling, and streaming requests.

Treat this skill as the single query and mutation entry point for Ketos frontend work. Keep detailed rules in the reference files instead of duplicating them in project docs.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.