Agent skill

Create Core Module

by MartinStyk in MartinStyk/apk-analyzer

A skill your agent uses when creating a new core or shared library module for domain logic, data access, repositories, managers, or utilities.

GPL-3.0Auto-check passedMobile

Install Create Core Module

skills CLI
$ npx skills add MartinStyk/apk-analyzer --skill create-core-module -a claude-code

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

GitHub CLI
$ gh skill install MartinStyk/apk-analyzer create-core-module --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/MartinStyk/apk-analyzer.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/create-core-module .claude/skills/create-core-module && 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
create-core-module
GitHub stars
368
Token cost
~1.7k tokens
SKILL.md length
512 words
Files
1
Skills in repo
18
Repo updated
First seen
Licence
GPL-3.0

At a glance

A skill your agent uses when creating a new core or shared library module for domain logic, data access, repositories, managers, or utilities.

  • Works in 6 steps: Create build file → Create repository interface → Create repository implementation → …
  • Creating a new core
  • SKILL.md covers Step 1 — Create build file, Step 2 — Create repository…, Step 3 — Create repository… and Step 4 — Create Hilt module…, plus 5 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Create Core Module is an agent skill from MartinStyk/apk-analyzer. Use when creating a new core or shared library module for domain logic, data access, repositories, managers, or utilities. Triggered by phrases like "create core module", "add repository", "new data layer", "create shared module", "add manager".

Its SKILL.md is about 1.7k 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 Mobile, covering Android development. It works with Gradle and Kotlin. The repository describes itself as: The most downloaded APK analysis app on Google Play. Detailed reports of every app on your device. No root, no ads, nothing leaves the phone. The licence is GPL-3.0.

When your agent uses it

  • Creating a new core
  • Shared library module for domain logic

Example prompts

  • “create core module”
  • “add repository”
  • “new data layer”
  • “/create-core-module”

Workflow steps

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

  1. Create build file
  2. Create repository interface
  3. Create repository implementation
  4. Create Hilt module (if using DI)
  5. Register in settings.gradle.kts
  6. Create module docs

What it can do on your machine

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

    No scripts in the folder and no shell commands in SKILL.md (its code samples are kotlin).

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

  • Network

    No URLs in SKILL.md.

    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

Create Core Module loads about 1.7k tokens when it runs. Until then it costs about 66 tokens; SKILL.md has 512 words of instructions outside code blocks.

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

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 MartinStyk/apk-analyzer at commit d807559, republished under its GPL-3.0 licence (© MartinStyk). 512 words, ~1,707 tokens.

