learn-project
Skill8 starsChanged 7 months agoMITView on GitHub
Scan project code to detect patterns, dependencies, and conventions. Propose domain rules based on what the code actually does.
- Reads credentials
3 other projects use a version of this.
Adopted by
Most recently taken up by
- IsmailAzzouz/Work-With-Me-Skilltheir own version, first seen Oct 17, 2026
- allroad88888888/learn-projecttheir own version, first seen Aug 19, 2026
- Fozikio/cortex-enginetheir own version, first seen Mar 16, 2026
Other versions3 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 3
- Fozikio/cortex-engine★ 51same name
- allroad88888888/learn-project★ 0same name
- IsmailAzzouz/Work-With-Me-Skill★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository20 other files it gives its agents.
- .claude/rules/agents.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- audit-projectSkill
- bootstrap-projectSkill
- capture-practiceSkill
- diff-projectSkill
- domain-extractSkill
- export-configSkill
- forge-behaviorSkill
- init-projectSkill
- mcp-addSkill
- plugin-generatorSkill
- reset-projectSkill
- rule-effectivenessSkill
- scout-reposSkill
- session-insightsSkill
- sync-all-reposSkill
- sync-templateSkill
- update-practicesSkill
- watch-upstreamSkill
The file
We split this skill into the rules it gives an agent
7 rules. 0 are common, 5 are distinctive, and 2 are very specific to this project.
0
Common
Most of the 3 edited versions we read keep these.
5
Distinctive
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 13
Read whichever exist (skip missing):
- Very specific: line 118
If any match found, this project needs the vps-ssh stack.
- Distinctive: line 157
Wait for user approval on each before creating files.
- Very specific: line 197
Does not read dotforge memory, errors, or agent memory (use /forge domain extract for that)
- Distinctive: line 198
Does not modify existing rules (only creates new ones in domain/)
- Distinctive: line 199
Does not run any code or install dependencies
- Distinctive: line 200
Does not guess — only reports patterns with direct evidence in the codebase
“Common” is measured: kept by at least 6 in 10 of the 3 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Learn Project
Scan the current project's source code to detect patterns, classify tooling, and propose domain rules. Unlike /forge domain extract (which reads dotforge's internal memory), this skill reads the CODE directly.
Step 1: Detect dependency files
Read whichever exist (skip missing):
package.json— extractdependencies+devDependencieskeyspyproject.toml— extract[project.dependencies]and[tool.*]sectionsrequirements.txt— read all linesgo.mod— extractrequireblockPodfile— read all linesGemfile— read all linespom.xml/build.gradle/build.gradle.kts— extract dependency declarations
Collect a flat list of dependency names.
Step 2: Scan imports
Find the top 20 most-imported libraries across the codebase:
# Python
grep -rh "^import \|^from " --include="*.py" . 2>/dev/null | sed 's/import //;s/from //;s/ .*//' | sort | uniq -c | sort -rn | head -20
# TypeScript/JavaScript
grep -rh "from ['\"]" --include="*.ts" --include="*.tsx" --include="*.js" --include="*.jsx" . 2>/dev/null | sed "s/.*from ['\"]//;s/['\"].*//" | grep -v '^\.' | sort | uniq -c | sort -rn | head -20
# Go
grep -rh "\"" --include="*.go" . 2>/dev/null | grep -E '^\s+"' | sed 's/.*"//;s/".*//' | sort | uniq -c | sort -rn | head -20
# Swift
grep -rh "^import " --include="*.swift" . 2>/dev/null | sed 's/import //' | sort | uniq -c | sort -rn | head -20Step 3: Scan project structure
# Directory structure (2 levels deep, ignore hidden/vendor)
find . -maxdepth 2 -type d ! -path '*/\.*' ! -path '*/node_modules*' ! -path '*/.venv*' ! -path '*/vendor*' ! -path '*/__pycache__*' | sort
# Config files present
ls -1 .eslintrc* .prettierrc* ruff.toml pyproject.toml tsconfig.json biome.json jest.config* vitest.config* vite.config* webpack.config* Makefile Dockerfile docker-compose* .env.example 2>/dev/nullStep 4: Classify patterns
From Steps 1-3, classify into categories. Only report categories with HIGH CONFIDENCE (direct evidence in code):
ORM/Database:
- SQLAlchemy (import sqlalchemy, from sqlalchemy)
- Prisma (@prisma/client)
- TypeORM (import { Entity } from "typeorm")
- GORM (gorm.io/gorm)
- Supabase (@supabase/supabase-js, supabase-py)
- Raw SQL (psycopg2, pg, mysql2)
Auth:
- JWT (python-jose, jsonwebtoken, @auth/core)
- OAuth (authlib, passport, next-auth)
- Session-based (express-session, flask-session)
- Supabase Auth (@supabase/auth-helpers)
Test framework:
- pytest, vitest, jest, mocha, go test, XCTest
- Detect test directory: tests/, tests/, spec/, test/
Build system:
- Vite, webpack, esbuild, rollup, turbopack
- setuptools, poetry, hatch
- Make (Makefile targets)
API framework:
- FastAPI, Express, Koa, Fastify, Gin, Echo, Fiber
- REST vs GraphQL (detect graphql imports/schema files)
State management:
- Zustand, Redux, MobX, Recoil, Jotai
- SwiftUI @Observable, @State, @Binding
Deployment:
- Docker (Dockerfile, docker-compose)
- Serverless (serverless.yml, sam template)
- Cloud Run (app.yaml, cloudbuild.yaml)
- Vercel (vercel.json)
- VPS/SSH (grep shell scripts and CI for
ssh/scp/rsynctargeting a host — see Step 4b)
Step 4b: Scan for remote-host usage (SSH/VPS)
Extract remote-host deployment info from shell scripts, Makefiles, and CI:
# Find ssh/scp/rsync invocations in project scripts and CI
grep -rEn "(^|[^a-z])(ssh|scp|rsync) [^|&;]*(@|--[a-z-]+=)" \
--include="*.sh" --include="Makefile" --include="*.mk" \
--include="*.yml" --include="*.yaml" --include="*.toml" \
. 2>/dev/null | head -30
# Also check ~/.ssh/config for host aliases that might match the project
test -f ~/.ssh/config && awk '/^Host /{h=$2} /HostName/{print h" -> "$2}' ~/.ssh/config 2>/dev/nullFrom the matches, extract:
- Host (alias from
~/.ssh/configor rawuser@host) - User (before
@) - IdentityFile (from
~/.ssh/configor-iflag in the command) - Remote path (argument after
:in scp/rsync, or inside quoted remote command) - Command pattern (what
ssh host '...'runs — deploy, restart, health check, log tail)
If any match found, this project needs the vps-ssh stack. Flag it in the proposal and generate .claude/rules/domain/infra.md with the extracted fields. NEVER paste private key content into the rule — only reference the IdentityFile path.
Naming conventions:
# Function naming: snake_case vs camelCase
grep -rh "def [a-z]" --include="*.py" . 2>/dev/null | head -5 # snake_case
grep -rh "function [a-z]" --include="*.ts" --include="*.js" . 2>/dev/null | head -5 # camelCaseStep 5: Present proposals
Show detected patterns grouped by category. For each, propose a domain rule:
═══ /forge learn — [project-name] ═══
Detected patterns (high confidence only):
1. ORM: SQLAlchemy 2.x (async sessions detected in 8 files)
Proposed rule: .claude/rules/domain/orm-patterns.md
Content: async session lifecycle, model conventions, migration patterns
→ Create? [approve/skip/edit]
2. Auth: Supabase Auth (auth-helpers in 4 files)
Proposed rule: .claude/rules/domain/auth-flow.md
Content: session management, RLS policies, token refresh
→ Create? [approve/skip/edit]
3. Testing: vitest (vitest.config.ts found, 23 test files)
Proposed rule: .claude/rules/domain/testing.md
Content: test patterns, mock conventions, coverage targets
→ Create? [approve/skip/edit]
4. Naming: snake_case (Python), camelCase (TypeScript)
Proposed rule: .claude/rules/domain/naming.md
Content: per-language conventions detected
→ Create? [approve/skip/edit]Wait for user approval on each before creating files.
Step 6: Generate approved rules
For each approved proposal, create a rule file in .claude/rules/domain/:
---
globs: "<relevant file patterns>"
description: "<what this rule covers>"
domain: "<project-name>"
last_verified: "<today YYYY-MM-DD>"
source: "/forge learn"
---
# <Title>
<Factual observations from the scan — imperative mood, concise>Rules must be:
- Under 40 lines
- Factual (observed in code, not assumed)
- Actionable (tell Claude what to do, not what exists)
- English only
Step 7: Report summary
═══ Learn complete ═══
Scanned: <N> dependency files, <N> imports, <N> config files
Detected: <N> patterns across <N> categories
Created: <N> domain rules in .claude/rules/domain/
Skipped: <N> proposals
Tip: run /forge domain extract to capture session-learned knowledge too.What this skill does NOT do
- Does not read dotforge memory, errors, or agent memory (use
/forge domain extractfor that) - Does not modify existing rules (only creates new ones in domain/)
- Does not run any code or install dependencies
- Does not guess — only reports patterns with direct evidence in the codebase
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

