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.

Technical details

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.

  1. Developers and agentsmake the changes
  2. gittachecks the changes together
  3. Your buildgets work that passed the check
  4. Your mainframeruns as it always has
gitta's golden pangolin typing at a vintage mainframe console

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 guide

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

gitta’s pangolin at work on a laptop