Download SKILL.mdSave it as .claude/skills/create-core-module/SKILL.md (or your agent's skills folder).
name
create-core-module
description
Use when creating a new core or shared library module for domain logic, data access, repositories, managers, or utilities. Triggered by phrases like "create core module", "add repository", "new data layer", "create shared module", "add manager".

Create Core Module

Given a core module name <name> (e.g., app-export):

<flatname> = module name with hyphens removed (e.g., app-export → appexport, user-preferences → userpreferences)

Step 1 — Create build file

core/<name>/build.gradle.kts

Without Hilt (pure utility module, no DI):

kotlin
plugins {
    alias(libs.plugins.apkanalyzer.library)
}

android {
    namespace = "sk.styk.martin.apkanalyzer.core.<flatname>"

    buildFeatures {
        androidResources = false
    }
}

dependencies {
    implementation(projects.core.common)
}

With Hilt (has repositories or managers with DI):

kotlin
plugins {
    alias(libs.plugins.apkanalyzer.library)
    alias(libs.plugins.apkanalyzer.hilt)
}

android {
    namespace = "sk.styk.martin.apkanalyzer.core.<flatname>"

    buildFeatures {
        androidResources = false
    }
}

dependencies {
    implementation(projects.core.common)
}

Drop the buildFeatures block only if this module ends up owning its own res/ (e.g. a strings.xml for user-facing copy) — see core/apps/build.gradle.kts for that shape. Every module without resources of its own must set androidResources = false; don't leave it unset "just in case."

Step 2 — Create repository interface

core/<name>/src/main/kotlin/sk/styk/martin/apkanalyzer/core/<flatname>/<Name>Repository.kt

kotlin
package sk.styk.martin.apkanalyzer.core.<flatname>

import kotlinx.coroutines.flow.Flow

interface <Name>Repository {
    fun data(): Flow<List<MyModel>>
    suspend fun getById(id: String): MyModel?
}

Public interface methods must never throw. Use:

  • Result<T> for recoverable operations with meaningful error info
  • T? for optional/missing values with no error context needed
  • List<T> (empty) for collection results that may be empty

Step 3 — Create repository implementation

core/<name>/src/main/kotlin/sk/styk/martin/apkanalyzer/core/<flatname>/<Name>RepositoryImpl.kt

kotlin
package sk.styk.martin.apkanalyzer.core.<flatname>

import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.withContext
import sk.styk.martin.apkanalyzer.core.common.coroutines.DispatcherProvider
import javax.inject.Inject

class <Name>RepositoryImpl @Inject constructor(
    private val dispatcherProvider: DispatcherProvider,
) : <Name>Repository {
    override fun data(): Flow<List<MyModel>> = flow {
        // implementation
    }.flowOn(dispatcherProvider.io())

    override suspend fun getById(id: String): MyModel? = withContext(dispatcherProvider.io()) {
        runCatching { /* ... */ }.getOrNull()
    }
}

Step 4 — Create Hilt module (if using DI)

core/<name>/src/main/kotlin/sk/styk/martin/apkanalyzer/core/<flatname>/di/<Name>Module.kt

kotlin
package sk.styk.martin.apkanalyzer.core.<flatname>.di

import dagger.Binds
import dagger.Module
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import sk.styk.martin.apkanalyzer.core.<flatname>.<Name>Repository
import sk.styk.martin.apkanalyzer.core.<flatname>.<Name>RepositoryImpl
import javax.inject.Singleton

@Module
@InstallIn(SingletonComponent::class)
internal interface <Name>Module {
    @Binds
    @Singleton
    fun bind<Name>Repository(impl: <Name>RepositoryImpl): <Name>Repository
}

Step 5 — Register in settings.gradle.kts

Add inside include(...):

kotlin
":core:<name>",

Step 6 — Create module docs

Every module carries its own AGENTS.md (dense agent-reference notes: purpose, package, annotated structure, key interfaces/exports, dependencies — see core/apps/AGENTS.md or core/common/AGENTS.md for the exact format to match) plus a one-line CLAUDE.md pointer:

core/<name>/CLAUDE.md

@AGENTS.md

core/<name>/AGENTS.md — write it once the module's real content exists (not before Step 2-4 produce something to document). Don't leave it as a stub with placeholder text.

The root AGENTS.md does not list individual modules, so there is nothing to update there. Run ./gradlew validateAgentContext to confirm the new module has the AGENTS/CLAUDE pair it requires.

Rules

  • Core modules never depend on feature modules.
  • Always depend on at least core:common.
  • Use @Singleton scope for all repository/manager bindings.
  • Use DispatcherProvider for all dispatcher switching — never hardcode Dispatchers.IO.
  • Define an interface + Impl class for all repositories and managers.
Show full SKILL.md (232 more words)Show less

When the module grows a second repository/manager family

Steps 2-4 above put everything at the package root — that's correct for a module with one repository/manager family. The moment a second, unrelated family joins it (e.g. the module gains <Other>Repository alongside <Name>Repository), stop adding to the flat root/model/util buckets and restructure by domain instead:

  • Give each family its own subpackage (e.g. <domain>/) holding that family's interface, impl, models, and any private supporting types (parsers, analyzers, resolvers) together.
  • Keep only the handful of models every family composes into at the module's model/ root — not every data class the module has ever defined.
  • Dissolve any grab-bag util/analysis/helpers file: move each function next to the model or domain it produces, not into one shared file.
  • Mark a family's supporting interfaces internal unless another module genuinely consumes them directly (grep before assuming) — internal is module-wide, so this is independent of which subpackage the type lives in.
  • Keep Hilt DI as a single di/<Name>Module.kt with @Binds grouped by domain via comments; don't fragment it into one @Module per subpackage.

core:apps is the worked example — see its AGENTS.md "Structure" section and the signing/, permissions/, components/, manifest/, installsource/, devicefeatures/, packaging/, usagestats/, storagestats/, export/, sdkversion/ packages. A module with exactly one repository/manager family (core:app-permissions, core:app-index, core:apk-files) stays flat — don't restructure ahead of need.

Namespace Mapping Reference

Directorynamespace value
core/appscore.apps
core/app-permissionscore.apppermissions
core/app-indexcore.appindex
core/user-preferencescore.userpreferences
core/ui-librarycore.uilibrary
core/commoncore.common

© MartinStyk, GPL-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 .claude/skills/create-core-module of MartinStyk/apk-analyzer.

Open the folder on GitHubat commit d807559

Compare with similar skills

Create Core Module 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.

Create Core Module compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Create Core Module this skillMartinStyk/apk-analyzer368—~1.7kAutomated safety check: PassGPL-3.0
Android Developmentdpconde/claude-android-skill336—~1.7kAutomated safety check: PassMIT
Diagnosing Compose StabilityrosuH/EasyWatermark1.9k1 repos~3.3kAutomated safety check: PassApache-2.0
Claude Android NinjaDrjacky/claude-android-ninja124—~5.2kAutomated safety check: PassApache-2.0
Expo Brownfield Integrationmweinbach/agent-coworker1562 repos~900Automated safety check: NotesCustom licence
Build Foremannekomangaorg/Neko2.8k—~807Automated safety check: PassApache-2.0

Similar skills

  • Android Development

    dpconde/claude-android-skill

    Create production-quality Android applications following Google's official architecture guidance and NowInAndroid best practices.

    336 GitHub stars~1.7k tokensUpdated 10 mo ago
    MobileAuto-check passed
  • Diagnosing Compose Stability

    rosuH/EasyWatermark

    A skill your agent uses to diagnose Jetpack Compose stability problems by enabling and reading the Compose Compiler Reports (classes.txt, composables.txt, composables.csv, module.json).

    1.9k GitHub starsUsed in 1 repo~3.3k tokens
    MobileAuto-check passed
  • Claude Android Ninja

    Drjacky/claude-android-ninja

    Build and migrate Android apps with Kotlin, Jetpack Compose, MVVM, Hilt, Room 3 (KSP, SQLiteDriver, Flow/suspend DAOs), Navigation3, and multi-module Gradle.

    124 GitHub stars~5.2k tokensUpdated 8 days ago
    MobileAuto-check passed
  • Expo Brownfield Integration

    mweinbach/agent-coworker

    Helps add Expo and React Native to an existing native iOS or Android app, and choose between a prebuilt AAR or XCFramework and a fully integrated build.

    156 GitHub starsUsed in 2 repos~900 tokens
    MobileAuto-check: notes
  • Build Foreman

    nekomangaorg/Neko

    Optimizes Gradle build scripts, compilation times, and Android Studio sync performance.

    2.8k GitHub stars~807 tokensUpdated yesterday
    MobileAuto-check passed
  • Desktop And Build Footguns

    maxrave-dev/kotlin-footguns

    Desktop JVM and build traps: JNA natives, bundling, memory, packaging, code signing, R8, deep links, Gradle and CI releases.

    1k GitHub stars~3.8k tokensUpdated 12 days ago
    MobileAuto-check passed

More from MartinStyk/apk-analyzer

All 18 skills in this repo
  • Triage Crashes

    MartinStyk/apk-analyzer

    A skill your agent uses to review production Crashlytics crashes and non-fatals for the latest release and file a GitHub issue for each one that isn't tracked yet.

    368 GitHub stars~4.3k tokensUpdated 2 days ago
    Auto-check passed
  • Analyze CI Failure

    MartinStyk/apk-analyzer

    A skill your agent uses to check GitHub Actions build status or diagnose why a workflow run failed and propose a fix.

    368 GitHub stars~1.9k tokensUpdated 2 days ago
    Auto-check passed
  • Capture App Flow Media

    MartinStyk/apk-analyzer

    A skill your agent uses to record or convert ApkAnalyzer app flows into screenshots or GIFs for the README or product docs.

    368 GitHub stars~1.7k tokensUpdated 2 days ago
    Auto-check passed
  • Create Compose Component

    MartinStyk/apk-analyzer

    A skill your agent uses when creating a new reusable Compose UI component that should live in core:ui-library.

    368 GitHub stars~885 tokensUpdated 2 days ago
    Auto-check passed
  • Create Feature Module

    MartinStyk/apk-analyzer

    A skill your agent uses when creating a new feature module, screen, or feature area.

    368 GitHub stars~1.6k tokensUpdated 2 days ago
    Auto-check passed
  • Fix Crash

    MartinStyk/apk-analyzer

    A skill your agent uses to fix a specific production crash or non-fatal — pulling its Crashlytics data, finding the linked GitHub issue, root-causing it, reproducing it, fixing it, and verifying the…

    368 GitHub stars~2.5k tokensUpdated 2 days ago
    Auto-check passed

Works with

Questions about Create Core Module

What does Create Core Module do?

A skill your agent uses when creating a new core or shared library module for domain logic, data access, repositories, managers, or utilities. Create Core Module is an agent skill from MartinStyk/apk-analyzer. Use when creating a new core or shared library module for domain logic, data access, repositories, managers, or utilities.

When should I use Create Core Module?

Create Core Module fits situations like: creating a new core; shared library module for domain logic.

How do I install Create Core Module in Claude Code?

Run `npx skills add MartinStyk/apk-analyzer --skill create-core-module -a claude-code`. Or copy the skill folder (.claude/skills/create-core-module in MartinStyk/apk-analyzer) into .claude/skills/create-core-module in your project. Claude Code loads it when a task matches its description.

How do I install Create Core Module in Codex?

Run `npx skills add MartinStyk/apk-analyzer --skill create-core-module -a codex`. Or copy the skill folder (.claude/skills/create-core-module in MartinStyk/apk-analyzer) into .agents/skills/create-core-module in your project. Codex loads it when a task matches its description.

Can I use Create Core Module 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 MartinStyk/apk-analyzer --skill create-core-module -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/create-core-module, .gemini/skills/create-core-module, .github/skills/create-core-module and .opencode/skills/create-core-module in your project.

What does Create Core Module need to run?

SKILL.md names no scripts, command-line tools or credentials: Create Core Module is instructions for the agent only.

Does Create Core Module 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 Create Core Module 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 Create Core Module use?

Create Core Module is published under the GPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Create Core Module use?

About 1.7k tokens (SKILL.md is roughly 6.8k 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 Create Core Module?

Skills that share tags, products or a category with Create Core Module: Android Development (dpconde/claude-android-skill, 336 stars), Diagnosing Compose Stability (rosuH/EasyWatermark, 1.9k stars), Claude Android Ninja (Drjacky/claude-android-ninja, 124 stars) and Expo Brownfield Integration (mweinbach/agent-coworker, 156 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Create Core Module?

MartinStyk (a GitHub user) maintains it in MartinStyk/apk-analyzer, which has 368 GitHub stars. The repository holds 18 skills in this directory. The repository was last updated on October 5, 2026.

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