Claude-skill-registry kotlin-timber-logger

Add Timber logging statements to Kotlin Android files. Analyzes code logic to insert debug, info, warning, and error logs at function entry/exit, conditionals, try-catch blocks, and state changes. Only accepts Kotlin files (.kt). Use via /timber command.

install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/kotlin-timber-logger" ~/.claude/skills/majiayu000-claude-skill-registry-kotlin-timber-logger && rm -rf "$T"
manifest: skills/data/kotlin-timber-logger/SKILL.md
source content

Kotlin Timber Logger

Add intelligent Timber logging to Kotlin Android files based on code analysis.

Activation

Trigger via

/timber <file.kt>
slash command.

Input Validation

STRICT: Only

.kt
files accepted

  • Reject non-Kotlin files immediately
  • Verify file exists before processing

Log Levels

LevelMethodUse Case
Debug
Timber.d()
Function flow, state changes
Info
Timber.i()
Important milestones
Warning
Timber.w()
Potential issues
Error
Timber.e()
Caught exceptions

Logging Strategy

Function Entry/Exit

fun processData(input: String): Result {
    Timber.d("processData() input.length=${input.length}")
    // ... logic ...
    Timber.d("processData() completed")
    return result
}

Suspend Functions

suspend fun fetchData(): Data {
    Timber.d("fetchData() started")
    // ... async logic ...
    Timber.d("fetchData() completed")
    return data
}

Conditionals (when/if)

when (state) {
    State.LOADING -> Timber.d("State: LOADING")
    State.SUCCESS -> Timber.d("State: SUCCESS, items=${data.size}")
    State.ERROR -> Timber.w("State: ERROR, msg=${error.message}")
}

Try-Catch

try {
    val result = parseJson(json)
    Timber.d("JSON parsed successfully")
} catch (e: Exception) {
    Timber.e(e, "JSON parsing failed")
}

StateFlow Updates

_uiState.update { current ->
    Timber.d("State update: loading=${current.loading} -> true")
    current.copy(loading = true)
}

Safety Rules

NEVER log:

  • Passwords, tokens, API keys
  • PII (personal identifiable information)
  • Full large objects (use
    .size
    or
    .take(3)
    )

Avoid:

  • Logs inside tight loops (throttle or count only)
  • High-frequency callbacks

Process

  1. Validate input is
    .kt
    file
  2. Read file, check for
    import timber.log.Timber
  3. Identify patterns: functions, try-catch, conditionals, state changes
  4. Add import if missing
  5. Insert appropriate log statements
  6. Report changes made

Output Format

Timber Logging Added: [filename.kt]

Added [N] logs:
- [X] Timber.d() debug
- [X] Timber.w() warning
- [X] Timber.e() error

Instrumented:
- functionName() - entry/exit
- handleError() - try-catch
- when block - state transitions

Import added: Yes/No