English | 한국어
If you find this project useful, please consider giving it a star! Your support means a lot.
AI-powered CLI tool to automatically organize your GitHub Stars into Lists.
- Automatic Category Planning: Gemini AI analyzes your starred repositories and creates 32 optimal categories
- Smart Classification: Analyzes each repository's title, description, and README to place them in appropriate categories
- Hierarchical Naming: Uses
Major: Minorformat likeLang: Python,AI: LLM & Chatbot(20 char limit) - Step-by-Step or Full Automation: Run individual steps or execute the entire workflow at once
- Batch Processing: Parallel processing of 20 repositories at a time for faster classification
Lang: Python Lang: JS & TS Lang: Go Lang: Rust
Lang: Java Lang: C & C++ Lang: ETC
AI: LLM & Chatbot AI: Agent AI: Image & Video AI: RAG & Data
AI: Voice & Audio AI: ETC
Web: Frontend Web: Backend Web: Crawler Web: Mobile App
Web: ETC
Infra: Docker Infra: Security Infra: DB Infra: Data & ML
Infra: ETC
Type: Self-Hosted Type: App & Tool Type: Starter Type: Resource
Type: ETC
npm install -g startidyAfter installation, you can use the startidy command directly:
startidy run# Clone the repository
git clone https://github.com/hellosunghyun/startidy.git
cd startidy
# Install dependencies
npm install
# Build
npm run build
# Link globally
npm linkYou can configure Startidy in three ways:
startidy --token ghp_xxx --username your-name --gemini-key AIza_xxx run# Linux/macOS
export GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx
export GITHUB_USERNAME=your-username
export GEMINI_API_KEY=AIzaxxxxxxxxxxxxxxxxxxxxxxxx
# Windows (PowerShell)
$env:GITHUB_TOKEN="ghp_xxxxxxxxxxxxxxxxxxxx"
$env:GITHUB_USERNAME="your-username"
$env:GEMINI_API_KEY="AIzaxxxxxxxxxxxxxxxxxxxxxxxx"
# Windows (CMD)
set GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx
set GITHUB_USERNAME=your-username
set GEMINI_API_KEY=AIzaxxxxxxxxxxxxxxxxxxxxxxxx
# Then run
startidy runCreate a .env file in your current directory:
GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx
GITHUB_USERNAME=your-username
GEMINI_API_KEY=AIzaxxxxxxxxxxxxxxxxxxxxxxxx| Option | Description |
|---|---|
--token <token> |
GitHub Personal Access Token |
--username <username> |
GitHub Username |
--gemini-key <key> |
Google Gemini API Key |
--max-categories <n> |
Maximum categories (default: 32) |
--batch-size <n> |
Batch size for classification (default: 20) |
--private |
Create private Lists |
--debug |
Enable debug mode |
- Go to GitHub Settings > Developer settings > Personal access tokens
- Click "Generate new token (classic)"
- Select scopes:
repo,read:user - Generate and copy the token
- Go to Google AI Studio
- Click "Create API Key"
- Copy the API key
# Run the full workflow (plan → delete → create → classify)
startidy run
# With inline credentials
startidy --token ghp_xxx --username myname --gemini-key AIza_xxx run
# Process only newly starred repositories (keep existing Lists)
startidy run --only-new
# Simulation mode (preview categories only)
startidy run --dry-run# Analyze Stars and plan categories (saved to file)
startidy plan
# View saved plan
startidy plan --show
# Delete saved plan
startidy plan --delete# View all Lists
startidy lists
# Create a new List
startidy lists --create "Lang: Python" -d "Python projects"
# Delete a specific List
startidy lists --delete "Lang: Python"
# Delete all Lists
startidy lists --delete-all# Create Lists from planned categories
startidy create-lists
# Create Lists even if some already exist
startidy create-lists --force# Classify Stars into Lists
startidy classify
# Process only unclassified Stars
startidy classify --only-new
# Use existing Lists as categories (no plan file needed)
startidy classify --use-existing
# Classify new Stars using existing Lists
startidy classify --use-existing --only-new
# Reset: Remove all Stars from Lists
startidy classify --reset| Command | Option | Description |
|---|---|---|
run |
(none) | Full automation |
run |
--only-new |
Process new Stars only |
run |
--dry-run |
Simulation mode |
plan |
(none) | Plan categories |
plan |
--show |
View saved plan |
plan |
--delete |
Delete saved plan |
lists |
(none) | View all Lists |
lists |
--create <name> |
Create new List |
lists |
--delete <name> |
Delete specific List |
lists |
--delete-all |
Delete all Lists |
lists |
-d, --description |
List description (with --create) |
create-lists |
(none) | Create Lists from plan |
create-lists |
--force |
Create even if Lists exist |
classify |
(none) | Classify Stars |
classify |
--only-new |
Process unclassified only |
classify |
--use-existing |
Use existing Lists as categories |
classify |
--reset |
Remove all Stars from Lists |
# 1. Plan categories
startidy plan
# 2. Review the plan
startidy plan --show
# 3. Delete existing Lists (if needed)
startidy lists --delete-all
# 4. Create Lists
startidy create-lists
# 5. Classify Stars
startidy classify🚀 Starting GitHub Stars auto-organization.
✔ Fetched 523 starred repositories.
✔ 32 categories have been planned.
? Delete existing 32 Lists? Yes
✔ 32 Lists deleted
✔ 32 Lists created
📂 Classifying 523 repositories in batches of 20...
── Batch 1/27 (1-20) ──
✔ README fetched
✔ Classification complete
✅ facebook/react → Web: Frontend
✅ tensorflow/tensorflow → AI: Data & ML
...
📊 Results:
✅ Success: 520
❌ Failed: 3
✅ Done! Stars have been organized into Lists.
startidy/
├── package.json
├── tsconfig.json
├── .env.example
├── README.md
└── src/
├── index.ts # CLI entry point
├── types.ts # Type definitions
├── api/
│ ├── index.ts # API exports
│ ├── client.ts # GitHub API client
│ ├── types.ts # API types
│ ├── lists.ts # Lists CRUD
│ ├── repos.ts # Repository queries
│ └── readme.ts # README fetching
├── commands/
│ ├── lists.ts # lists command
│ ├── plan.ts # plan command
│ ├── create-lists.ts # create-lists command
│ ├── classify.ts # classify command
│ └── run.ts # run command (full automation)
├── services/
│ ├── index.ts # Services exports
│ ├── gemini.ts # Gemini AI service
│ └── classifier.ts # Classification service
├── prompts/
│ ├── category-planner.ts
│ └── classifier.ts
└── utils/
├── config.ts # Environment config
├── rate-limiter.ts # Rate limiting
└── plan-storage.ts # Plan save/load
All available environment variables:
# Required
GITHUB_TOKEN=ghp_xxxxxxxxxxxx # GitHub Personal Access Token
GITHUB_USERNAME=your-username # Your GitHub username
GEMINI_API_KEY=AIzaxxxxxxxxxx # Google Gemini API Key
# Category Settings
MAX_CATEGORIES=32 # Maximum categories (GitHub limit: 32)
MAX_CATEGORIES_PER_REPO=3 # Max categories per repo
MIN_CATEGORIES_PER_REPO=1 # Min categories per repo
# Batch Processing
CLASSIFY_BATCH_SIZE=20 # Repos per batch for classification
BATCH_DELAY=2000 # Delay between batches (ms)
# List Settings
LIST_IS_PRIVATE=false # Create private Lists
# Gemini Settings
GEMINI_MODEL=gemini-2.5-flash # Model to use
GEMINI_RPM=15 # Requests per minute (Free tier)
# Debug
DEBUG=false # Enable debug output
LOG_API_RESPONSES=false # Log raw API responses- Runtime: Node.js / Bun
- Language: TypeScript
- AI: Google Gemini (gemini-2.5-flash)
- CLI: Commander.js, @inquirer/prompts, ora
- GitHub Lists are limited to 32 maximum
- Each List name has a 20 character limit
- Gemini API Free tier: 15 requests per minute
MIT