Library Management
User library, favorites, and reading progress
Best use case
Library Management is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
User library, favorites, and reading progress
Teams using Library Management should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/library-management/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How Library Management Compares
| Feature / Agent | Library Management | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
User library, favorites, and reading progress
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Library Management
## Library Context
```typescript
import { useLibrary } from '../context/LibraryContext';
const {
// State
library, // Manga[] - all saved manga
favorites, // string[] - favorite manga IDs
readingProgress, // { [mangaId]: { chapterId, page } }
history, // HistoryItem[] - reading history
// Actions
addToLibrary, // (manga: Manga) => void
removeFromLibrary, // (mangaId: string) => void
isInLibrary, // (mangaId: string) => boolean
toggleFavorite, // (mangaId: string) => void
isFavorite, // (mangaId: string) => boolean
updateProgress, // (mangaId, chapterId, page) => void
addToHistory, // (manga, chapter) => void
} = useLibrary();
```
## Add to Library
```typescript
function MangaDetailScreen() {
const { addToLibrary, removeFromLibrary, isInLibrary } = useLibrary();
const inLibrary = isInLibrary(manga.id);
const handleLibraryToggle = () => {
if (inLibrary) {
removeFromLibrary(manga.id);
} else {
addToLibrary(manga);
}
};
return (
<Button
title={inLibrary ? 'Remove from Library' : 'Add to Library'}
onPress={handleLibraryToggle}
/>
);
}
```
## Favorites
```typescript
function LibraryScreen() {
const { library, favorites, toggleFavorite } = useLibrary();
// Filter favorites
const favoritesList = library.filter(m => favorites.includes(m.id));
return (
<FlatList
data={library}
renderItem={({ item }) => (
<MangaCard
manga={item}
isFavorite={favorites.includes(item.id)}
onFavoritePress={() => toggleFavorite(item.id)}
/>
)}
/>
);
}
```
## Reading Progress
```typescript
function ReaderScreen() {
const { updateProgress, readingProgress } = useLibrary();
const { manga, chapter } = useRoute().params;
// Get saved progress
const savedProgress = readingProgress[manga.id];
const startPage = savedProgress?.chapterId === chapter.id
? savedProgress.page
: 0;
// Save on page change
const handlePageChange = (page: number) => {
updateProgress(manga.id, chapter.id, page);
};
return <Reader startPage={startPage} onPageChange={handlePageChange} />;
}
```
## Reading History
```typescript
// Add to history when opening a chapter
const handleOpenChapter = (chapter: Chapter) => {
addToHistory(manga, chapter);
navigation.navigate('Reader', { manga, chapter, sourceId });
};
// Display history
function HistoryScreen() {
const { history } = useLibrary();
return (
<FlatList
data={history}
keyExtractor={(item) => `${item.mangaId}-${item.chapterId}`}
renderItem={({ item }) => (
<HistoryItem
manga={item.manga}
chapter={item.chapter}
timestamp={item.timestamp}
/>
)}
/>
);
}
```
## Data Types
```typescript
interface LibraryManga extends Manga {
addedAt: Date;
sourceId: string;
}
interface ReadingProgress {
[mangaId: string]: {
chapterId: string;
page: number;
updatedAt: Date;
};
}
interface HistoryItem {
mangaId: string;
manga: Manga;
chapterId: string;
chapter: Chapter;
timestamp: Date;
sourceId: string;
}
```
## Storage
```typescript
// AsyncStorage keys
const LIBRARY_KEY = '@library';
const FAVORITES_KEY = '@favorites';
const PROGRESS_KEY = '@reading_progress';
const HISTORY_KEY = '@history';
// Save library
await AsyncStorage.setItem(LIBRARY_KEY, JSON.stringify(library));
// Load library
const json = await AsyncStorage.getItem(LIBRARY_KEY);
const library = json ? JSON.parse(json) : [];
```
## Library Filters
```typescript
type LibraryFilter = 'all' | 'favorites' | 'reading' | 'completed';
function filterLibrary(library: Manga[], filter: LibraryFilter) {
switch (filter) {
case 'favorites':
return library.filter(m => favorites.includes(m.id));
case 'reading':
return library.filter(m => readingProgress[m.id]);
case 'completed':
return library.filter(m => m.status === 'completed');
default:
return library;
}
}
```Related Skills
library-writer
This skill should be used when writing software libraries, packages, or modules following battle-tested patterns for clean, minimal, production-ready code. It applies when creating new libraries, refactoring existing ones, designing library APIs, or when clean, dependency-minimal library code is needed. Triggers on requests like "create a library", "write a package", "design a module API", or mentions of professional library development.
library-doc
Index and search library documentation locally for offline use. Invoke when user asks to index docs, search library topics, or list indexed libraries.
lang-elm-library-dev
Elm-specific library/package development patterns. Use when creating Elm packages, designing pure functional APIs, configuring elm.json for libraries, writing documentation comments, publishing to package.elm-lang.org, or managing semantic versioning in pure functional context. Extends meta-library-dev with Elm tooling and ecosystem patterns.
heir-sync-management
Master-Heir synchronization, contamination prevention, and promotion workflows
file-management-rules
Specifies file management guidelines, including including full file paths as comments, updating project structure in AI.MD, and maintaining package.json. This rule ensures organized and well-documente
database-management
Database schema design, migrations, query optimization, and ORM best practices. Use for database setup, performance tuning, and data modeling.
coffee-staff-management
Coffee Staff Management - Admin Dashboard for a coffee shop. Focus: Backend (.NET, EF Core, MediatR), Frontend (React/TypeScript, Vite), PostgreSQL schema (csm_db).
cl-library-craft
Analyze and generate idiomatic Common Lisp libraries following patterns from Edi Weitz, Marijn Haverbeke, and Eitaro Fukamachi
Bankr x402 SDK - Job Management
This skill should be used when the user asks about "job status", "check if request completed", "cancel request", "why is my request taking so long", "poll for result", "batch requests", "retry failed request", "request timeout", "async operations", "job lifecycle", "manual polling", or needs advanced control over SDK async operations, manual job polling, batch processing, retry logic, or job cancellation.
ash-library-hotfix
Handles emergency hotfix process for critical bugs in ash_cookie_consent library including branch creation, minimal fixes, testing, and rapid release. Use when user asks to "create hotfix", "emergency fix", "patch critical bug", or "hotfix for version".
angular-state-management
Master modern Angular state management with Signals, NgRx, and RxJS. Use when setting up global state, managing component stores, choosing between state solutions, or migrating from legacy patterns.
Analyzing AgentScope Library
This skill provides a way to retrieve information from the AgentScope library for analysis and decision-making.