FERS vanuit de terminal en vanuit code-agents

Het Python-pakket zet de solver op uw eigen machine, en sinds 0.1.100 het commando fers erbij. Een shell, een script, een CI-job of een code-agent valideert een model, rekent het naar een bestand en leest alleen de getallen die hij nodig heeft — in solvertijd, zonder omweg via een server en zonder iets te koppelen.

1. Installeren, en kijken wat u hebt

Eén pakket bevat de modelobjecten, de gecompileerde solver en het commando. fers doctor toont de versies en waar de voorbeelden staan; met een sleutel vraagt het ook aan de licentieserver of die sleutel wordt geaccepteerd.

pip install FERS
fers doctor --offline      # versions and where the examples live
fers version

Zonder API-sleutel rekent de solver op het gratis abonnement, voor niet-commercieel gebruik tot 100 staven, en doet hij geen enkele netwerkaanroep. Zet een sleutel in FERS_API_KEY (of geef --api-key mee) voor Pro, dat commercieel gebruik dekt; de solver controleert hem dan één keer per berekening bij ferscloud.com.

2. De cyclus: modelleren, valideren, rekenen, lezen

Modelleren blijft in Python, waar de objecten en de genummerde voorbeelden zijn. Het commando neemt het over bij het bestand: het valideert de JSON tegen het invoerschema van de solver, geeft hem ongewijzigd door en meldt in één regel.

  1. Het model in Python bouwen — Bouw het met fers_core in SI-eenheden en sla het op met model.save_to_json("model.json"). fers examples list en fers examples show 001 zijn de snelste referentie voor de objecten-API.
  2. Het bestand valideren — fers validate model.json toetst het aan het invoerschema en noemt het veld dat niet klopt. fers schema --list en fers schema Member tonen het schema als een veldnaam onzeker is.
  3. Naar een bestand rekenen — fers solve model.json --out results.json schrijft de resultaten rechtstreeks naar het bestand. Op stdout komt één samenvattingsregel, of met --json een JSON-object.
  4. Een selectie lezen — Laad het gerekende bestand met FERS.from_json en lees het belastinggeval of de combinatie die u nodig hebt, of vraag de solver vooraf om minder met een ResultRequest.
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. Resultaten blijven in bestanden

fers solve parst de resultaten nooit: de solver schrijft ze en het commando leest alleen terug wat de samenvatting nodig heeft. Een model dat honderden megabytes schrijft, kost het proces — en de context van een agent — niets. De exitcode zegt wat er is gebeurd, zodat een script of agent kan vertakken zonder proza te lezen.

  • 0 gerekend. 4 gerekend, maar de solver heeft mislukkingen vastgelegd (solve_failures, load_case_failures): lees die voordat u een getal gebruikt.
  • 1 de solver heeft de berekening geweigerd of ze is mislukt, met zijn melding op stderr. 2 ongeldige invoer: ontbrekend bestand, ongeldige JSON, een model dat het schema niet haalt.
  • 3 licentie: geen sleutel waar er een nodig is, een geweigerde sleutel, of een licentiecontrole die te lang duurde.
  • De samenvattingsregel telt belastinggevallen, combinaties, vastgelegde mislukkingen, niet-geconvergeerde resultaatsets en de fouten en waarschuwingen van de solver.
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. Toetsen en rapporten

Een model met toetsdefinities — check_beam in fers_core.builders bouwt er een in één regel — krijgt zijn EN 1993-1-1-oordeel van fers check: status, unity check en maatgevende staaf per toets. fers report rendert het HTML-rapport met handberekening uit een al gerekend document, zonder opnieuw te rekenen.

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.html

5. Catalogi en het schema

De profieltabellen (EN, British Steel, AISC) en de materiaalvoorkeuzes zijn dezelfde als die de Python-objecten opzoeken, afgedrukt in SI zodat een waarde tegen een tabellenboek gecontroleerd kan worden voordat hij een model ingaat.

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 full

6. Code-agents en het skill-bestand

Een agent met een shell — Claude Code, Codex, de agent van Cursor, een CI-runner — heeft geen server en geen connector nodig: het pakket is de solver. Wat hij nodig heeft, is de cyclus hierboven in een vorm die hij leest voordat hij begint, en dat is het skill-bestand: één pagina in het skill-formaat met de installatiestap, de cyclus, hoe resultaten te lezen en wanneer de MCP-server beter past.

Het bestand zit in het pakket, en fers skill --install . schrijft het naar .claude/skills/fers/SKILL.md, waar Claude Code kijkt; fers skill --path noemt het pad voor elke andere agent. Het staat ook in de FERS_core-repository. Agents die lezen in plaats van aanroepen hebben nog steeds llms.txt en de Markdown-versie van deze pagina op /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 it

7. CLI of MCP?

Waar de agent draait beslist, niet welk protocol in het abstracte beter is. Beide routes draaien dezelfde solver en geven dezelfde getallen.

  • Een terminal-agent (Claude Code, Codex, een CI-job) installeert het pakket: de berekening draait op zijn eigen machine in solvertijd, er zijn geen verzoeklimieten of time-outs, resultaten blijven in bestanden, en hij modelleert in Python aan de hand van de voorbeelden.
  • Een desktop- of editorclient (Claude Desktop, Cursor, VS Code, ChatGPT desktop) gebruikt de lokale MCP-server: die rekent op dezelfde machine, en één toolaanroep geeft de getoetste getallen terug. Ook een terminal-agent kan hem gebruiken; voor een kant-en-klare toets heeft hij er minder beurten voor nodig dan met het commando.
  • Een chatapp in de browser of op een telefoon gebruikt de gehoste MCP-server: die bouwt en valideert het model en geeft een link terug die het in uw browser doorrekent.
  • Beide kunnen één account delen: de API-sleutel die de grenzen van het commando verhoogt, is de sleutel die de MCP-server accepteert.

Gerelateerde pagina’s

Zie ook

Veelgestelde vragen

Rekent `fers solve` op mijn machine of in de cloud?

Op uw machine. De solver is in het pakket gecompileerd; de enige netwerkaanroep is de licentiecontrole als er een API-sleutel is gezet, één keer per berekening. Zonder sleutel is er helemaal geen netwerktoegang.

Heb ik een API-sleutel nodig?

Voor commercieel gebruik, bij elke modelgrootte, en voor modellen boven de gratis grens van 100 staven (Pro gaat tot 10,000). Zet de sleutel in FERS_API_KEY of geef --api-key mee; fers doctor vertelt u of hij wordt geaccepteerd.

Waarom drukt `fers solve` de resultaten niet af?

Omdat ze in een bestand thuishoren. Een gerekend document kan honderden megabytes groot zijn, en een agent die het in zijn context plakt, is de draad kwijt. Het commando drukt één samenvattingsregel af, en FERS.from_json of een ResultRequest leest het deel dat u nodig hebt.

Kan ik het commando in CI gebruiken?

Ja. Het is een gewoon consolescript met betekenisvolle exitcodes en --json-uitvoer, en de solver heeft geen scherm of GPU nodig. Pin de pakketversie, zet FERS_API_KEY als secret als de modellen de gratis grens overschrijden, en cache het wheel.