AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Python Fastapi Todo App

skill-andersonamaral2-claude-code-to-deep-agents-skills-converter-deep-agents-output · by andersonamaral2

Creates a simple Todo API with FastAPI, SQLite, and basic CRUD operations.

No reviews yet
0 installs
3 views
0.0% view→install

Install

$ agentstack add skill-andersonamaral2-claude-code-to-deep-agents-skills-converter-deep-agents-output

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access Used
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets Used
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-andersonamaral2-claude-code-to-deep-agents-skills-converter-deep-agents-output)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
1mo ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Python Fastapi Todo App? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Python FastAPI Todo App

Creates a simple Todo API with FastAPI, SQLite, and basic CRUD operations.

Execution Context

This skill runs inside Deep Agents CLI (v0.0.34+). Available tools:

| Tool | Usage in this skill | |------|---------------------| | write_file | Create project files (database.py, models.py, main.py, .env, .gitignore) | | execute | Run shell commands (install deps, start server, run tests) | | read_file | Read created files to verify content | | write_todos | Track execution plan progress | | http_request | Test API endpoints after server starts |

Critical execution rules:

  1. Always start by creating the plan via write_todos.
  2. Create files one by one via write_file — never try to generate everything at once.
  3. Test each module via execute immediately after creating it.
  4. Use task to delegate long or parallel subtasks to sub-agents.

Execution Plan (use with write_todos)

When receiving the request, run write_todos with:

  • [ ] 1. Verify Python 3.11+ is installed
  • [ ] 2. Create project directory and virtual environment
  • [ ] 3. Install dependencies (fastapi, uvicorn, sqlalchemy)
  • [ ] 4. Create database module (app/database.py)
  • [ ] 5. Create models module (app/models.py)
  • [ ] 6. Create FastAPI application (app/main.py)
  • [ ] 7. Create .env and .gitignore files
  • [ ] 8. Start server and test all CRUD endpoints
  • [ ] 9. Run smoke tests for all endpoints

When to Use

Use this skill when the user asks to:

  • Create a todo app
  • Build a task manager API
  • Create a simple REST API with Python and FastAPI

Prerequisites Check

Before creating any files, use execute to verify:

# Check Python version
python3 --version || { echo "ERROR: Python 3 not found"; exit 1; }

