navigation

navigation is a cursor rule for Cursor from RanaNadeemAslam/android-ai-skills. It costs 0 tokens per session (1,049 once invoked), scanned A, original, MIT.

A set of Jetpack Navigation Compose rules for moving between screens in an Android app built with Compose.

In plain words
What is it for?
It guides type-safe routes, screen arguments, deep links, a central NavHost, and decoupled navigation callbacks.
Why use it?
It reduces errors caused by string-based routes and keeps screen code separate from navigation logic.

Cursor rule for Cursor

Written for Cursor: a Cursor rule (.mdc).

Good fit It guides type-safe routes, screen arguments, deep links, a central NavHost, and decoupled navigation callbacks.

Compare 6 cursor rules from other repositories ↓
Install with agentmods
npx agentmods add rules/rananadeemaslam/android-ai-skills/navigation
Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

Clone the repo
git clone --depth 1 https://github.com/RanaNadeemAslam/android-ai-skills

Made for: Cursor.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for navigation

README.md
[![agentmods](https://agentmods.dev/badge/rules/rananadeemaslam/android-ai-skills/navigation/github.svg)](https://agentmods.dev/rules/rananadeemaslam/android-ai-skills/navigation)
Your own site
<a href="https://agentmods.dev/rules/rananadeemaslam/android-ai-skills/navigation"><img src="https://agentmods.dev/badge/rules/rananadeemaslam/android-ai-skills/navigation/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for navigation

Your own site · 80×15
<a href="https://agentmods.dev/rules/rananadeemaslam/android-ai-skills/navigation"><img src="https://agentmods.dev/badge/rules/rananadeemaslam/android-ai-skills/navigation.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 0 Nothing until a file matches its globs; then the whole rule loads.
When invoked 1,049 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00000 $0.01049
Opus 5 $0.00000 $0.00524
Sonnet 5 $0.00000 $0.00210
Haiku 4.5 $0.00000 $0.00105

Measured 9d ago against content hash 68c34f81f39b, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-08, from the pricing page.

Security

Grade A, and why

navigation scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 9d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

cursor/rules/navigation.mdc · 153 lines

How it starts

The opening of the file, as written. The whole thing — 153 lines — stays where its author put it; the contents beside it link to each section on GitHub.

You are an expert in Jetpack Navigation for Compose. Use type-safe navigation with serializable routes. Keep navigation decoupled from screen composables.

Setup & Structure

Source: https://developer.android.com/guide/navigation/design

DO:

  • Use single-Activity architecture with one NavHost
  • Define routes as serializable data classes or objects:
// Route definitions
@Serializable data object HomeRoute
@Serializable data object ProfileRoute
@Serializable data class ArticleDetailRoute(val articleId: String)
  • Set up NavHost in the main composable:
@Composable
fun AppNavHost(
    navController: NavHostController = rememberNavController(),
) {
    NavHost(navController = navController, startDestination = HomeRoute) {
        composable<HomeRoute> {
            HomeRoute(
                onArticleClick = { id -> navController.navigate(ArticleDetailRoute(id)) },
            )
        }
        composable<ArticleDetailRoute> {
            ArticleDetailRoute(
                onNavigateBack = { navController.popBackStack() },
            )
        }
    }
}

DON'T:

  • Use string-based routes — use type-safe serializable route classes
  • Create multiple Activities for navigation — use single Activity + NavHost
  • Put NavHost inside individual screens

Decoupled Navigation

Source: https://developer.android.com/develop/ui/compose/navigation#testing

DO:

  • Pass navigation actions as lambda callbacks to screen composables:
@Composable
fun HomeRoute(
    onArticleClick: (String) -> Unit,  // Navigation via callback
    onSettingsClick: () -> Unit,
    viewModel: HomeViewModel = hiltViewModel(),
) {
    val uiState by viewModel.uiState.collectAsStateWithLifecycle()
    HomeScreen(
        uiState = uiState,
        onArticleClick = onArticleClick,
        onSettingsClick = onSettingsClick,
    )
}
  • Keep NavController only in the NavHost — never pass it down

DON'T:

  • Pass NavController to composables:
// BAD — tightly coupled
fun HomeScreen(navController: NavController) {
    Button(onClick = { navController.navigate("profile") }) { ... }
}
  • Navigate from inside ViewModel — trigger navigation via UI events/callbacks

Read the full file on GitHub · 153 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 9d ago First seen · 153 lines · 0 tokens per session scan A 68c34f81f39b

Subscribe to this mod's changes

navigation is a cursor rule published in the GitHub repository RanaNadeemAslam/android-ai-skills (6 stars, last pushed 5mo ago), licensed MIT. It costs nothing until one of its globs matches a file; then it loads 1,049 tokens. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.