Following up from today’s webinar, a question came in regarding the AI-harness integration within Coreform IGA for Abaqus.
I see that your example utilized GPT-6’s “Computer Use” mode… did your demo use the RPC integration to do the model setup or was all the model setup actually done by the Computer Use mode?
This attendee brought up a very good point. The short answer is:
- The
coreform_iga_agent utilized the RPC to do all the setup and introspection.
- The Computer Use mode of GPT-6 used the GUI to open dialogs, after values had been populated by
coreform_iga_agent, to show the viewer what had happened. It did not appreciably modify state.
Let me explain (and prove) this. I pretended to take the persona of someone who’d never done a simulation before, and asked Codex to show me the current dialogs and to update the active module.
Codex didn’t find any methods in Abaqus/CAE’s Python API for displaying dialogs, so inferred that it would need to use the Computer Use mode to perform these actions.
Interestingly, it did try to enter values through the GUI dialog - note the mouse cursor icon in this image is Codex’s Computer Use icon.
But it was either unable to use the Computer Use mode to insert the values, or it determined the RPC method - which talks directly with ABQcaeK (the Abaqus/CAE kernel) - was more useful. Specifically, here’s the RPC invocation:
const r = await tools.mcp__node_repl__js({code:"await sky.click({window:cifaState.window,screenshotId:cifaState.screenshots[0].id,x:1270,y:1337}); globalThis.cifaState = await sky.get_window_state({window:cifaWindow}); globalThis.cifaWindow = cifaState.window;",title:"Close the empty editor before loading the verified material tables"});
for(const c of r.content??[]) { if(c.type==='image') image(c); else if(c.type==='text') text(c.text); }
text(await tools.exec_command({cmd:"@'\nimport json\ncifa_material_path = r'C:\\Users\\USER\\Documents\\Coreform\\Webinars\\Coreform_IGA_2026_09_17\\material_properties\\knuckle_pin\\materials.json'\nwith open(cifa_material_path) as cifa_material_file:\n cifa_material_data = json.load(cifa_material_file)\nprint('existing materials:', list(cifa_knuckle_model.materials.keys()))\nfor cifa_mat_name in ('AL6061_T6','SS316'):\n if cifa_mat_name in cifa_knuckle_model.materials:\n raise RuntimeError('Material already exists: '+cifa_mat_name)\n cifa_knuckle_model.Material(name=cifa_mat_name, description='Room-temperature baseline; values and assumptions in material_properties/knuckle_pin/materials.json')\ncifa_al_material = cifa_knuckle_model.materials['AL6061_T6']\n'@ | python 'C:\\Program Files\\Coreform IGA 2026.10\\interop\\abaqus\\cf_app\\cf_rpc\\cf_rpc_client.py' --no-stream --mode exec -\n& python 'C:\\Program Files\\Coreform IGA 2026.10\\interop\\abaqus\\cf_app\\cf_rpc\\cf_rpc_client.py' --help-api cifa_al_material.Elastic\n& python 'C:\\Program Files\\Coreform IGA 2026.10\\interop\\abaqus\\cf_app\\cf_rpc\\cf_rpc_client.py' --help-api cifa_knuckle_model.HomogeneousSolidSection",sandbox_permissions:"require_escalated",justification:"May I create the two material records from the downloaded local data and inspect their elastic-property APIs?",max_output_tokens:2200}));
Which you’ll note submitted the following Python commands to the Abaqus/CAE kernel:
import json
cifa_material_path = r'C:\Users\USER\Documents\Coreform\Webinars\Coreform_IGA_2026_09_17\material_properties\knuckle_pin\materials.json'
with open(cifa_material_path) as cifa_material_file:
cifa_material_data = json.load(cifa_material_file)
print('existing materials:', list(cifa_knuckle_model.materials.keys()))
for cifa_mat_name in ('AL6061_T6','SS316'):
if cifa_mat_name in cifa_knuckle_model.materials:
raise RuntimeError('Material already exists: '+cifa_mat_name)
cifa_knuckle_model.Material(name=cifa_mat_name, description='Room-temperature baseline; values and assumptions in material_properties/knuckle_pin/materials.json')
cifa_al_material = cifa_knuckle_model.materials['AL6061_T6']
And then the agent received the following packet back from the Abaqus/CAE kernel:
[
{
"timestamp": "2026-09-17T03:46:48.405Z",
"source_line": 364,
"output": [
{
"type": "input_text",
"text": "Script completed\nWall time 8.6 seconds\nOutput:\n"
},
{
"type": "input_text",
"text": "{\"chunk_id\":\"f5dba6\",\"wall_time_seconds\":3.2229654,\"exit_code\":0,\"original_token_count\":125,\"output\":\"existing materials: []\\r\\ncifa_al_material.Elastic (AbaqusMethod)\\r\\n========================================\\r\\n\\r\\nMaterial.Elastic(table <, type, noCompression, noTension, temperatureDependency, dependencies, moduli>) -> This method creates an Elastic object.\\r\\ncifa_knuckle_model.HomogeneousSolidSection (AbaqusMethod)\\r\\n==========================================================\\r\\n\\r\\nModel.HomogeneousSolidSection(name, material <, thickness>) -> This method creates a HomogeneousSolidSection object.\\r\\n\"}"
}
]
}
]
Hopefully that helps clear things up!