# Verify Python 3.11+
PYTHON_VERSION=$(python3 -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')")
echo "Python version: $PYTHON_VERSION"

# Check pip is available
python3 -m pip --version || { echo "ERROR: pip not found"; exit 1; }

If Python is not installed, use execute to install:

# On macOS:
brew install python@3.11

# On Linux:
sudo apt-get update && sudo apt-get install -y python3.11 python3.11-venv

Steps

1. Setup Environment

Use execute to create the project directory and virtual environment:

mkdir -p todo-api/app
cd todo-api
python3 -m venv venv
source venv/bin/activate

Use execute to install dependencies:

cd todo-api && source venv/bin/activate
pip install fastapi uvicorn sqlalchemy

Test via execute:

cd todo-api && source venv/bin/activate
python3 -c "import fastapi; import uvicorn; import sqlalchemy; print('All dependencies OK')"

2. Create Database Module

Use write_file to create todo-api/app/__init__.py:

Use write_file to create todo-api/app/database.py:

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

DATABASE_URL = "sqlite:///./todos.db"

engine = create_engine(DATABASE_URL, connect_args={"check_same_thread": False})
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()

Test via execute:

cd todo-api && source venv/bin/activate
python3 -c "from app.database import engine, SessionLocal, Base; print('database module OK')"

3. Create Models

Use write_file to create todo-api/app/models.py:

from sqlalchemy import Column, Integer, String, Boolean
from .database import Base

class Todo(Base):
    __tablename__ = "todos"

    id = Column(Integer, primary_key=True, index=True)
    title = Column(String, index=True)
    description = Column(String, default="")
    completed = Column(Boolean, default=False)

Test via execute:

cd todo-api && source venv/bin/activate
python3 -c "from app.models import Todo; print(f'Model OK: {Todo.__tablename__}')"

4. Create FastAPI Application

Use write_file to create todo-api/app/main.py:

import os
from fastapi import FastAPI, HTTPException, Depends
from sqlalchemy.orm import Session
from typing import List
from pydantic import BaseModel

from .database import SessionLocal, engine
from .models import Todo as TodoModel, Base

Base.metadata.create_all(bind=engine)

app = FastAPI()

# Dependency
def get_db():
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()

class TodoCreate(BaseModel):
    title: str
    description: str = ""
    completed: bool = False

class TodoUpdate(BaseModel):
    title: str = None
    description: str = None
    completed: bool = None

class TodoResponse(BaseModel):
    id: int
    title: str
    description: str
    completed: bool

    class Config:
        from_attributes = True

@app.get("/todos", response_model=List[TodoResponse])
def list_todos(db: Session = Depends(get_db)):
    return db.query(TodoModel).all()

@app.post("/todos", response_model=TodoResponse)
def create_todo(todo: TodoCreate, db: Session = Depends(get_db)):
    db_todo = TodoModel(**todo.model_dump())
    db.add(db_todo)
    db.commit()
    db.refresh(db_todo)
    return db_todo

@app.put("/todos/{todo_id}", response_model=TodoResponse)
def update_todo(todo_id: int, todo: TodoUpdate, db: Session = Depends(get_db)):
    db_todo = db.query(TodoModel).filter(TodoModel.id == todo_id).first()
    if not db_todo:
        raise HTTPException(status_code=404, detail="Todo not found")
    
    update_data = todo.model_dump(exclude_unset=True)
    for key, value in update_data.items():
        setattr(db_todo, key, value)
    
    db.commit()
    db.refresh(db_todo)
    return db_todo

@app.delete("/todos/{todo_id}")
def delete_todo(todo_id: int, db: Session = Depends(get_db)):
    db_todo = db.query(TodoModel).filter(TodoModel.id == todo_id).first()
    if not db_todo:
        raise HTTPException(status_code=404, detail="Todo not found")
    
    db.delete(db_todo)
    db.commit()
    return {"message": "Todo deleted successfully"}

if __name__ == "__main__":
    import uvicorn
    host = os.getenv("API_HOST", "0.0.0.0")
    port = int(os.getenv("API_PORT", 8000))
    uvicorn.run(app, host=host, port=port)

Test via execute:

cd todo-api && source venv/bin/activate
python3 -c "from app.main import app; print(f'FastAPI app OK: {len(app.routes)} routes')"

5. Environment Setup

Before execution, verify required environment variables via execute:

# Check optional variables (with defaults)
echo "API_HOST=${API_HOST:-0.0.0.0} (default: 0.0.0.0)"
echo "API_PORT=${API_PORT:-8000} (default: 8000)"

Use write_file to create todo-api/.env:

API_HOST=0.0.0.0
API_PORT=8000

Use write_file to create todo-api/.gitignore:

venv/
__pycache__/
*.pyc
*.db
.env

6. Add Project Notes

Use write_file to create todo-api/AGENTS.md:

# Todo API — Project Notes

- Framework: FastAPI with SQLAlchemy ORM
- Database: SQLite (file: todos.db)
- No authentication required
- Environment: API_HOST, API_PORT configurable via .env
- Endpoints: GET/POST /todos, PUT/DELETE /todos/{id}

7. Test the API

Use execute to start the server in the background:

cd todo-api && source venv/bin/activate
nohup python3 -m app.main > server.log 2>&1 &
echo $! > server.pid
sleep 2
echo "Server PID: $(cat server.pid)"

Use execute to run smoke tests on all endpoints:

echo "=== Testing GET /todos ==="
curl -s -o /dev/null -w "%{http_code}" http://localhost:8000/todos
echo ""

echo "=== Testing POST /todos ==="
curl -s -o /dev/null -w "%{http_code}" -X POST http://localhost:8000/todos \
  -H "Content-Type: application/json" \
  -d '{"title": "Buy milk", "completed": false}'
echo ""

echo "=== Testing PUT /todos/1 ==="
curl -s -o /dev/null -w "%{http_code}" -X PUT http://localhost:8000/todos/1 \
  -H "Content-Type: application/json" \
  -d '{"completed": true}'
echo ""

echo "=== Testing DELETE /todos/1 ==="
curl -s -o /dev/null -w "%{http_code}" -X DELETE http://localhost:8000/todos/1
echo ""

echo "=== All smoke tests complete ==="

Use execute to stop the test server:

cd todo-api && kill $(cat server.pid) 2>/dev/null; rm -f server.pid

Notes

  • Keep it simple, no authentication required
  • Uses SQLite to avoid external database dependencies
  • Follows FastAPI best practices with Pydantic models
  • Supports configuration via environment variables

Usage with Deep Agents CLI

Mode 1 — Build (one-shot)

deepagents -y "Create a Python FastAPI Todo App following the python-fastapi-todo-app skill"

Mode 2 — Interactive

deepagents
> Create a todo API with FastAPI and SQLite

Mode 3 — Non-interactive (CI/CD)

deepagents -n -y -S "pip,python3,curl,mkdir" "Create a FastAPI todo app with CRUD endpoints"

Troubleshooting

Python not found

# Check:
python3 --version
# Install (macOS):
brew install python@3.11
# Install (Linux):
sudo apt-get install python3.11

pip install fails

# Ensure venv is activated:
source venv/bin/activate
# Upgrade pip:
python3 -m pip install --upgrade pip
# Retry:
pip install fastapi uvicorn sqlalchemy

Environment variable not set

# Check what's set:
env | grep API_
# Set manually:
export API_HOST="0.0.0.0"
export API_PORT=8000
# Or load from .env:
set -a && source .env && set +a

Server won't start

# Check if port is in use:
lsof -i :8000
# Check server logs:
cat server.log
# Try a different port:
export API_PORT=8001

Context window overflow

Use /compact to force compaction before continuing.
Consider splitting the task with `task` sub-agents.

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.