Project scan & architecture
KrowForge auto-detects what kind of project you're in and surfaces the structure.
What "scan" does
services/repo_scanner.py walks the project once on load (and again on Refresh) to detect:
- Languages — file extension census, weighted.
- Frameworks — Flask, Django, Next.js, React, Vue, Svelte, FastAPI, Rails, Spring, etc. Detected by signature files (
requirements.txt,package.json,pom.xml, etc.). - Entry points —
main.py,app.py,server.js,index.html, etc. - Build system —
make,npm,cargo,maven,gradle. - Test framework —
pytest,jest,mocha,vitest,cargo test,go test. - Dependency groups — production vs dev vs test.
- Sections — heuristic grouping into
frontend/,backend/,infra/,docs/, etc.
The Architecture panel
Right side of the workspace, dedicated tab. Sections:
- Overview — language breakdown, file count, total size.
- Frameworks — detected frameworks with confidence.
- Entry points — clickable links into the editor.
- Build & test — detected commands. "Run tests" / "Build" buttons trigger the shell API.
- Dependencies — top-level deps, grouped, with versions.
- Structure — section grouping.
Project Summary
A condensed view at the top of the Overview tab:
- File count.
- Language breakdown.
- Total size on disk.
- Detected frameworks.
- Build command.
- Test command.
Rescan
The top-bar Refresh button (enabled only when a project is loaded) re-runs the full scan: repo_scanner + symbol_indexer + sec_scanner. Use after large external changes (git pull, file imports, etc.).
POST /api/project/rescan is the underlying endpoint.
When detection is wrong
Heuristics aren't perfect. If KrowForge picks the wrong framework (e.g., calls a Vue project React because of stray imports), drop a .krowforge/project.yaml to override:
framework: vue
test_command: pnpm test
build_command: pnpm build
entry_point: src/main.ts
The override file is read on every scan and takes precedence over heuristics.