flutter-go-router-engineering
Skill8 starsChanged 48 days agoMITView on GitHub
Design, implement, review, debug, secure, test, migrate, and optimize Flutter navigation with go_router. Use whenever a Flutter task involves route trees, URLs, deep links, browser history, GoRoute, ShellRoute, StatefulShellRoute, bottom navigation with independent stacks, path/query parameters, extra, go vs push semantics, redirects, onEnter guards, authentication routing, nested Navigators, parentNavigatorKey, transitions, PopScope/onExit, error routes, restoration, typed routes with go_router_builder, notification routes, route analytics, or migration from Navigator/older go_router APIs—even when framed as auth flow, tabs, back-button bugs, web routing, or deep-link problems.
In this repository70 other files it gives its agents.
- camerawesome-flutterSkill
- dart-args-production-cliSkill
- dart-flutter-equatable-engineeringSkill
- dart-flutter-ffi-systems-engineeringSkill
- dart-metaSkill
- document-camera-frameSkill
- document-scan-flutterSkill
- figma-to-flutter-expertSkill
- flutter-animations-production-engineeringSkill
- flutter-app-hardening-reverse-engineeringSkill
- flutter-app-icon-engineeringSkill
- flutter-application-security-engineeringSkill
- flutter-app-links-deep-link-engineeringSkill
- flutter-cachingSkill
- flutter-concurrency-memory-performanceSkill
- flutter-confetti-engineeringSkill
- flutter-dart-package-engineeringSkill
- flutter-design-system-from-design-mdSkill
- flutter-dio-cache-interceptor-engineeringSkill
- flutter-dio-engineeringSkill
- flutter-doc-scannerSkill
- flutter-drift-persistence-engineeringSkill
- flutter-expert-tipsSkill
- flutter-firebase-analyticsSkill
- flutter-firebase-core-engineeringSkill
- flutter-firebase-messagingSkill
- flutter-get-it-injectable-dependency-injectionSkill
- flutter-hive-persistence-engineeringSkill
- flutter-image-performanceSkill
- flutter-image-picker-production-engineeringSkill
- flutter-lints-static-analysis-engineeringSkill
- flutter-local-notifications-production-engineeringSkill
- flutter-memory-leak-engineeringSkill
- flutter-mobile-developmentSkill
- flutter-motion-engineeringSkill
- flutter-multi-environmentSkill
- flutter-native-splash-engineeringSkill
- flutter-package-plugin-selectionSkill
- flutter-path-provider-production-storageSkill
- flutter-performance-jank-optimizationSkill
- flutter-permission-handler-engineeringSkill
- flutter-pinputSkill
- flutter-production-build-releaseSkill
- flutter-production-engineeringSkill
- flutter-production-loggingSkill
- flutter-pro-image-editor-engineeringSkill
- flutter-secure-storage-security-engineeringSkill
- flutter-sentry-engineeringSkill
- flutter-share-plus-engineeringSkill
- flutter-skeletonizer-engineeringSkill
- flutter-squadron-concurrency-engineeringSkill
- flutter-supabase-engineeringSkill
- flutter-svg-engineeringSkill
- flutter-ui-performance-engineeringSkill
- flutter-url-launcher-engineeringSkill
- flutter-video-player-production-engineeringSkill
- flutter-webview-production-engineeringSkill
- freezed-production-engineeringSkill
- html-to-flutterSkill
- hydrated-blocSkill
- The first 60 shown.
The file
Show its rules and text
We split this skill into the rules it gives an agent
81 rules. About 0 are common, 46 are distinctive, and 35 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈46
Distinctive · estimate
This author's own choices. Worth a look.
35
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- could be automatic: a setting could enforce it
- Very specific: line 8
Use go_router as a URL-aware navigation architecture, not as a mechanical replacement for every Navigator call.
- Distinctive: line 11
Treat externally visible URLs as compatibility contracts.
- Very specific: line 12
Keep one stable GoRouter instance and stable navigator keys.
- Distinctive: line 13
Keep route builders synchronous, predictable, and cheap.
- Very specific: line 14
Put route-critical identity in path/query data, not only in extra.
- Distinctive: line 16
Keep secrets out of ordinary URLs and route telemetry.
- Very specific: line 17
Use go for canonical location changes.
- Very specific: line 18
Use ShellRoute for one nested stack under persistent chrome.
- Very specific: line 19
Use StatefulShellRoute only for genuinely independent branch stacks.
- Very specific: line 20
Use parentNavigatorKey only to express intentional Navigator ownership.
- Distinctive: line 23
Keep redirects deterministic and based on already-available state.
- Distinctive: line 24
Do not perform network/database work in redirect callbacks or route builders.
- Very specific: line 25
Keep Bloc/Cubit/domain code independent of BuildContext and GoRouter where practical.
- Distinctive: line 29
Test browser history separately on Flutter Web.
- Very specific: line 30
Use current PopScope, not deprecated WillPopScope, for page-level back interception.
- Distinctive: line 31
Do not confuse branch persistence with process state restoration.
- Distinctive: line 32
Use typed routes only when generated type safety offsets build-system complexity.
- Very specific: line 33
Read migration notes before major go_router upgrades.
- Distinctive: line 34
Test URLs and navigation state, not only button taps.
- Distinctive: line 42
If repository behavior conflicts with the research baseline, verify the installed package and preserve working current semantics unless …
- Distinctive: line 80
Use a route when the destination benefits from URL identity, deep linking, browser history, notification entry, restoration, or canonical …
- Distinctive: line 81
Keep temporary non-addressable UI such as ordinary confirmations as dialogs/bottom sheets when route semantics add no value.
- Very specific: line 90
Avoid implementation names such as /productBlocScreen2.
- Distinctive: line 92
Use one casing convention.
- Very specific: line 94
Use path parameters for required resource identity.
- Very specific: line 95
Use query parameters for optional state that should survive refresh, sharing, bookmarking, and browser history.
- Very specific: line 96
Use extra only for secondary/transient information.
- Very specific: line 115
Treat route guards as UX/navigation policy, not backend authorization.
- Very specific: line 118
Use nested GoRoute when parent and child belong to one logical stack.
- Very specific: line 119
Use ShellRoute for persistent chrome plus one nested Navigator.
- Very specific: line 120
Use StatefulShellRoute when branches need independent stacks, e.g.:
- Very specific: line 127
Use a root parentNavigatorKey only when a child intentionally needs to appear above the shell.
- Very specific: line 128
Never create Navigator keys in build().
- Distinctive: line 171
Use top-level redirect for app-wide auth policy.
- Distinctive: line 173
Use route-level redirect for route/subtree rewrites.
- Very specific: line 175
Use onEnter when the requirement is to block an attempt rather than map A → B.
- Distinctive: line 179
Do not call auth/network APIs from every redirect evaluation.
- Very specific: line 183
Use the installed version's supported mechanisms such as refreshListenable, inherited dependencies, or explicit router.refresh() where …
- Very specific: line 185
If state is exposed as a Stream, adapt it to a long-lived Listenable with deterministic disposal.
- Very specific: line 187
Do not reintroduce removed GoRouterRefreshStream patterns from old tutorials.
- Very specific: line 213
Avoid injecting BuildContext or GoRouter into ordinary repositories/use cases/Blocs.
- Very specific: line 221
use initialLocation: true only when reset-to-root UX is intentional.
- Distinctive: line 224
test root and branch observers for duplicate analytics.
- Distinctive: line 226
Do not emulate branch switching by manually composing multiple unrelated Navigator systems when the stateful shell already fits the …
- Very specific: line 230
Use builder by default.
- Very specific: line 232
Use pageBuilder only for Page-level behavior such as:
- Distinctive: line 243
Prefer default platform transitions unless product UX requires custom motion.
- Very specific: line 245
Keep ordinary temporary dialogs pageless unless they need URL/history/restoration semantics.
- Distinctive: line 249
Use normal router/Navigator back behavior for ordinary routes.
- Very specific: line 251
Use PopScope for page-level interception such as dirty forms and predictive-back-compatible behavior.
- Very specific: line 253
Use GoRoute.onExit for route-level removal policy when appropriate.
- Distinctive: line 255
Do not independently wire both to show duplicate confirmations.
- Distinctive: line 257
Test system back, app-bar back, branch back, shell exit, and browser Back/Forward.
- Very specific: line 268
Do not route every failure to /404.
- Distinctive: line 270
Do not expose raw routing exception strings to production users.
- Distinctive: line 282
If prior navigation is required, the deep-link architecture is incomplete.
- Distinctive: line 298
Test direct URL, reload, Back, Forward, query changes, and branch URLs in production-like hosting.
- Distinctive: line 304
Do not confuse keeping branch Navigators alive with restoration after process death.
- Distinctive: line 306
When restoration is required, configure the router, shell, branch, and custom Page restoration IDs required by the installed APIs and test …
- Very specific: line 310
Consider go_router_builder for large/shared route surfaces with many typed path/query parameters.
- Very specific: line 312
Keep route-critical identity out of typed $extra for the same reason as untyped extra.
- Distinctive: line 314
Never edit generated routing code manually.
- Distinctive: line 316
After typed-route source changes, run the repository's generation workflow, commonly:
- Distinctive: line 324
Prefer stable names/templates:
- Distinctive: line 332
Do not send raw URLs containing user IDs, search terms, email addresses, reset tokens, or sensitive filters unless an explicit …
- Distinctive: line 348
Do not micro-optimize path matching without measured navigation latency.
- Distinctive: line 384
verify active-tab reset behavior if implemented.
- Distinctive: line 386
verify active branch and back behavior.
- Distinctive: line 390
Use browser/integration coverage for history-sensitive behavior.
- Distinctive: line 394
Test process restoration separately when required.
- Distinctive: line 401
Read every intervening changelog/migration guide.
- Distinctive: line 403
Update APIs without simultaneously redesigning routes unless necessary.
- Distinctive: line 406
Test old external URLs and compatibility redirects.
- Distinctive: line 407
Test browser history separately.
- Distinctive: line 408
Remove obsolete APIs rather than wrapping them indefinitely.
- Distinctive: line 410
Treat these patterns as version-warning signs:
- Distinctive: line 420
Verify the installed-version replacement before editing.
- Distinctive: line 437
Every dialog turned into a route.
- Very specific: line 442
Read references/05-antipatterns-workflows-checklists.md for all supplied anti-patterns and detailed review checklists.
- Distinctive: line 468
Before accepting a routing change, answer:
- Distinctive: line 485
If those answers are unclear, the routing design is not finished.
≈ “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.
Files
Flutter go_router Engineering
Use go_router as a URL-aware navigation architecture, not as a mechanical replacement for every Navigator call.
Non-negotiable rules
- Inspect the current router, package versions, route tree, keys, redirects, shells, deep-link setup, web strategy, and tests before editing.
- Treat externally visible URLs as compatibility contracts.
- Keep one stable
GoRouterinstance and stable navigator keys. - Keep route builders synchronous, predictable, and cheap.
- Put route-critical identity in path/query data, not only in
extra. - Validate path/query values as external input.
- Keep secrets out of ordinary URLs and route telemetry.
- Use
gofor canonical location changes; usepushonly for intentional stack history. - Use
ShellRoutefor one nested stack under persistent chrome. - Use
StatefulShellRouteonly for genuinely independent branch stacks. - Use
parentNavigatorKeyonly to express intentional Navigator ownership. - Centralize global authentication routing.
- Model auth loading separately from signed-out state.
- Keep redirects deterministic and based on already-available state.
- Do not perform network/database work in redirect callbacks or route builders.
- Keep Bloc/Cubit/domain code independent of
BuildContextandGoRouterwhere practical. - Trigger navigation effects outside
build(). - Make important destinations work by direct cold entry.
- Distinguish routing errors from resource/network/authorization failures.
- Test browser history separately on Flutter Web.
- Use current
PopScope, not deprecatedWillPopScope, for page-level back interception. - Do not confuse branch persistence with process state restoration.
- Use typed routes only when generated type safety offsets build-system complexity.
- Read migration notes before major
go_routerupgrades. - Test URLs and navigation state, not only button taps.
Reference routing
The complete supplied guide is preserved in references/. Read only the relevant file:
references/01-routing-url-fundamentals.md— route tree, paths, parameters,extra, named routes, navigation methods, browser history, deep links, web URLs.references/02-auth-shell-navigation.md— redirects,onEnter, auth, route refresh, state-management integration, shells, bottom navigation, nested Navigators, keys.references/03-pages-restoration-typed-security.md— pages, transitions, dialogs, back, errors, loading, initial location, restoration, typed routes, DI, observers, analytics, URL stability, notifications, security, performance.references/04-testing-debugging-migration.md— direct-route tests, redirect matrices, shell/web/restoration tests, debugging, upgrades.references/05-antipatterns-workflows-checklists.md— full anti-pattern catalog, implementation/refactor/review workflows, production checklists. If repository behavior conflicts with the research baseline, verify the installed package and preserve working current semantics unless intentionally migrating them.
Engineering workflow
1. Inspect before editing
Record:
Flutter/Dart versions
go_router/go_router_builder versions
router construction owner
root/shell/branch navigator keys
route tree and public paths
onEnter / redirects / onExit
path/query/extra usage
go/push/replace/Navigator usage
deep-link platform setup
web hash/path strategy + hosting rewrites
restoration IDs
route observers/analytics
generated route code
routing testsSearch for:
GoRouter(
GoRoute(
ShellRoute(
StatefulShellRoute
context.go / context.push
Navigator.push
parentNavigatorKey
refreshListenable
onEnter / redirect / onExit
pathParameters
uri.queryParameters
extra
TypedGoRoute / GoRouteDataDraw the actual URL and Navigator hierarchy before restructuring it.
2. Decide whether the destination is routable
Use a route when the destination benefits from URL identity, deep linking, browser history, notification entry, restoration, or canonical app navigation. Keep temporary non-addressable UI such as ordinary confirmations as dialogs/bottom sheets when route semantics add no value.
3. Define the canonical URL first
Prefer semantic routes:
/products/:productId
/orders/:orderId
/settings/security
/search?q=flutter&page=2Avoid implementation names such as /productBlocScreen2.
Preserve exposed URLs. When changing one, add a compatibility redirect before removing the old path.
Use one casing convention. Do not model distinct resources by trailing slash alone.
4. Put data in the correct channel
Use path parameters for required resource identity.
Use query parameters for optional state that should survive refresh, sharing, bookmarking, and browser history.
Use extra only for secondary/transient information.
Preferred pattern:
/products/42
path → productId=42
extra → optional prefetched Product(42)The route must remain functional if extra is missing.
Build encoded locations with Uri rather than ad-hoc query concatenation.
5. Validate route input
Validate external path/query data for:
presence
length
format
numeric range
enum membership
allowed internal return destinationTreat route guards as UX/navigation policy, not backend authorization.
For from/return URLs, reject schemes, authorities, external hosts, and unrecognized paths.
6. Choose route hierarchy and Navigator ownership
Use nested GoRoute when parent and child belong to one logical stack.
Use ShellRoute for persistent chrome plus one nested Navigator.
Use StatefulShellRoute when branches need independent stacks, e.g.:
Home: /home → /home/details/42
Search: /search → /search/results/7
Profile: /profile → /profile/settingsFor every page decide whether it belongs to root, shell, branch, or an explicit ancestor Navigator.
Use a root parentNavigatorKey only when a child intentionally needs to appear above the shell.
Never create Navigator keys in build().
7. Choose go, push, and replacement semantics deliberately
Use:
go canonical destination / configured stack
push add page above current stack
pop(result) return with optional result
replace replace top with preserved page identity semantics
pushReplacement replace top with new page identityTypical intent:
login → home go
list → detail push or canonical nested navigation
detail → edit push
temporary step → final screen pushReplacementOn Web, use canonical URL-driven navigation for locations that must survive sharing/reload. Test imperative push behavior in a browser rather than assuming mobile semantics.
8. Build authentication routing from stable state
Model at least:
loading
signedOut
signedInUse this flow:
requested route
↓
auth unresolved → splash/loading
↓
signed out + protected → /login?from=<validated internal route>
↓
signed in + login/splash → safe return target or home
↓
otherwise allowUse top-level redirect for app-wide auth policy.
Use route-level redirect for route/subtree rewrites.
Use onEnter when the requirement is to block an attempt rather than map A → B.
Return null when no redirect is required. Ensure the redirect destination is exempt from the source condition. Never raise redirectLimit to hide loops.
Do not call auth/network APIs from every redirect evaluation; observe already-resolved session state.
9. Re-evaluate routing without rebuilding the router
Use the installed version's supported mechanisms such as refreshListenable, inherited dependencies, or explicit router.refresh() where justified.
If state is exposed as a Stream, adapt it to a long-lived Listenable with deterministic disposal.
Do not reintroduce removed GoRouterRefreshStream patterns from old tutorials.
10. Keep routing at the presentation/composition boundary
Route builder:
parse/validate route state
construct presentation boundaryFeature state/repository:
load resource
handle domain state
perform business workPrefer:
Cubit emits success(orderId)
UI listener performs navigationAvoid injecting BuildContext or GoRouter into ordinary repositories/use cases/Blocs.
11. Implement shell navigation intentionally
For StatefulShellRoute:
- switch with
navigationShell.goBranch(index); - preserve branch history by default;
- use
initialLocation: trueonly when reset-to-root UX is intentional; - deep link directly to the canonical destination in another branch;
- preload branches only when measured first-switch latency justifies memory cost;
- test root and branch observers for duplicate analytics.
Do not emulate branch switching by manually composing multiple unrelated Navigator systems when the stateful shell already fits the requirement.
12. Use builder vs pageBuilder correctly
Use builder by default.
Use pageBuilder only for Page-level behavior such as:
custom transition
fullscreenDialog
restorationId
special Page configurationFor custom pages, preserve state.pageKey unless different identity is intentional.
Prefer default platform transitions unless product UX requires custom motion. Profile expensive transition effects.
Keep ordinary temporary dialogs pageless unless they need URL/history/restoration semantics.
13. Handle back and exit policy at the right layer
Use normal router/Navigator back behavior for ordinary routes.
Use PopScope for page-level interception such as dirty forms and predictive-back-compatible behavior.
Use GoRoute.onExit for route-level removal policy when appropriate.
Do not independently wire both to show duplicate confirmations.
Test system back, app-bar back, branch back, shell exit, and browser Back/Forward.
14. Separate navigation errors from domain failures
unknown path → router error/not-found UI
matched product path, no row → product/resource not-found state
known resource, no access → authorization/access state
valid route, request failed → page network/retry stateDo not route every failure to /404.
Do not expose raw routing exception strings to production users.
15. Design direct entry and deep links
For every important route ask:
Can the app launch cold directly here?
Can the page reconstruct from URL + services?
Does it depend on a prior page setting selected state?If prior navigation is required, the deep-link architecture is incomplete.
Remember that Android App Links and iOS Universal Links require platform association configuration outside the go_router route table.
16. Treat Flutter Web as a separate surface
Select hash vs path strategy intentionally.
For path URLs ensure:
usePathUrlStrategy()
server/CDN fallback to index.html
correct base href under subpath hostingTest direct URL, reload, Back, Forward, query changes, and branch URLs in production-like hosting.
A server 404 after refreshing /products/42 is usually a hosting rewrite problem, not route matching.
17. Add restoration only when required
Do not confuse keeping branch Navigators alive with restoration after process death.
When restoration is required, configure the router, shell, branch, and custom Page restoration IDs required by the installed APIs and test actual restoration behavior.
18. Use typed routes when they reduce meaningful risk
Consider go_router_builder for large/shared route surfaces with many typed path/query parameters.
Keep route-critical identity out of typed $extra for the same reason as untyped extra.
Never edit generated routing code manually.
After typed-route source changes, run the repository's generation workflow, commonly:
dart run build_runner build19. Secure route analytics
Prefer stable names/templates:
product_details
settings_security
/products/:productIdDo not send raw URLs containing user IDs, search terms, email addresses, reset tokens, or sensitive filters unless an explicit redaction/privacy policy permits it.
20. Optimize only measured routing costs
Investigate performance only when evidence points to:
router reconstruction
expensive redirects
heavy route builders
unnecessary nested Navigators
branch preloading
custom transition rendering
observer/analytics workDo not micro-optimize path matching without measured navigation latency.
Validation gates
Route and URL behavior
- Important routes support direct entry.
- Required identity is in path/query state.
- Path/query validation handles malformed input.
- Public path changes preserve compatibility.
- Unknown path and resource-not-found are distinct.
Auth routing
Cover at least:
loading + protected → splash
signed out + protected → login + safe from
signed out + login → login
signed in + login → home/safe from
signed in + protected → stays
logout while protected → signed-out route
invalid from → safe fallbackValid flows must never hit redirect-limit errors.
Stateful shell
Test:
- push inside branch A;
- switch to B;
- push inside B;
- switch back to A and preserve A stack;
- verify active-tab reset behavior if implemented;
- deep link directly into B;
- verify active branch and back behavior.
Web
Use browser/integration coverage for history-sensitive behavior. Widget tests cannot prove production server rewrites.
Restoration
Test process restoration separately when required.
Migration workflow
For a go_router upgrade:
- Record installed Flutter/Dart/router/builder versions.
- Read every intervening changelog/migration guide.
- Capture baseline public URLs, auth redirects, back behavior, shells, web history, observers, and deep links.
- Update APIs without simultaneously redesigning routes unless necessary.
- Regenerate typed routes.
- Re-check shell/observer behavior.
- Test old external URLs and compatibility redirects.
- Test browser history separately.
- Remove obsolete APIs rather than wrapping them indefinitely.
Treat these patterns as version-warning signs:
GoRouterRefreshStream
old state.queryParameters
GoRouter.location assumptions
WillPopScope route guards
pre-current shell observer assumptionsVerify the installed-version replacement before editing.
Reject these anti-patterns
- Recreating
GoRouteror navigator keys during rebuilds. - Navigating from
build(). - Storing/injecting
BuildContextin business layers. - Network/database work inside redirects or route builders.
- Critical identity stored only in
extra. - Scattered page-level auth redirects.
ShellRouteused while expecting independent tab stacks.StatefulShellRouteused without an independent-stack requirement.- Secrets placed in query/path data.
- External
fromURLs trusted without validation. - Deep-linked pages that require prior in-app navigation.
- Public paths renamed because implementation folders changed.
- Canonical app pages split arbitrarily between go_router and manual Navigator stacks.
- Every dialog turned into a route.
- Custom transitions applied everywhere without UX/performance reason.
- Raw router exceptions exposed to users.
- Major upgrades performed by compiler-error whack-a-mole.
Read references/05-antipatterns-workflows-checklists.md for all supplied anti-patterns and detailed review checklists.
Production Definition of Done
- Stable router and navigator-key ownership.
- Route tree matches URL and Navigator semantics.
- Correct
GoRoute/ShellRoute/StatefulShellRoutechoice. - Canonical URLs are meaningful, stable, and deep-linkable.
- Route-critical values are reconstructable and validated.
go/push/replacement semantics match UX and browser history.- Auth loading, signed-out, and signed-in routing are deterministic and loop-free.
- Return URLs are internal and allow-listed.
- Secrets are absent from URLs and route analytics.
- Backend authorization remains independent from route guards.
- Root/shell/branch Navigator ownership is intentional.
- Direct cold entry works for important destinations.
- Platform deep-link association is configured separately.
- Browser direct refresh/back/forward works when Web is supported.
- Unknown-route, domain-not-found, forbidden, and network failures are distinct.
- Restoration is configured/tested only where required.
- Typed generated code is current where used.
- Direct-route, auth, shell, back, and error tests cover critical paths.
- Installed-version migration notes were reviewed.
Final decision rule
Before accepting a routing change, answer:
What is the canonical URL?
Can it be entered directly?
Which data belongs in path/query vs extra?
How is external input validated?
Which Navigator owns the page?
Why this route/shell type?
Why go vs push vs replacement?
What happens from a cold authenticated/unauthenticated deep link?
What happens on system/browser back?
Are return targets, URLs, and analytics safe?
How are router errors distinguished from domain failures?
Which tests prove these semantics?If those answers are unclear, the routing design is not finished.
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
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.

