Let AI agents work on your COBOL and hear about each other’s changes.
gitta Enterprise brings AI agents to your mainframe code. Your developers hand work to agents, and every change that touches a shared field is checked before it reaches your build. gitta sees what each agent changes and knows which programs depend on it.
File Edit Edit_Settings Menu Utilities Compilers Test Help ------------------------------------------------------------------------------- EDIT /u/ibmuser/postcode-10/base/src/lgcmarea.cpy Columns 00001 00072 Command ===> Scroll ===> CSR 000006 * * 000007 * This commarea can be used for all functions * 000008 * * 000009 ****************************************************************** 000010 03 CA-REQUEST-ID PIC X(6). 000011 03 CA-RETURN-CODE PIC 9(2). 000012 03 CA-CUSTOMER-NUM PIC 9(10). 000013 03 CA-REQUEST-SPECIFIC PIC X(32482). 000014 * Fields used in INQ All and ADD customer 000015 03 CA-CUSTOMER-REQUEST REDEFINES CA-REQUEST-SPECIFIC. 000016 05 CA-FIRST-NAME PIC X(10). 000017 05 CA-LAST-NAME PIC X(20). 000018 05 CA-DOB PIC X(10). 000019 05 CA-HOUSE-NAME PIC X(20). 000020 05 CA-HOUSE-NUM PIC X(4). ==CHG> 05 CA-POSTCODE PIC X(10). 000022 05 CA-NUM-POLICIES PIC 9(3). 000023 05 CA-PHONE-MOBILE PIC X(20). 000024 05 CA-PHONE-HOME PIC X(20). 000025 05 CA-EMAIL-ADDRESS PIC X(100). ==CHG> 05 CA-POLICY-DATA PIC X(32265). 000027 * Fields used in Customer security call 000028 03 CA-CUSTSECR-REQUEST REDEFINES CA-REQUEST-SPECIFIC. 000029 05 CA-CUSTSECR-PASS PIC X(32). 000030 05 CA-CUSTSECR-COUNT PIC X(4). 000031 05 CA-CUSTSECR-STATE PIC X. F1=Help F2=Split F3=Exit F5=Rfind F6=Rchange F7=Up F8=Down F9=Swap F10=Left F11=Right F12=Cancel
4A004/015
IBMUSER:/u/ibmuser/genapp: >gitta status
main is the branch gitta merges finished work into. Before each merge it runs `
python3 ci/movecheck.py` on main combined with the agent's changes.
db2-sync 1 file changed, ready to merge
postcode-10 1 file changed, ready to merge
screen-clean 1 file changed, ready to merge
postcode-10 changed `LGCMAREA.CA-POSTCODE`, which db2-sync's new code in base
/src/lgucdb01.cbl uses. Check that the two changes still work together.
postcode-10 changed `LGCMAREA.CA-POSTCODE`, which screen-clean's new code in
base/src/lgtestc1.cbl uses. Check that the two changes still work together.
IBMUSER:/u/ibmuser/genapp: >gitta land screen-clean
gitta: gate `python3 ci/movecheck.py` on the merged candidate...
gitta: landed screen-clean as 6da387a07b
IBMUSER:/u/ibmuser/genapp: >gitta land db2-sync
gitta: gate `python3 ci/movecheck.py` on the merged candidate...
gitta: landed db2-sync as 08013e8fd6
IBMUSER:/u/ibmuser/genapp: >
===>
INPUT
ESC=¢ 1=Help 2=SubCmd 3=HlpRetrn 4=Top 5=Bottom 6=TSO
7=BackScr 8=Scroll 9=NextSess 10=Refresh 11=FwdRetr 12=Retrieve 4A029/007
IBMUSER:/u/ibmuser/genapp: >gitta land postcode-10
gitta: note: postcode-10 changed `CA-POSTCODE`. screen-clean was merged into ma
in with new code in base/src/lgtestc1.cbl that calls it. Bring main's latest co
de into postcode-10, then check that base/src/lgtestc1.cbl still works with the
change. The tests on the combined code decide.
Your code that uses it:
base/src/lgtestc1.cbl:103: Move CA-POSTCODE to ENT1HPCI
base/src/lgtestc1.cbl:121: Move ENT1HPCI To CA-POSTCODE
base/src/lgtestc1.cbl:126: Move Function UPPER-CASE(CA-POSTCODE)
base/src/lgtestc1.cbl:127: TO CA-POSTCODE
base/src/lgtestc1.cbl:164: Move CA-POSTCODE to ENT1HPCI
base/src/lgtestc1.cbl:183: Move ENT1HPCI To CA-POSTCODE
gitta: note: postcode-10 changed `CA-POSTCODE`. db2-sync was merged into main w
ith new code in base/src/lgucdb01.cbl that calls it. Bring main's latest code i
nto postcode-10, then check that base/src/lgucdb01.cbl still works with the cha
nge. The tests on the combined code decide.
Your code that uses it:
base/src/lgucdb01.cbl:163: POSTCODE = :CA-POSTCODE,
gitta: gate `python3 ci/movecheck.py` on the merged candidate...
LGTESTC1 line 129: CA-POSTCODE PIC X(10) moved to WS-POSTCODE PIC X(8), data is
cut off
LGUCDB01 line 155: CA-POSTCODE PIC X(10) moved to WS-OLD-POSTCODE PIC X(8), dat
a is cut off
gitta: land refused: the tests failed on postcode-10's work combined with what
is already merged, so nothing was merged.
Fix the code, then run the same command again.
IBMUSER:/u/ibmuser/genapp: >
===>
INPUT
ESC=¢ 1=Help 2=SubCmd 3=HlpRetrn 4=Top 5=Bottom 6=TSO
7=BackScr 8=Scroll 9=NextSess 10=Refresh 11=FwdRetr 12=Retrieve 4A029/007
Every agent knows what the others changed.
gitta compares what one agent changed with what every other agent’s new work relies on. When the two no longer fit, the agent hears about it while it still works, and fixes its work before you merge it.
- Shared data definitions
- The layouts many programs share (copybooks), down to every field and status value.
- Programs calling programs
- What each program sends and what the other end expects.
- Night jobs
- Each job step and the program it runs (JCL).
- Risky changes
- Code that raises its own power, opens access or hides what it runs is reported in the merge and on the record.
Your mainframe stays as it is.
gitta runs on developer machines and in your build pipeline. With gitta Enterprise it can also run inside z/OS in a zCX container, so your DBB pipeline checks every change on z/OS itself before the build starts. Your programs, data sets and build process stay as they are.
- Developers and agentsmake the changes
- gittachecks the changes together
- Your buildgets work that passed the check
- Your mainframeruns as it always has

Modernise COBOL with AI agents.
How teams hand documentation, tests and new modules to several agents at once, and check every program that shares a copybook.
Read the modernisation guideBring AI agents to your mainframe team.
gitta Enterprise runs in your own infrastructure, and your code never leaves your company. Tell us about your team and we will show you gitta on your kind of code. For SAP shops, gitta reads ABAP the same way.