Docker Compose
sickn33/agentic-awesome-skills
Define and run multi-container Docker applications using Docker Compose.
诊断 Kototoro 主壳"空闲永不定居"式 Compose 自持重绘循环(idle 帧数不为 0). An agent skill from Kototoro-app/Kototoro.
$ npx skills add Kototoro-app/Kototoro --skill compose-idle-redraw -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Kototoro-app/Kototoro compose-idle-redraw --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/Kototoro-app/Kototoro.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/compose-idle-redraw .claude/skills/compose-idle-redraw && 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 "compose-idle-redraw" agent skill from https://github.com/Kototoro-app/Kototoro/tree/devel/.claude/skills/compose-idle-redraw into .claude/skills/compose-idle-redraw/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "compose-idle-redraw", 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/Kototoro-app/Kototoro/tree/devel/.claude/skills/compose-idle-redrawType 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 Kototoro-app/Kototoro --skill compose-idle-redraw -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Kototoro-app/Kototoro compose-idle-redraw --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Kototoro-app/Kototoro.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/compose-idle-redraw .agents/skills/compose-idle-redraw && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "compose-idle-redraw" agent skill from https://github.com/Kototoro-app/Kototoro/tree/devel/.claude/skills/compose-idle-redraw into .agents/skills/compose-idle-redraw/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "compose-idle-redraw", 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 Kototoro-app/Kototoro --skill compose-idle-redraw -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Kototoro-app/Kototoro compose-idle-redraw --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Kototoro-app/Kototoro.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/compose-idle-redraw .cursor/skills/compose-idle-redraw && 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 "compose-idle-redraw" agent skill from https://github.com/Kototoro-app/Kototoro/tree/devel/.claude/skills/compose-idle-redraw into .cursor/skills/compose-idle-redraw/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "compose-idle-redraw", 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/Kototoro-app/Kototoro.git --path .claude/skills/compose-idle-redraw--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 Kototoro-app/Kototoro --skill compose-idle-redraw -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Kototoro-app/Kototoro compose-idle-redraw --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Kototoro-app/Kototoro.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/compose-idle-redraw .gemini/skills/compose-idle-redraw && 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 "compose-idle-redraw" agent skill from https://github.com/Kototoro-app/Kototoro/tree/devel/.claude/skills/compose-idle-redraw into .gemini/skills/compose-idle-redraw/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "compose-idle-redraw", 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 Kototoro-app/Kototoro compose-idle-redrawInstalls 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 Kototoro-app/Kototoro --skill compose-idle-redraw -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Kototoro-app/Kototoro.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/compose-idle-redraw .github/skills/compose-idle-redraw && 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 "compose-idle-redraw" agent skill from https://github.com/Kototoro-app/Kototoro/tree/devel/.claude/skills/compose-idle-redraw into .github/skills/compose-idle-redraw/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "compose-idle-redraw", 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 Kototoro-app/Kototoro --skill compose-idle-redraw -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Kototoro-app/Kototoro compose-idle-redraw --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Kototoro-app/Kototoro.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/compose-idle-redraw .opencode/skills/compose-idle-redraw && 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 "compose-idle-redraw" agent skill from https://github.com/Kototoro-app/Kototoro/tree/devel/.claude/skills/compose-idle-redraw into .opencode/skills/compose-idle-redraw/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "compose-idle-redraw", 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.
compose-idle-redraw诊断 Kototoro 主壳"空闲永不定居"式 Compose 自持重绘循环(idle 帧数不为 0). An agent skill from Kototoro-app/Kototoro.
Compose Idle Redraw is an agent skill from Kototoro-app/Kototoro. 诊断 Kototoro 主壳"空闲永不定居"式 Compose 自持重绘循环(idle 帧数不为 0)。 沉淀自 2026-09 历史页/收藏页 ~620 帧/5s 的整轮调试:gfxinfo 测量协议、快照写入 归因(apply observer)、三大已实证根因模式(SnapshotStateMap put 通知语义 / data-class lambda 字段永不相等 / get-property 每读构造导致 effect 每帧 re-key)、 探针工具箱与修复验证清单。 Triggers: "空闲重绘", "idle frames", "帧数不归零", "一直重绘", "never settles", "gfxinfo frames rendered", "recompose loop", "自持循环", "空闲功耗", "recomposition 不停"
Its SKILL.md is about 1.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
The repository describes itself as: Manga, Novel, and Video reader for Android. The licence is Apache-2.0.
8 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 74bd979. 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.
Shell commands in SKILL.md call:
adbgitFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.
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.
Compose Idle Redraw loads about 1.9k tokens when it runs. Until then it costs about 103 tokens; SKILL.md has 427 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 Kototoro-app/Kototoro at commit 74bd979, republished under its Apache-2.0 licence (© Kototoro-app). 427 words, ~1,868 tokens.
.claude/skills/compose-idle-redraw/SKILL.md (or your agent's skills folder).实战锚点:2026-09,history/favourites 页空闲 5s 渲染 620-642 帧而 feed 为 0, 根因为两个独立反馈环,修复 commit
46047d6a7(devel 分支)。归零后全功能回归通过。
症状:页面静止、无输入、无动画,dumpsys gfxinfo 的 "Total frames rendered"
持续增长(120Hz 面板上 ≈ 60fps,即 5s 约 600 帧)。伴随现象:耗电、列表屏滚动发热。
第一反应不是找"最热的符号"。实测教训:LazyGridState.applyMeasureResult 占快照
写入 56%,但它只是"每帧重测"的下游后果,不是原因。链条是:
某状态写入 → 祖先重组 → 布局阶段跑 → applyMeasureResult 写快照 → …
追最热符号会带你绕一整圈回到起点。
正确的第一刀是对照组:
IdleProbeActivity(已提交,app/src/debug/.../core/dev/IdleProbeActivity.kt,
commit 4a124102e):KototoroTheme + 裸 LazyVerticalGrid + 240 静态项。
它 0 帧 → 主题/窗口/insets/系统栏/Application 全部无罪,一次性剪掉大半搜索空间。P=org.skepsun.kototoro.debug
adb shell am force-stop $P
adb shell am start -n $P/org.skepsun.kototoro.main.ui.MainActivity
sleep 8 # 冷启动稳定
adb shell input tap 342 2577 # 底部导航;Redmi K70 (1280x2772):
# history=342, favourites=535, feed=923, 行 y=2577
sleep 6 # 转场动画结束
adb shell dumpsys gfxinfo $P reset
sleep 5 # 纯空闲窗口
adb shell dumpsys gfxinfo $P | grep -m1 'Total frames rendered'规矩:每测一次都 force-stop 重来(进程内状态会互相污染);先 reset 再读增量; 对照组页每轮都测(确认协议本身没坏)。修一处后全部页重测——history 修完后 favourites 还有 624 帧,因为它是第二个独立环,单根因假设会漏。
Snapshot.registerApplyObserver 能看到
每个被 apply 的快照实际改变了哪些 state 对象,按对象 identity 计数。反复出现的
对象 = 重组 driver。registerGlobalWriteObserver 看不到嵌套快照(重组协程内)
的写入,别用它做第一步归因。Choreographer.doFrame → applyChanges → dispatchSideEffects/RememberObservers → 路由代码 → map.put,直接指认写者。MutableState.setValue 在值相等时会去重;SnapshotStateMap.put 不会——值相等
也通知所有读者。而路由每次重组都重报状态,data-class 里的 lambda 字段
(onSortOrderSelected、onClick)每次构造都是新实例、用 identity 比较 →
== 永远不等 → shell 的相等门形同虚设 → 每次 put 都通知 → shell 重组 → 路由再报。
环闭合条件:写 map 的人(或其祖先)自己也读这个 map。
inline val FragmentActivity.router: AppRouter get() = AppRouter(this) // 每读一个新实例!把它直接写进组合,DisposableEffect(appRouter, vm) 的 key 每帧都变:
每帧 forget(onDispose → 报空 → map.remove)+ remember(onRemembered → 报有 →
map.put)。这种"在场/缺席交替"是真变化,任何相等门都救不了——必须让 key 稳定
(remember(activity) { activity.router })。无状态 facade 对象都该这么包。
通用判定:列出"谁写 X、谁读 X"。shell 把路由报告存进 snapshot map,又在自己 scope 里读这个 map 渲染顶栏 → 自持。哪怕写入值不变,map 的通知语义也够点火。
rememberInfiniteTransition 只要有一个值在 draw 阶段被读(哪怕是 graphicsLayer {} 里
几个像素的漂移),整个窗口就按面板刷新率重绘;玻璃顶栏/底栏会采样下层,代价更高。
实例:TopChromeGlow 14s 漂移(0bfb78dfa)让所有一级页空闲 ~130fps、release 进程
空闲 ~42% 单核,两张相隔 1s 的截图却逐像素相同。apply observer 里表现为
唯一一个 Float 状态每帧变,写者栈落在 InfiniteTransition.onFrame。
对策:环境装饰一律静态;确需动效时必须受设置/可见性门控(参照 DiscoverHeroCarousel
的 isPanoramaAnimationEnabled)。排查时 grep rememberInfiniteTransition 最快。
LazyListState.layoutInfo(2026-09-26 实证)每次测量都会产出新的 LazyListMeasureResult 对象,组合里直接读 layoutInfo 就会
"测量 → 重组 → 子项新 lambda → 重测 → 新 layoutInfo" 自持。apply observer 里表现为
LazyListMeasureResult 状态与某个 …Kt$$ExternalSyntheticLambda 状态每帧同步变化。
实例:订阅页 UpdatedContentCarousel 按偏移算倾斜/宽度(64dad203c)。
对策:用 derivedStateOf 只取需要的数值(偏移表等 data class),空闲时结构相等即不失效。
object DevCount { // 放 app/src/main/.../core/dev/ 或 debug sourceSet
private val counts = ConcurrentHashMap<String, AtomicLong>()
private val started = AtomicBoolean(false)
fun startDumpThread() { if (started.compareAndSet(false, true)) Thread {
while (true) { Thread.sleep(4000)
Log.i("KototoroLayoutProbe", "COUNTS " + counts.entries.joinToString(" ") { (k,v) -> "$k=${v.get()}" })
}
}.apply { isDaemon = true; name = "devcount" }.start() }
fun inc(key: String) { startDumpThread(); counts.computeIfAbsent(key){AtomicLong()}.incrementAndGet() }
}
// 用法:composable 体首行 DevCount.inc("favRoute.compose");Modifier.layout 里 inc("grid.measure")fun incWithStack(key: String, tail: Int = 22) {
inc(key); val n = counts[key]!!.get()
if (n % 40L == 0L) Log.i(TAG, "STACK $key :: " + Thread.currentThread().stackTrace
.drop(2).take(tail).joinToString(" < ") { "${it.className.substringAfterLast('.')}.${it.methodName}" })
}看栈里有没有 dispatchSideEffects(SideEffect 报的)/ DisposableEffectImpl.onRemembered
(effect 被 re-remember,key 在变!)/ applyMeasureResult(布局下游,别追)。
Snapshot.registerApplyObserver { changed, _ ->
for (state in changed) {
val k = state::class.java.name + "@" + Integer.toHexString(System.identityHashCode(state))
appliedCounts.computeIfAbsent(k){AtomicLong()}.incrementAndGet()
trackedStates.putIfAbsent(k, state) // dump 时读 .value 看 VALUE= 是谁
}
}输出形如 A#1 x482 ParcelableSnapshotMutableState VALUE=SomeLambda@新地址每帧变。
在首次组合前注册 global write observer 会直接杀死这个环(0 帧 vs 626 帧)——
它改变了全局快照写入的 apply 时机。所以要用 marker 文件轮询(500ms 查
/data/local/tmp/kototoro_layout_trace 存在才注册),把观察者后挂到已运行的环上。
如果挂上后环死了,本身也是一条诊断信息(环依赖全局快照 apply 时序)。
overrideStateEquivalent(a, b) 式比较——
逐类型比较语义字段(选中数、tab 列表、排序、action 的 title/icon),
刻意忽略回调 identity。安全性论证:存的回调一直引用它捕获的 vm/状态;
语义字段一变,门放行新实例(带新回调),接线不会过期。remember(owner) { ... }。FATAL EXCEPTION(门路径空指针类崩溃)。./gradlew :app:testDebugUnitTest --no-daemon 过一遍。git checkout -- 恢复纯探针文件、删未跟踪探针、
手工剔除 fix 文件里的 DevCount 行,commit 只含修复(diff 里 grep DevCount 应为空)。以下已逐一实测或反证排除:系统动画缩放;玻璃/导轨/共享转场、卡片 sharedBounds;
AnimatedFaviconDrawable / AnimatedPlaceholderDrawable;RetainedPagingSnapshotController
(grep 证明根本未组合,"LazyPagingItems 差异"推论作废);withMacroOptionsFirst
(已修缓存但帧数不变);LayerBackdropModifier 几何门控(改了更差,已回退);
主题/窗口/insets/系统栏/Application(IdleProbeActivity 0 帧);外壳/导航/列表屏
(feed 用同一 KototoroContentListScreen 为 0 帧)。
注意:2026-09-26 起 feed 不再是恒 0 对照(见模式 E,已修);对照页改用 IdleProbeActivity。
其他坑:sed 按行号改码极易改出空实验,必须回显补丁内容确认;edit 工具遇 "file changed since read" 就重读再改;先实测再改码——每一条推论都要有 对应的帧数/计数/栈作为证据链。
© Kototoro-app, Apache-2.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/compose-idle-redraw of Kototoro-app/Kototoro.
Open the folder on GitHubat commit 74bd979
Compose Idle Redraw 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 |
|---|---|---|---|---|---|---|
| Compose Idle Redraw this skillKototoro-app/Kototoro | 613 | — | ~1.9k | Automated safety check: Pass | Apache-2.0 | |
| Docker Composesickn33/agentic-awesome-skills | 47k | 1 repos | ~2.2k | Automated safety check: Notes | MIT | |
| Compose Atomslobehub/lobehub | 83k | — | ~2.6k | Automated safety check: Pass | Custom licence | |
| Compose Multiplatform Patternsaffaan-m/ECC | 276k | 2 repos | ~1.8k | Automated safety check: Pass | MIT | |
| Compose Multiplatform Patternsaffaan-m/ECC | 276k | — | ~1.8k | Automated safety check: Pass | MIT | |
| Composing Grid CanvasesPostHog/posthog | 40k | — | ~2.1k | Automated safety check: Pass | Custom licence |
sickn33/agentic-awesome-skills
Define and run multi-container Docker applications using Docker Compose.
lobehub/lobehub
Splits a heavy front-end domain into capability atoms that each host imports separately, sinking state into each atom instead of adding mode or readOnly flags.
affaan-m/ECC
KMP项目中的Compose Multiplatform和Jetpack Compose模式——状态管理、导航、主题化、性能优化和平台特定UI。
affaan-m/ECC
KMPプロジェクト向けのCompose MultiplatformおよびJetpack Composeパターン — 状態管理、ナビゲーション、テーマ設定、パフォーマンス、プラットフォーム固有のUI。
PostHog/posthog
Compose PostHog grid canvases — widget grids (including the user's home canvas) built from reusable component canvases.
androidx/androidx
Build, install, and run the Compose Material Catalog application on connected devices or emulators.
Kototoro-app/Kototoro
Android 架构、依赖注入、数据层、测试规范官方参考。涵盖 UDF/MVI 模式、Hilt/Dagger、Room、Paging、 DataStore、WorkManager、ViewModel、测试策略等。安卓开发第一要义:参考官方文档和案例!
Kototoro-app/Kototoro
Jetpack Compose 官方示例与最佳实践参考。涵盖 Compose UI 实现、动画、手势、导航、Material3 主题、 性能优化、测试等所有方面。安卓开发第一要义:参考官方文档和案例!
Kototoro-app/Kototoro
Android 官方示例代码库完整索引。涵盖架构、Compose UI、性能、测试、存储、网络、相机、媒体、安全等所有领域。
Kototoro-app/Kototoro
Diagnose and fix Kototoro Browse/Explore page content source scrolling jank when many sources exist.
Kototoro-app/Kototoro
Diagnose and fix Kototoro Android issues where returning from reader or video player to details causes flicker, cover reload, panorama reload, progress reset, status bar jump, Compose subtree…
Kototoro-app/Kototoro
Diagnose and fix Kototoro main screen loading flicker, blank flashes, chrome jumps, transient empty states, and route switching flashes.
诊断 Kototoro 主壳"空闲永不定居"式 Compose 自持重绘循环(idle 帧数不为 0). An agent skill from Kototoro-app/Kototoro. Compose Idle Redraw is an agent skill from Kototoro-app/Kototoro.
Run `npx skills add Kototoro-app/Kototoro --skill compose-idle-redraw -a claude-code`. Or copy the skill folder (.claude/skills/compose-idle-redraw in Kototoro-app/Kototoro) into .claude/skills/compose-idle-redraw in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Kototoro-app/Kototoro --skill compose-idle-redraw -a codex`. Or copy the skill folder (.claude/skills/compose-idle-redraw in Kototoro-app/Kototoro) into .agents/skills/compose-idle-redraw 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 Kototoro-app/Kototoro --skill compose-idle-redraw -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/compose-idle-redraw, .gemini/skills/compose-idle-redraw, .github/skills/compose-idle-redraw and .opencode/skills/compose-idle-redraw in your project.
Going by SKILL.md and its folder, Compose Idle Redraw needs the command-line tools its instructions call (adb and git).
SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. 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.
Compose Idle Redraw is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.9k tokens (SKILL.md is roughly 7.5k 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 Compose Idle Redraw: Docker Compose (sickn33/agentic-awesome-skills, 47k stars), Compose Atoms (lobehub/lobehub, 83k stars), Compose Multiplatform Patterns (affaan-m/ECC, 276k stars) and Compose Multiplatform Patterns (affaan-m/ECC, 276k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Kototoro-app (a GitHub organization) maintains it in Kototoro-app/Kototoro, which has 613 GitHub stars. The repository holds 10 skills in this directory. The repository was last updated on October 9, 2026.
Source: Kototoro-app/Kototoro on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.