FERS din terminal și din agenți de cod
Pachetul Python pune solverul pe mașina dumneavoastră și, începând cu 0.1.100, comanda fers odată cu el. Un shell, un script, un job CI sau un agent de cod validează un model, îl rezolvă într-un fișier și citește doar numerele de care are nevoie — în timpul motorului, fără drum la server și fără nimic de conectat.
1. Instalați și verificați ce aveți
Un singur pachet conține obiectele de modelare, motorul compilat și comanda. fers doctor afișează versiunile și locul exemplelor; cu o cheie, întreabă și serverul de licențe dacă cheia este acceptată.
pip install FERS
fers doctor --offline # versions and where the examples live
fers versionFără cheie API motorul lucrează pe planul gratuit, pentru uz necomercial până la 100 bare, și nu face niciun apel de rețea. Puneți o cheie în FERS_API_KEY (sau transmiteți --api-key) pentru Pro, care acoperă uzul comercial; motorul o verifică atunci la ferscloud.com o dată per calcul.
2. Bucla: modelați, validați, rezolvați, citiți
Modelarea rămâne în Python, unde sunt obiectele și exemplele numerotate. Comanda preia la fișier: validează JSON-ul față de schema de intrare a motorului, i-l transmite neschimbat și raportează într-o linie.
- Modelați în Python — Construiți modelul cu
fers_coreîn unități SI și salvați-l cumodel.save_to_json("model.json").fers examples listșifers examples show 001sunt cea mai rapidă referință pentru API-ul de obiecte. - Validați fișierul —
fers validate model.jsonîl verifică față de schema de intrare și numește câmpul care nu corespunde.fers schema --listșifers schema Memberafișează schema când un nume de câmp este incert. - Rezolvați într-un fișier —
fers solve model.json --out results.jsonscrie rezultatele direct în fișier. Pe stdout apare o linie de rezumat, sau un obiect JSON cu--json. - Citiți o selecție — Încărcați fișierul rezolvat cu
FERS.from_jsonși citiți cazul de încărcare sau combinația de care aveți nevoie, sau cereți motorului mai puțin de la început cu unResultRequest.
python build_model.py # authors with fers_core and saves model.json
fers validate model.json # the input schema, naming the field that fails
fers solve model.json --out results.json # the engine streams the results to the file
# solved: 3 load cases, 8 combinations in 0.4 s -> results.json (2.1 MB)3. Rezultatele rămân în fișiere
fers solve nu parsează niciodată rezultatele: motorul le scrie, iar comanda citește înapoi doar cât îi trebuie pentru rezumat. Un model care scrie sute de megaocteți nu costă nimic procesul — și nici contextul unui agent. Codul de ieșire spune ce s-a întâmplat, astfel încât un script sau un agent poate ramifica fără să citească proză.
- 0 rezolvat. 4 rezolvat, dar motorul a înregistrat eșecuri (
solve_failures,load_case_failures): citiți-le înainte de a folosi orice număr. - 1 motorul a refuzat calculul sau acesta a eșuat, cu mesajul său pe stderr. 2 intrare greșită: fișier lipsă, JSON invalid, un model care nu respectă schema.
- 3 licență: nicio cheie acolo unde e nevoie de una, o cheie respinsă, sau verificarea licenței a expirat.
- Linia de rezumat numără cazurile de încărcare, combinațiile, eșecurile înregistrate, seturile de rezultate neconvergente și erorile și avertismentele motorului.
from fers_core import FERS, ResultBlock, ResultRequest
# Before solving: ask the engine for only the blocks you will read.
model.settings.analysis_options.result_requests = [
ResultRequest(ResultBlock.REACTIONS, limit_state="ULS"),
ResultRequest(ResultBlock.NODE_DISPLACEMENTS, components=["dy"]),
]
model.save_to_json("model.json")
# After "fers solve model.json --out results.json":
solved = FERS.from_json("results.json")
case = solved.resultsbundle.loadcombinations["ULS 1"]
print(case.reaction_nodes["1"].nodal_forces.fy)4. Verificări normative și rapoarte
Un model care poartă definiții de verificare — check_beam din fers_core.builders construiește unul într-o linie — își primește verdictul EN 1993-1-1 de la fers check: stare, grad de utilizare și bara determinantă pentru fiecare verificare. fers report generează raportul HTML cu calcul de mână dintr-un document deja rezolvat, fără a recalcula.
fers check beam.json --out beam_solved.json
# ec3: Green, utilization 0.778, governing 1 in combination 1
fers report beam_solved.json --out report.html5. Cataloage și schema
Tabelele de profile (EN, British Steel, AISC) și materialele predefinite sunt aceleași pe care le rezolvă obiectele Python, afișate în SI, astfel încât o valoare să poată fi confruntată cu un îndrumar înainte de a intra într-un model.
fers sections list --series HEB
fers sections get IPE200 # h, b, i_y, i_z, j, area, wel, wpl ... in m, m2, m4
fers materials list
fers materials get S355 --json
fers schema --list # the schema's definitions, one line each
fers schema Member # one definition in full6. Agenți de cod și fișierul skill
Un agent cu shell — Claude Code, Codex, agentul din Cursor, un runner CI — nu are nevoie de server sau de conector: pachetul este solverul. Ce îi trebuie este bucla de mai sus într-o formă pe care o citește înainte de a începe, și exact asta este fișierul skill: o pagină în formatul skill cu pasul de instalare, bucla, cum se citesc rezultatele și când se potrivește în schimb serverul MCP.
Fișierul este inclus în pachet, iar fers skill --install . îl scrie în .claude/skills/fers/SKILL.md, unde îl caută Claude Code; fers skill --path îi dă calea pentru orice alt agent. Trăiește și în depozitul FERS_core. Agenții care citesc în loc să apeleze au în continuare llms.txt și versiunea Markdown a acestei pagini la /docs/command-line.md.
fers skill --install . # writes .claude/skills/fers/SKILL.md, where Claude Code looks
fers skill --path # the file's path, for any other agent
fers skill # or read it7. CLI sau MCP?
Decide locul în care rulează agentul, nu care protocol e mai bun în abstract. Ambele căi rulează același motor și întorc aceleași numere.
- Un agent de terminal (Claude Code, Codex, un job CI) instalează pachetul: calculul rulează pe propria mașină în timpul motorului, nu există limite de cereri sau timeout-uri, rezultatele rămân în fișiere, iar el modelează în Python pornind de la exemple.
- Un client desktop sau de editor (Claude Desktop, Cursor, VS Code, ChatGPT desktop) folosește serverul MCP local: calculează pe aceeași mașină, iar un singur apel de instrument întoarce numerele verificate. Îl poate folosi și un agent de terminal; pentru o verificare la cheie are nevoie de mai puține runde decât cu comanda.
- O aplicație de chat în browser sau pe telefon folosește serverul MCP găzduit: construiește și validează modelul și întoarce un link care îl rezolvă în browserul dumneavoastră.
- Ambele pot împărți un cont: cheia API care ridică limitele comenzii este cheia pe care o acceptă serverul MCP.
Pagini conexe
Vezi și
Întrebări frecvente
`fers solve` calculează pe mașina mea sau în cloud?
Am nevoie de o cheie API?
FERS_API_KEY sau transmiteți --api-key; fers doctor vă spune dacă este acceptată.De ce `fers solve` nu afișează rezultatele?
FERS.from_json sau un ResultRequest citește partea de care aveți nevoie.Pot folosi comanda în CI?
--json, iar motorul nu are nevoie de ecran sau GPU. Fixați versiunea pachetului, setați FERS_API_KEY ca secret dacă modelele depășesc limita gratuită și puneți wheel-ul în cache.