Framework Migration Assistant
ArabelaTso/Skills-4-SE
Automatically migrate Python web applications between frameworks (Flask → FastAPI, Django → FastAPI).
Diagnose and fix a slow endpoint or request in a Python web app (FastAPI, Flask, Django, Tornado, any ASGI/WSGI framework) using real Profyle/VizTracer traces, then prove the fix by replaying the…
$ npx skills add vpcarlos/profyle --skill fix-slow-endpoint -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install vpcarlos/profyle fix-slow-endpoint --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/vpcarlos/profyle.git skills-src && mkdir -p .claude/skills && cp -r skills-src/profyle/claude .claude/skills/fix-slow-endpoint && 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 "fix-slow-endpoint" agent skill from https://github.com/vpcarlos/profyle/tree/main/profyle/claude into .claude/skills/fix-slow-endpoint/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "fix-slow-endpoint", 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/vpcarlos/profyle/tree/main/profyle/claudeType 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 vpcarlos/profyle --skill fix-slow-endpoint -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install vpcarlos/profyle fix-slow-endpoint --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/vpcarlos/profyle.git skills-src && mkdir -p .agents/skills && cp -r skills-src/profyle/claude .agents/skills/fix-slow-endpoint && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "fix-slow-endpoint" agent skill from https://github.com/vpcarlos/profyle/tree/main/profyle/claude into .agents/skills/fix-slow-endpoint/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "fix-slow-endpoint", 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 vpcarlos/profyle --skill fix-slow-endpoint -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install vpcarlos/profyle fix-slow-endpoint --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/vpcarlos/profyle.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/profyle/claude .cursor/skills/fix-slow-endpoint && 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 "fix-slow-endpoint" agent skill from https://github.com/vpcarlos/profyle/tree/main/profyle/claude into .cursor/skills/fix-slow-endpoint/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "fix-slow-endpoint", 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/vpcarlos/profyle.git --path profyle/claude--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 vpcarlos/profyle --skill fix-slow-endpoint -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install vpcarlos/profyle fix-slow-endpoint --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/vpcarlos/profyle.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/profyle/claude .gemini/skills/fix-slow-endpoint && 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 "fix-slow-endpoint" agent skill from https://github.com/vpcarlos/profyle/tree/main/profyle/claude into .gemini/skills/fix-slow-endpoint/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "fix-slow-endpoint", 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 vpcarlos/profyle fix-slow-endpointInstalls 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 vpcarlos/profyle --skill fix-slow-endpoint -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/vpcarlos/profyle.git skills-src && mkdir -p .github/skills && cp -r skills-src/profyle/claude .github/skills/fix-slow-endpoint && 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 "fix-slow-endpoint" agent skill from https://github.com/vpcarlos/profyle/tree/main/profyle/claude into .github/skills/fix-slow-endpoint/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "fix-slow-endpoint", 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 vpcarlos/profyle --skill fix-slow-endpoint -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install vpcarlos/profyle fix-slow-endpoint --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/vpcarlos/profyle.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/profyle/claude .opencode/skills/fix-slow-endpoint && 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 "fix-slow-endpoint" agent skill from https://github.com/vpcarlos/profyle/tree/main/profyle/claude into .opencode/skills/fix-slow-endpoint/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "fix-slow-endpoint", 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.
fix-slow-endpointDiagnose and fix a slow endpoint or request in a Python web app (FastAPI, Flask, Django, Tornado, any ASGI/WSGI framework) using real Profyle/VizTracer traces, then prove the fix by replaying the…
Fix Slow Endpoint is an agent skill from vpcarlos/profyle. Diagnose and fix a slow endpoint or request in a Python web app (FastAPI, Flask, Django, Tornado, any ASGI/WSGI framework) using real Profyle/VizTracer traces, then prove the fix by replaying the request and comparing traces. Use when the user says an endpoint, API call, page or request is slow, has high latency, times out, or asks where a bottleneck is.
Its SKILL.md is about 2.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file (for example `__init__.py`).
It sits in Backend & APIs, covering Backend development. It works with Python, Flask, FastAPI and Django. The repository describes itself as: Development tool for analysing and managing python traces. The licence is MIT.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 60af2de. 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.
Ships script files (Python), which the agent can run.
Shell commands in SKILL.md call:
pipuvuvicornpythonFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use pip and uv, 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.
Fix Slow Endpoint loads about 2.1k tokens when it runs. Until then it costs about 94 tokens; SKILL.md has 1,172 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 vpcarlos/profyle at commit 60af2de, republished under its MIT licence (© vpcarlos). 1,172 words, ~2,076 tokens.
.claude/skills/fix-slow-endpoint/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Work from measurements, not intuition: every claim you make about where time goes must come from a trace, and every fix must be verified with a new trace of the same request.
The profyle MCP server provides: doctor, slowest_endpoints, list_traces,
analyze_trace, get_call_details, get_function_source, replay_request,
compare_traces. All durations are in milliseconds.
Call doctor first. It reports which trace database is read, whether traces exist,
which app wrote them and how (profyle run or middleware), and whether the app is
running. If everything is ✓, go to step 1.
If there are no traces or the app is not running, get the app running under Profyle without editing the user's code:
pip install profyle, uv add --dev profyle, ...). Ask before
installing anything.pyproject.toml
scripts, Procfile, docker-compose, manage.py, or an app object such as
main:app. Prefer the command with auto-reload: uvicorn main:app --reload,
flask --app app run --debug, python manage.py runserver.profyle run, for example
profyle run uvicorn main:app --reload, and ask the user to confirm it (and the port).
profyle run adds tracing to FastAPI, Starlette, Flask, Django, Tornado (also under
gunicorn's tornado worker) and any ASGI app served by uvicorn. If the app already uses ProfyleMiddleware, run the command as is.profyle ▸ tracing requests ... at start-up, then one line per request with
the trace id and its main finding (profyle ▸ GET /orders 245 ms · #12 · repeated: list_orders → get_customer ×100 (83%)). Read those lines: they confirm tracing works.curl if it is a GET that needs no login, otherwise
ask the user to do it in the app. Then call doctor again.If the app runs where you cannot start it (a container, a remote machine), explain the
setup to the user instead: profyle run <their command>, or ProfyleMiddleware from
profyle.asgi / profyle.wsgi (or "profyle.django.ProfyleMiddleware" in
MIDDLEWARE), with the traces database shared with this project
(<project>/.profyle/profile.db, or PROFYLE_DB).
list_traces(name_contains=...). Otherwise call
slowest_endpoints and confirm with the user which one to work on.repeated: a → b ×100 (83%)).
It is a starting point, not the diagnosis: confirm it with analyze_trace. A first,
much slower trace usually shows warm-up (imports, regex compiling) instead.replay_request(trace_id, times=3) before changing anything.
This gives warm traces and a median baseline, and confirms that replay works (the app is
reachable and credentials are not missing). If the app is not reachable, start it as
in step 0.allow_unsafe_method=true.headers. Never
print credentials back.Call analyze_trace on a representative warm trace and read it in this order:
parent → callee ×N together with
different sample arguments (id=1 | id=2 | id=3) is the signature of an N+1.Then drill down:
get_call_details(trace_id, function) shows the callers, callees and slowest
invocations with arguments and return values.get_function_source shows
the code as it was when the trace was recorded; the repository is the source of truth.Typical root causes and fixes:
| Signal in the trace | Likely cause | Fix |
|---|---|---|
| Same query or fetch ×N with different ids | N+1 | One batched query (IN, join), ORM selectinload/joinedload, select_related/prefetch_related, or a dataloader |
time.sleep, requests, or a sync DB driver inside an async def | Blocking the event loop | Use an async client, or make the endpoint def / use run_in_threadpool |
| Several independent HTTP or DB calls in sequence | Sequential I/O | Run them concurrently (asyncio.gather), reuse a client/session for connection pooling |
| Same function with the same arguments and the same result many times | Redundant work | Hoist it out of the loop, memoize, or cache per request |
| Connection or client created on every request | Missing pooling | Create it once at startup and reuse it |
Large time in serialization (jsonable_encoder, pydantic validation) | Payload too big | Paginate, select fewer fields, return a response_model tailored to the endpoint |
| Pure-Python loop with a huge call count | CPU hot loop | Better algorithm or data structure, builtins, or vectorization |
Caveat: tracing adds about 1µs per function call, so functions with very large call counts look slower than they are untraced. Waits (sleep, network, DB) are measured accurately.
Before you edit anything, tell the user the root cause in two or three sentences, with
the evidence: ms, % of the request, call counts and file:line.
replay_request(baseline_trace_id, times=3). Read two columns before the timings:identical is the goal. same structure, values differ is fine when the
replay notes that values already vary between runs (timestamps, ids). DIFFERENT
means the endpoint now returns other data: fix that before claiming any speed-up.
If the baseline trace has no recorded body (Flask), compare against the first
baseline replay instead.compare_traces(baseline_id, new_id). Its response_body and status fields
must hold. Then confirm that the bottleneck went away (for example, the N+1 callee drops
from ×100 calls to ×1). Use analyze_trace on the new trace to see what dominates now.Finish with a short summary:
file:line.© vpcarlos, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file in profyle/claude of vpcarlos/profyle.
Open the folder on GitHubat commit 60af2de
Fix Slow Endpoint 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 |
|---|---|---|---|---|---|---|
| Fix Slow Endpoint this skillvpcarlos/profyle | 123 | — | ~2.1k | Automated safety check: Pass | MIT | |
| Framework Migration AssistantArabelaTso/Skills-4-SE | 253 | — | ~1.9k | Automated safety check: Pass | Apache-2.0 | |
| Sentry Python SDKgetsentry/sentry-for-ai | 268 | — | ~4.1k | Automated safety check: Pass | Apache-2.0 | |
| Python Appservice Deploymicrosoft/GitHub-Copilot-for-Azure | 255 | 1 repos | ~688 | Automated safety check: Pass | MIT | |
| Python Devdoccker/cc-use-exp | 1.1k | — | ~790 | Automated safety check: Pass | Custom licence | |
| Fastapi Templatesjh941213/my-cc-harness | 126 | — | ~945 | Automated safety check: Pass | None |
ArabelaTso/Skills-4-SE
Automatically migrate Python web applications between frameworks (Flask → FastAPI, Django → FastAPI).
getsentry/sentry-for-ai
Full Sentry SDK setup for Python. An agent skill from getsentry/sentry-for-ai.
microsoft/GitHub-Copilot-for-Azure
Deploy Python (Flask/Django/FastAPI) code to Azure App Service Linux.
doccker/cc-use-exp
Python 开发规范。当用户操作 .py、pyproject.toml、requirements.txt、setup.py 文件, 或涉及 FastAPI、Django、Flask、pytest、asyncio 开发时触发。
jh941213/my-cc-harness
Production-grade FastAPI project creation and setup guide. An agent skill from jh941213/my-cc-harness.
aiskillstore/marketplace
Run defensive pre-release security tests for Python web applications.
Categories
Diagnose and fix a slow endpoint or request in a Python web app (FastAPI, Flask, Django, Tornado, any ASGI/WSGI framework) using real Profyle/VizTracer traces, then prove the fix by replaying the…. Fix Slow Endpoint is an agent skill from vpcarlos/profyle. Diagnose and fix a slow endpoint or request in a Python web app (FastAPI, Flask, Django, Tornado, any ASGI/WSGI framework) using real Profyle/VizTracer traces, then prove the fix by replaying the request and comparing traces.
Fix Slow Endpoint fits situations like: the user says an endpoint; request is slow; has high latency; asks where a bottleneck is.
Run `npx skills add vpcarlos/profyle --skill fix-slow-endpoint -a claude-code`. Or copy the skill folder (profyle/claude in vpcarlos/profyle) into .claude/skills/fix-slow-endpoint in your project. Claude Code loads it when a task matches its description.
Run `npx skills add vpcarlos/profyle --skill fix-slow-endpoint -a codex`. Or copy the skill folder (profyle/claude in vpcarlos/profyle) into .agents/skills/fix-slow-endpoint 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 vpcarlos/profyle --skill fix-slow-endpoint -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/fix-slow-endpoint, .gemini/skills/fix-slow-endpoint, .github/skills/fix-slow-endpoint and .opencode/skills/fix-slow-endpoint in your project.
Going by SKILL.md and its folder, Fix Slow Endpoint needs Python for the scripts in its folder and the command-line tools its instructions call (pip, uv, uvicorn and python). Our summary lists: Python 3; Docker.
SKILL.md contains no URLs. Its commands use pip and uv, 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.
Fix Slow Endpoint is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.1k tokens (SKILL.md is roughly 8.3k 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 Fix Slow Endpoint: Framework Migration Assistant (ArabelaTso/Skills-4-SE, 253 stars), Sentry Python SDK (getsentry/sentry-for-ai, 268 stars), Python Appservice Deploy (microsoft/GitHub-Copilot-for-Azure, 255 stars) and Python Dev (doccker/cc-use-exp, 1.1k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
vpcarlos (a GitHub user) maintains it in vpcarlos/profyle, which has 123 GitHub stars. The repository was last updated on October 5, 2026.
Source: vpcarlos/profyle on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.