Engine Whats New
flutter/flutter
Generates the "what's new" release summary and diff file for changes in the Flutter engine (//engine/src/flutter) between two releases (e.g., 3.47 vs 3.44).
Analyze Drift / SQLite slow-query and super-slow-query logs against this app's known stall patterns (read waves, N+1, transaction scoping, MultiExecutor contention, WAL/OS factors)
$ npx skills add matthiasn/lotti --skill analyze-db-logs -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install matthiasn/lotti analyze-db-logs --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/matthiasn/lotti.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/analyze-db-logs .claude/skills/analyze-db-logs && rm -rf skills-srcUse ~/.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/
Install the "analyze-db-logs" agent skill from https://github.com/matthiasn/lotti/tree/main/.claude/skills/analyze-db-logs into .claude/skills/analyze-db-logs/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "analyze-db-logs", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/matthiasn/lotti/tree/main/.claude/skills/analyze-db-logsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add matthiasn/lotti --skill analyze-db-logs -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install matthiasn/lotti analyze-db-logs --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/matthiasn/lotti.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/analyze-db-logs .agents/skills/analyze-db-logs && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "analyze-db-logs" agent skill from https://github.com/matthiasn/lotti/tree/main/.claude/skills/analyze-db-logs into .agents/skills/analyze-db-logs/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "analyze-db-logs", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add matthiasn/lotti --skill analyze-db-logs -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install matthiasn/lotti analyze-db-logs --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/matthiasn/lotti.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/analyze-db-logs .cursor/skills/analyze-db-logs && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "analyze-db-logs" agent skill from https://github.com/matthiasn/lotti/tree/main/.claude/skills/analyze-db-logs into .cursor/skills/analyze-db-logs/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "analyze-db-logs", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/matthiasn/lotti.git --path .claude/skills/analyze-db-logs--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add matthiasn/lotti --skill analyze-db-logs -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install matthiasn/lotti analyze-db-logs --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/matthiasn/lotti.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/analyze-db-logs .gemini/skills/analyze-db-logs && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "analyze-db-logs" agent skill from https://github.com/matthiasn/lotti/tree/main/.claude/skills/analyze-db-logs into .gemini/skills/analyze-db-logs/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "analyze-db-logs", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install matthiasn/lotti analyze-db-logsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add matthiasn/lotti --skill analyze-db-logs -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/matthiasn/lotti.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/analyze-db-logs .github/skills/analyze-db-logs && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "analyze-db-logs" agent skill from https://github.com/matthiasn/lotti/tree/main/.claude/skills/analyze-db-logs into .github/skills/analyze-db-logs/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "analyze-db-logs", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add matthiasn/lotti --skill analyze-db-logs -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install matthiasn/lotti analyze-db-logs --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/matthiasn/lotti.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/analyze-db-logs .opencode/skills/analyze-db-logs && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "analyze-db-logs" agent skill from https://github.com/matthiasn/lotti/tree/main/.claude/skills/analyze-db-logs into .opencode/skills/analyze-db-logs/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "analyze-db-logs", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
analyze-db-logsAnalyze Drift / SQLite slow-query and super-slow-query logs against this app's known stall patterns (read waves, N+1, transaction scoping, MultiExecutor contention, WAL/OS factors)
Analyze DB Logs is an agent skill from matthiasn/lotti. Analyze Drift / SQLite slow-query and super-slow-query logs against this app's known stall patterns (read waves, N+1, transaction scoping, MultiExecutor contention, WAL/OS factors)
Its SKILL.md is about 3.8k 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 Databases, covering Query optimization. It works with SQLite, Flutter, Android and iOS. The repository describes itself as: A private logbook with a staff of personal AI assistants. Agents read what you record and propose what to do next — you approve the changes. End-to-end encrypted sync between… The licence is GPL-3.0.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit aba2d50. It shows what the files ask for, not the result of running them.
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.
No scripts in the folder and no shell commands in SKILL.md (its code samples are bash).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Analyze DB Logs loads about 3.8k tokens when it runs. Until then it costs about 49 tokens; SKILL.md has 1,862 words of instructions outside code blocks.
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.
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.
The full file from matthiasn/lotti at commit aba2d50, republished under its GPL-3.0 licence (© matthiasn). 1,862 words, ~3,760 tokens.
.claude/skills/analyze-db-logs/SKILL.md (or your agent's skills folder).Reads slow-query log files written by lib/database/slow_query_logging.dart
and produces an actionable diagnosis grounded in this codebase's stack
(Dart, Flutter, Drift, SQLite).
The user provides the path to the log directory — typically a gitignored
local copy they pulled off a device or simulator. Repository convention is
./logs/ at the repo root (already in .gitignore).
/analyze-db-logs ./logs/ # most recent date in ./logs/
/analyze-db-logs ./logs/desktop # platform-scoped subdir
/analyze-db-logs ./logs/mobile 2026-05-02 # specific date
/analyze-db-logs /tmp/from-device # any absolute pathTreat $ARGUMENTS as <path> [optional date or window]. The first
positional must be the path; refuse with a one-line prompt if it is
missing — do NOT invent a default location, the user knows where their
logs are. Date is optional and defaults to "the most recent file per
stem found under that path".
Always print the resolved paths and line counts before analysing, so the user can confirm the right files are loaded.
The SlowQueryInterceptor.fileReporter writes two daily files per
platform under whatever documentsDirectoryPath/logs/ the running app
resolved to. The user is responsible for copying them into the path they
hand to this skill. Expect:
slow_queries-YYYY-MM-DD.log — every query above the configured
threshold (default 10ms; gated by SlowQueryLoggingGate.isEnabled).super_slow_queries-YYYY-MM-DD.log — duplicates of queries above the
super-slow threshold (default 200ms), enriched with EXPLAIN QUERY PLAN rows under PLAN: and (when first-call stack capture is on)
filtered application stack frames under STACK:.By convention this repo's ./logs/ contains one subdirectory per
platform — typically desktop/ and mobile/ (sometimes ios/,
android/). Each subdir holds its own daily files. When the path the
user supplies is a directory that contains only subdirectories (no
*.log files at its top level), treat each subdirectory as a separate
platform-scoped scan and label every finding with the subdir name so
the user can tell which device it came from.
If the user supplies a more specific path (e.g. ./logs/mobile/),
respect that and don't go up a level. If they supply the parent and
both desktop/ and mobile/ are present, analyse both and produce one
report section per platform plus a brief cross-platform summary at the
end.
Glob discovery rule of thumb:
<path>/{slow_queries,super_slow_queries}-*.log # path is leaf
<path>/*/{slow_queries,super_slow_queries}-*.log # path is parentPick the most recent date per (subdir, stem) pair unless a date arg
is given.
A slow-query line is a single line:
2026-05-02T19:11:48.592 [db.sqlite] select 388.759ms args=0 SELECT * FROM ...A super-slow entry is the same line plus indented continuation lines:
2026-05-02T19:11:48.592 [db.sqlite] select 388.759ms args=0 SELECT ...
PLAN: 4|0|SEARCH journal USING INDEX idx_journal_browse (deleted=? AND type=?)
PLAN: 84|0|USE TEMP B-TREE FOR ORDER BY
STACK: #10 JournalDb.getAllDashboards (package:lotti/database/database.dart:3056:34)
STACK: #11 dashboardsProvider.<anonymous closure> (package:lotti/features/dashboards/state/dashboards_page_controller.dart:20:14)The interceptor filters STACK: lines to drop drift, dart-runtime,
riverpod and the slow-query plumbing itself; only package:lotti/...
frames remain.
Resolve the file set. Honor the platform argument; pick the most recent date per stem if no date is given. Tail-load the file (last ~2000 lines is usually enough — the interceptor appends, so the wave you care about is at the end). Print the resolved paths.
Bucket entries by query shape. Collapse per-row args; group by
the normalized statement. For each bucket capture: count, p50/p95/max
elapsed, the unique PLAN: shapes, and the unique STACK: heads
(top app-code frame).
Diagnose against the known patterns below. For every finding, cite the specific log lines (timestamp + elapsed + statement prefix). Do not generalize — show the data.
Recommend the fix. Reference the existing seam (drift query, coalescer, transaction wrapper, index, etc.) and where in the code the change would land. If a fix is speculative, say so.
These are battle-tested findings from this codebase. Apply them in order; the first match is usually the dominant cost.
Signature: a cluster of 10–20+ queries whose elapsed is roughly
identical (e.g., all in the 600–700ms band) but whose timestamps span
only 10–30ms. Each query's plan is fine; the SQL itself is fast.
Diagnosis: the queries were queued behind something — typically a
write transaction holding the writer lock, an ANALYZE on the boot
path, or a slow beforeOpen hook. The wall-clock measurement starts
when drift accepts the request, so queue wait shows up as "elapsed".
Confirm by:
elapsed band: a 100ms+ spread across the wave with
near-identical finish timestamps (use the leading ISO timestamp,
not the elapsed) means the queries unblocked together. The
interceptor strips drift / dart-runtime frames so the original
STACK: #5 DatabaseConnectionUser.doWhenOpened boilerplate is
not visible in the log — infer the gate from the timing pattern,
not from a frame name.EntitiesCacheService.init firing
Future.wait of definitions queries — the surviving STACK: heads
for the wave will point at distinct controllers / repositories
whose initial fetches all queued together.Likely fixes:
ANALYZE and other heavy work off the boot path (beforeOpen
must return fast).readPool adds isolate-spawn cost upfront.Signature: many lines like
SELECT * FROM "journal" WHERE "id" = ? AND "deleted" = ?, all from the
same STACK: head, all reporting nearly identical elapsed times.
Diagnosis: a Future.wait(ids.map(byId)) or a per-row provider
family fanning out single-id reads. Each call queues through the read
pool independently.
Recurring offenders already fixed in this codebase:
taskLiveDataProvider (FutureProvider.family per task) → solved by
JournalDb._coalesceEntityById (microtask-coalesced bulk fetch).LinkedAiResponsesController._fetch → switched from Future.wait to
journalRepository.getJournalEntitiesByIds(...).EditorStateService.init drafts loop → switched to
journalEntitiesByIdsUnorderedAllPrivate(idList).Likely fixes:
journalEntitiesByIdsUnorderedAllPrivate,
getJournalEntitiesForIdsUnordered, linksForEntryIds, etc.).Reminder: in drift, anything wrapped in db.transaction(() async { ... })
runs on the write connection — even pure select(...) calls inside
the block. The read-pool isolates do NOT pick those up. So a
transaction { read; read; …; write; commit } body serialises every
read behind every other write that touches the same writer.
Confirm by: look at the STACK: head for a frame inside an apply /
upsert / migration path. If the read appears to hit a fast plan but
elapsed is high and other writes are visible nearby, the read was
forced onto the writer.
Likely fixes:
sync_db, settings_db, agent_db,
ai_config_db) cannot be atomic with JournalDb writes anyway —
doing them inside a JournalDb.transaction only holds the journal
writer lock for unrelated work.Signature: the same wave shape as pattern 1, but the suspected
"writer holding the lock" is a sync apply that's logging a
SyncJournalEntity-shaped write while also awaiting a
_sequenceLogService.recordReceivedEntry (sync_db) or other cross-DB
work inside the same transaction { ... }.
Diagnosis: this codebase fixed exactly this in
queue_apply_adapter.dart via _writesJournalDb(SyncMessage) — the
adapter now wraps in JournalDb.transaction only for payload
families that actually write to JournalDb tables (journal entity,
entry link, entity definitions, outbox bundle, conservatively the
backfill request/response paths). Theming, ai-config, agent
entity/link/bundle writes bypass the wrapper because they target
other databases.
_persistJournalEntity was also restructured: the pre-read
diagnostic journalEntityById, the post-write
_sequenceLogService.recordReceivedEntry (sync_db), and the
entry-exists check now run outside the narrow journal transaction.
When inspecting new code: any new db.transaction(() async { ... })
that contains an await to a different database, a network call, or a
filesystem write is a candidate for narrowing.
Signature: a single query reporting hundreds of ms with a plan
that includes USE TEMP B-TREE FOR ORDER BY, SCAN <table>, or an
index match where the leading column is not the most selective
predicate.
Recurring offenders already fixed in shipped code — verify these
still match the current lib/database/database.drift,
lib/database/sync_db.dart, and lib/database/database.dart before
citing them. Treat the list as historical context, not an asserted
current truth:
task_priority_rank ordering with high-cardinality
category IN (...) predicate. The fix shipped as a partial index
named (at the time) idx_journal_tasks_status_priority_date; if it
is still in database.drift, recommend it as the steady-state path,
otherwise treat the symptom as an open issue.getBulkLinkedTimeSpans join over linked_entries. The fix shipped
as a covering index idx_linked_entries_from_id_hidden_to_id.inbound_event_queue stats MIN(enqueued_at) SCAN. The fix shipped
as idx_inbound_event_queue_status_enqueued plus
idx_inbound_event_queue_status_due_lease.claimNextOutboxBatch SCAN from
status = pending OR (status = sending AND updated_at < cutoff).
The fix shipped as two indexed seeks merged in Dart.If a query still matches one of these symptom shapes despite the named
index existing, suspect stale stats first (recommend ANALYZE) before
proposing a new index.
When inspecting new logs: if the plan is suboptimal, recommend
running ANALYZE first (planner stats can drift); only after
confirming with fresh stats should you propose a new index. Bad plans
on a freshly-ANALYZEd DB are real index gaps.
When patterns 1–5 don't explain a stall, consider:
wal_autocheckpoint (default 1000 pages, ~4MB) triggers a
checkpoint that briefly takes a more aggressive lock. Bursty write
workloads can stall reads at checkpoint boundaries.fcntl(F_FULLFSYNC) and BSD locks
on iCloud-backed paths have shown long tails. Less likely on dev
but worth flagging.createInBackground(readPool: N)) —
isolates may spawn on first use; the first boot wave can pay
per-isolate setup cost (~50–200ms each). Subsequent app sessions
should be much faster — first wave is the worst case.PRAGMA foreign_keys = ON runs per-connection; cheap but real.Signature: an entry whose STACK: head points at a beforeOpen,
self-heal, or migration helper — but the user just opened the app
normally. With readPool: N, drift calls beforeOpen on every
connection, so any repair work done there runs 1 + N times per
launch.
Lessons already applied in this codebase:
ANALYZE was removed — stats persist in sqlite_stat1
and the v42 migration runs ANALYZE once on upgrade.CREATE INDEX IF NOT EXISTS block was removed
entirely — the recovery path it covered targeted an aborted-migration
scenario that has not occurred in production.beforeOpen is now just PRAGMA foreign_keys = ON.When you see boot-time housekeeping in a stack, ask: does this need to run on every launch, or once per upgrade?
Produce a concise report, in this order:
lib/...:line) where possible.Keep the report skimmable. If the log is mostly clean, say so — don't manufacture findings.
schemaVersion++) without confirming
the v42-style migration shape and asking the user. New indices that
don't need a column change can land via migration; per-launch
defensive code should not.ANALYZE, CREATE INDEX IF NOT EXISTS
loop, or other "self-heal on every open" — this codebase explicitly
removed those.INDEXED BY hint solves a planner problem. The
autoindex names (sqlite_autoindex_*_1) are not part of the public
SQLite contract; recommend ANALYZE first._PendingEntityByIdWave for entity-by-id coalescing,
_PendingLinksWave for to-id link batches, _writesJournalDb for
per-payload transaction scoping) over inventing new ones.© matthiasn, 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
Just SKILL.md in .claude/skills/analyze-db-logs of matthiasn/lotti.
Open the folder on GitHubat commit aba2d50
Analyze DB Logs 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Analyze DB Logs this skillmatthiasn/lotti | 1.2k | — | ~3.8k | Automated safety check: Pass | GPL-3.0 | |
| Engine Whats Newflutter/flutter | 179k | — | ~978 | Automated safety check: Pass | BSD-3-Clause | |
| Skill CreatorChevey339/kelivo | 4.2k | — | ~1.3k | Automated safety check: Pass | AGPL-3.0 | |
| Web3authWeb3Auth/web3auth-examples | 144 | — | ~1.4k | Automated safety check: Pass | MIT | |
| Mobilevc InstallerJayCRL/MobileVC | 210 | — | ~1.2k | Automated safety check: Pass | MIT | |
| SimdeckNativeScript/SimDeck | 153 | — | ~3.6k | Automated safety check: Pass | MIT |
flutter/flutter
Generates the "what's new" release summary and diff file for changes in the Flutter engine (//engine/src/flutter) between two releases (e.g., 3.47 vs 3.44).
Chevey339/kelivo
Create or improve skills, turn a conversation into reusable SKILL.md instructions, and validate their behavior.
Web3Auth/web3auth-examples
Integrates MetaMask Embedded Wallets (Web3Auth) for non-custodial wallets via social login or custom JWT (Firebase, Auth0, Cognito).
JayCRL/MobileVC
Install and start MobileVC — a Claude Code mobile workspace launcher that lets the user run Claude Code on a phone (iOS / Android) with their dev machine as the backend.
NativeScript/SimDeck
A skill your agent uses for simulator lifecycle, app install/launch, live viewing, UI inspection, touch/keyboard automation, screenshots, recordings, logs, pasteboard, hardware controls, and…
software-mansion-labs/skills
Complete onboarding guide for developers who are new to Detour, the open-source deferred deep linking SDK by Software Mansion.
matthiasn/lotti
Add, complete, or audit a locale across a Flutter application's ARB catalogs and a localized Docusaurus manual, including generated localization code, locale selectors, native platform declarations…
matthiasn/lotti
Maintain a Docusaurus product manual whose prose, navigation, localized page trees, screenshots, coverage metadata, and release build must stay aligned with the application.
matthiasn/lotti
Capture in-app screenshots of a widget or flow at mobile + desktop sizes — offline, deterministic, real fonts and icons — using the reusable screenshot harness.
matthiasn/lotti
A skill your agent uses for authorized Lotti maintainer work that needs private durable task tracking, issue dependencies, blocker management, multi-session handoff, or shared agent memory.
matthiasn/lotti
Run a multi-agent design review on a UI surface — capture reproducible baseline screenshots, then rate them with a panel of design experts (one agent per craft dimension) and, optionally, a panel of…
matthiasn/lotti
Cut a Lotti release — assemble the changelog.d/ fragments into CHANGELOG.md and the Flathub metainfo, bump the version, open the release PR, then tag.
Categories
Analyze Drift / SQLite slow-query and super-slow-query logs against this app's known stall patterns (read waves, N+1, transaction scoping, MultiExecutor contention, WAL/OS factors). Analyze DB Logs is an agent skill from matthiasn/lotti.
Analyze DB Logs fits situations like: tasks that involve Query optimization.
Run `npx skills add matthiasn/lotti --skill analyze-db-logs -a claude-code`. Or copy the skill folder (.claude/skills/analyze-db-logs in matthiasn/lotti) into .claude/skills/analyze-db-logs in your project. Claude Code loads it when a task matches its description.
Run `npx skills add matthiasn/lotti --skill analyze-db-logs -a codex`. Or copy the skill folder (.claude/skills/analyze-db-logs in matthiasn/lotti) into .agents/skills/analyze-db-logs in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add matthiasn/lotti --skill analyze-db-logs -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/analyze-db-logs, .gemini/skills/analyze-db-logs, .github/skills/analyze-db-logs and .opencode/skills/analyze-db-logs in your project.
SKILL.md names no scripts, command-line tools or credentials: Analyze DB Logs is instructions for the agent only.
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.
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.
Analyze DB Logs 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.
About 3.8k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Analyze DB Logs: Engine Whats New (flutter/flutter, 179k stars), Skill Creator (Chevey339/kelivo, 4.2k stars), Web3auth (Web3Auth/web3auth-examples, 144 stars) and Mobilevc Installer (JayCRL/MobileVC, 210 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
matthiasn (a GitHub user) maintains it in matthiasn/lotti, which has 1,199 GitHub stars. The repository holds 10 skills in this directory. The repository was last updated on October 9, 2026.
Source: matthiasn/lotti on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.