Prompt-Driven Development with Claude Code: Developing a TUI Framework for the Ring Programming Language
Abstract
1. Introduction
- It delivers an empirical case study demonstrating that a large, multi-module software framework can be developed entirely through prompt-driven development and interaction with an LLM like Claude Code (Opus 4.5). Prior LLM-assisted development studies have targeted games, small utilities, or isolated functions; none have attempted a full framework with windowing, event management, menus, grids, trees, and tab controls.
- It provides a quantitative analysis of the development workflow, including prompt categories, iteration patterns, and phase-specific complexity, offering insight into how an LLM maintains architectural coherence over extended sessions. This study analyzes 107 individual prompts, revealing that 67.3% were corrective and that phase-specific complexity patterns differ significantly across development stages.
- It offers a qualitative evaluation of Claude Code’s behavior, identifying strengths and limitations in handling state management, event-driven logic, and language-specific constraints within the Ring programming language. Most prior empirical work has used mainstream languages like Python and JavaScript.
- It contributes a TUI framework that expands the Ring ecosystem and demonstrates the practical value of LLM-assisted development for emerging programming languages. No TUI framework of comparable scope previously existed for Ring.
2. Related Work
3. Materials and Methods
3.1. Preliminary Evaluation of Claude Code
- Generating descriptive content about Ring.
- Implementing the Observer design pattern in Ring [37].
3.1.1. Generating Descriptive Content About Ring
3.1.2. Implementing the Observer Design Pattern in Ring
3.1.3. Applying the MVC Design Pattern
3.1.4. Implementing Statistical Functions with RingQt
3.1.5. Creating a Simple To-Do Application Using RingQt
- Used the wrong number of parameters with addItem() method in QListWidget.
- Used an incorrect method name, setClickedEvent() instead of setClickEvent().
- Failed to use the Method() function for dynamic method resolution when required.
- Incorrectly configured the Objects Library, leading to runtime errors.
- Left the view object uninitialized.
- Introduced an unnecessary CreateView() method.
- Added an unnecessary init() function in the view class.
- Created a naming conflict when using identifiers.
- Initially treated open_window() and openWindow() as distinct.
3.2. Developing the TUI Framework
4. Results
4.1. The TUI Framework Demo
- ringpm install tuiframeworkusingclaudecode from ringpackages
- ringpm run tuiframeworkusingclaudecode
4.2. Results Related to the Prompt-Driven Workflow
4.3. Results Related to the Generated Source Code Size
5. Discussion
5.1. Prompt-Driven Development Outcomes
- High productivity: the model is used to generate thousands of lines of code.
- Responsiveness to constraints: it adapted quickly to new architectural rules.
- Long-range coherence: it maintained consistent APIs across modules.
- Refactoring ability: it could restructure subsystems on request.
- Conceptual reasoning: effective handling of event-driven design.
- Language-specific blind spots: Ring’s execution model and reference semantics required repeated correction.
- Tendency toward over-redrawing: without explicit constraints, the model defaulted to full-screen redraws.
- Occasional architectural drift: some modules introduced redundant loops or inconsistent naming.
- Performance degradation: as the system grew, the model sometimes introduced inefficient redraw logic.
- Limited memory of earlier constraints: rules established early in development sometimes had to be restated.
5.2. Reproducibility and Model Variability
5.3. Development Metrics and Methodological Insights
5.4. Limitations
- The black-box problem: The LLM’s internal reasoning is opaque. When the model produced incorrect code, the developer could observe the symptom but not diagnose why the model made the error. Correction was necessarily trial-and-error. This is illustrated by the menu navigation bug (prompts 36–43), which required eight consecutive corrective prompts before the issue was resolved.
- Absence of automated testing: All validation in this study was performed manually through interactive terminal testing. No unit, integration, or regression tests were written. This limits confidence in the framework’s reliability and makes the results harder to reproduce.
- Cost of iteration and human effort: Although no code was written manually, the developer’s intellectual effort was substantial. Each prompt cycle required diagnosing behavior, formulating a precise description, reviewing the output, and testing interactively. 107 prompts over time are a significant human effort. The claim of no manual coding should not be mistaken for no human effort.
- Single-case design: This study involves one developer, one LLM (Claude Code Opus 4.5), one programming language (Ring), and one system type (TUI framework). The findings may not generalize to other developers, models, languages, or application domains. The developer’s existing expertise in Ring was essential for providing corrective feedback; a developer unfamiliar with the target language would likely achieve different results.
6. Conclusions
Author Contributions
Funding
Data Availability Statement
Acknowledgments
Conflicts of Interest
Abbreviations
| AI | Artificial Intelligence |
| ANSI | American National Standards Institute |
| CEO | Chief Executive Officer |
| CPU | Central Processing Unit |
| CSS | Cascading Style Sheets |
| CTO | Chief Technology Officer |
| DSL | Domain-Specific Language |
| GUI | Graphical User Interface |
| HTML | Hypertext Markup Language |
| LLM | Large Language Model |
| MVC | Model-View-Controller |
| PWCT | Programming Without Coding Technology |
| UI | User Interface |
| TUI | Terminal User Interface |
Appendix A
| ID | Prompt | Type |
|---|---|---|
| 1 | Using RogueUtil library in the Ring programming language (Using RogueUtil—Ring 1.25.0 documentation)—start developing a TUI library written in Ring language, the programming paradigm is object oriented, and I expect it to be event-driven and accept input from the keyboard or the mouse at the same time. At first start with a class called Kernel that abstract RogueUtil functions. Then create class called events that contains the main events loop, enable registering events and objects. Create classes for different widgets like (Windows, Label, TextBox, EditBox, ListBox, Combobox, Checkbox)—Then create a demo program that uses these classes—This should work in the terminal | Features |
| 2 | In Ring the main function comes first | Code Structure |
| 3 | These are the functions provided by RogueUtil library: void locate(int x, int y) int getch(void) int kbhit(void) void gotoxy(int x, int y) int getkey(void) int nb_getch(void) char *getANSIColor(const int c) char *getANSIBgColor(const int c) void setColor(int c) void setBackgroundColor(int c) int saveDefaultColor(void) void resetColor(void) void cls(void) void setString(char *str) void setChar(char ch) void setCursorVisibility(char visible) void hidecursor(void) void showcursor(void) void msleep(unsigned int ms) int trows(void) int tcols(void) void anykey(char *msg) void setConsoleTitle(char *title) char *getUsername(void) void printXY(int x, int y, char *msg) void echoon(void) void echooff(void) List *getmouseinfo(void) void enablemouse(void) void disablemouse(void) | Information from Ring documentation |
| 4 | I get syntax error at this line: call handler[2](event) handler[2] must be stored in specific variable first | Bug report (Syntax Error) |
| 5 | I get this error: Line 199 Error (R4): Stack Overflow In method echooff() in file demo.ring Called from line 199 In method echooff() in file demo.ring Called from line 132 In method init() in file demo.ring Called from line 13 In function main() in file demo.ring Called from line 11 in file demo.ring ---{ Recursion Depth: 996 }--- | Bug report (Runtime Error) |
| 6 | I get this error: Line 142 Error (R4): Stack Overflow In method gotoxy() in file demo.ring Called from line 142 In method gotoxy() in file demo.ring Called from line 220 In method drawrect() in file demo.ring Called from line 438 In method draw() in file demo.ring Called from line 21 In function main() in file demo.ring Called from line 11 in file demo.ring ---{ Recursion Depth: 995 }--- | Bug report (Runtime Error) |
| 7 | Update this TUI library written in Ring programming language and add the button class: | Features |
| 8 | Add Editbox class (editing multiple lines text) | Features |
| 9 | I get this error: Line 638 Error (R3): Calling Function without definition: split In method settext() in file C:/Users/Mahmoud/Desktop/UsingAI/tui/demo.ring | Bug report (Runtime Error) |
| 10 | Ring comes with split() function in stdlibcore.ring | Information from Ring documentation |
| 11 | Update the listbox class to keep the selected item when moving the focus | Features |
| 12 | Update the Editbox class to enable moving between lines using Enter key. Enable unlimited number of lines | Features |
| 13 | Update the library so I can move the focus between controls using the mouse | Features |
| 14 | I get this error Line 249 Error (R4): Stack Overflow In method getmouseinfo() in file C:/Users/Mahmoud/Desktop/UsingAI/tui/demo.ring Called from line 249 In method getmouseinfo() in file C:/Users/Mahmoud/Desktop/UsingAI/tui/demo.ring Called from line 413 In method run() in file C:/Users/Mahmoud/Desktop/UsingAI/tui/demo.ring Called from line 153 In function main() in file C:/Users/Mahmoud/Desktop/UsingAI/tui/demo.ring Called from line 12 in file C:/Users/Mahmoud/Desktop/UsingAI/tui/demo.ring ---{ Recursion Depth: 996 }--- | Bug report (Runtime Error) |
| 15 | I don’t know why the mouse doesn’t work; this is an example about using the mouse in RogueUtil library | Information from Ring documentation |
| 16 | Now the mouse works to move the focus between controls. Update the library so the mouse can work too at each control level. For example, in Textbox and editbox classes it can move the cursor at specific position. In listbox class it can select specific item. In checkbox class it can invert the checked state. do what you find suitable in a good TUI library | Features |
| 17 | Great, but I discovered a bug, when I click on an item in the listbox, the previous item is selected instead of the clicked item | Bug report |
| 18 | The problem stays. Note (this problem doesn’t happen in editbox class) | Bug report |
| 19 | The problem is not fixed; I will check it later. For now, add a class to draw rectangles (single line, double lines, filled or not filled) | Features |
| 20 | it doesn’t look good it looks like this | Bug report + Screen shot |
| 21 | IT LOOKS LIKE THIS NOW | Bug report + screen shot |
| 22 | The listbox problem is fixed | Information |
| 23 | Add a table/Grid class that contains multiple columns where I can move between rows or columns using arrows. And I have edit option if enable when I press enter on an item I can edit it’s text like textbox. columns could have headers (optional) and rows could have (row number—optional)—i.e., a professional Grid class so i can use it in the future to edit data of my database datable. just focus on the UI part only | Features |
| 24 | I get this error: Line 24 Error (R24): Using uninitialized variable: kernel In function main() in file C:/Users/Mahmoud/Desktop/UsingAI/tui/demo.ring Called from line 12 in file C:/Users/Mahmoud/Desktop/UsingAI/tui/demo.ring | Bug report (Runtime Error) |
| 25 | Update the latest version of the library so when using a Grid class, we have a space between the line number and the first column (like the ID) also enable modifying a cell in the Grid class when we press enter at any cell: | Features |
| 26 | replace KEY_PGDN with KEY_PGDOWN—These are the defined constants by RoguteUtil library in ring language | Information from Ring documentation |
| 27 | error message: Line 1509 Error (R24): Using uninitialized variable: key_pgdn In method handlenavigationmode() in file | Bug report (runtime error) |
| 28 | In the Grid cell when I press Enter nothing happens, I can’t edit the cell | Bug report |
| 29 | When I press enter to edit a cell, the content is replaced with strange number, I can’t edit anything, keep flickering! | Bug report |
| 30 | continuous flickering when trying to modify a cell, suggestion, have a specific loop for the cell edit process | Features |
| 31 | When clicking a cell to edit I get this error: Line 1459 Error (R3): Calling Function without definition: startediting In method handlenavigationmode() in file C:/Users/Mahmoud/Desktop/UsingAI/tui/demo.ring | Bug report (runtime error) |
| 32 | When using Grid, select cell and press Enter to modify it, I see strange number in the Cell, the screen keeps flickering and can’t modify the cell content. Fix this bug so I can edit the text content of any cell inside the gird when using the Grid class: | Bug report |
| 33 | When I press ENTER at the grid cell to edit it, nothing happens! | Bug report |
| 34 | Now it works. When editing a cell enable using the mouse to move the cursor, also if the mouse clicks away end the edit process and send the click to the main event loop to process it maybe it moves the focus to other control | Features |
| 35 | Update the library to add Support for Menu bar where we could have menus like (File Edit Help) and clicking on a menu open (sub menu) and and menus could be nested (i.e., clicking on an item could open another submenu)—Support using mouse/keyboard to move between items. Items could be normal items or checked items (true/false)—we can have a line separator between items. I.e. create professional implementation classes that provide good features | Features |
| 36 | When I click file or any menu this is what i GET, i don’t see the menu i see just two strange characters, suggestion—Use separate loop when a menu is activated as we do when edit a cell inside Grid | Bug report + Screen Shot |
| 37 | I still don’t see the menu items when clicking on File | Bug report |
| 38 | I still don’t see the items, this is what I GET—Suggestions—Learn from the Grid class and how it display the items | Bug report + screen shot |
| 39 | This is what I get when I click file or other option just ++ | Bug report + screen shot |
| 40 | The same problem. In Ring we use Ref() to get a reference to a list/object because assignment/return copy/return variables by value (not reference)—Documentation: Using References—Ring 1.25.0 documentation | Information from Ring documentation |
| 41 | Now I see the menu, but using arrows doesn’t change the active item also clicking on another menu doesn’t clear the previous menu: | Bug report + screen shot |
| 42 | When I click on a menu like (File) the sub menu appears for a moment then disappear I can’t see it to select an item | Bug report |
| 43 | the problem still exist, the menu appears for a moment (looks great by the way) then disappear | Bug report |
| 44 | Now the problem is fixed, I have another problem when clicking on a checkbox in the menu I get an error message as in the image | Bug report + screen shot |
| 45 | In Ring we have this feature: Callable Functions as Methods Using the Call command we can call anonymous functions Syntax (1): Call Variable([Parameters]) Also, we can call the function as a method belongs to the current object Syntax (2): Call { Variable([Parameters]) } | Information from Ring documentation |
| 46 | I get this error: Line 627 Error (R24): Using uninitialized variable: $statusbar In function drawmenudemoscreen() in file C:/Users/Mahmoud/Desktop/UsingAI/tui/demo.ring | Bug report (runtime error) |
| 47 | Now the menu works, In the Grid demo I noticed strange characters at the left—maybe wrong drawing of lines—Fix these things: | Bug report + screen shot |
| 48 | Wonderful, the demo looks more beautiful now, but what do you think about the grid demo | Information + Screen shot |
| 49 | the city column go outside the grid size: | Bug report + screen shot |
| 50 | when opening the demo and selecting one of the three items to open say the form/grid/menu demo—I want pressing escape return to the main menu of the three demos options. Also add and option to exit the app | Features |
| 51 | now add more classes to the library to have movable/resizable windows that can contains child controls and can be moved and resized. add button to maximum, minimize and close windows. Add a specific demo to these features in the main menu. | Features |
| 52 | Nice start but resizing the window hide its contents. Also switching from one to another leads to crash—remember ref() usage in Ring language | Bug report |
| 53 | This is what I get (drawing is not correctly)—also clicking on a window gives flickering, in Ring we can add lists/objects to lists using add() and ref() to add by reference, then find can find object by reference. Also use the trick of click delay if it’s necessary | Bug report + screen shot |
| 54 | Very nice but resizing the window and decreasing its size keep the labels visible (outside the window borders)—Also, can the demo contains more controls inside windows (not just labels) we have many controls in the library | Features |
| 55 | I get this error: Line 735 Error (R20): Calling function with extra number of parameters In function runwindowdemo() in file C:/Users/Mahmoud/Desktop/UsingAI/tui/demo.ring Called from line 72 In function main() in file C:/Users/Mahmoud/Desktop/UsingAI/tui/demo.ring Called from line 15 in file C:/Users/Mahmoud/Desktop/UsingAI/tui/demo.ring | Bug report (Runtime Error) |
| 56 | Three problems (1) In the grid demo, clicking on a cell using the mouse select the next cell in the same column (not the clicked cell). Also, I want double click using mouse starts cell editing as happens when we press Enter (2) In Multiple Windows Demo—resizing window keep large labels visible (goes outside window width) (3) In multiple windows demo—the window that contains textboxes, clicking on any textbox doesn’t activate it, i.e., textboxes are not usable. Also, checkboxes need a delay to avoid enable/disable at the same time | Bug report |
| 57 | Multiple problems (1) In the gird demo when I double click a cell or press enter to edit it, the editing textbox appears one line about the cell (i.e., looks like the cell is moved above one line before editing, where two duplicate cells exist). (2) In the form demo clicking on the button produce this error Line 221 Error (R24): Using uninitialized variable: txtname supported! | | In function Form submitted! Name: () in file C:/Users/Mahmoud/Desktop/UsingAI/tui/demo.ring—revise the other buttons too | Bug report (runtime error) |
| 58 | The grid demo problem is not solved see the image | Bug report + screen shot |
| 59 | The combobox need a click delay similar to other controls to avoid changing items quickly | Bug report |
| 60 | Update the library, add more controls (Tree Control, Tabs Control)—Update the demo and add two demos (Tree Demo, Tabs Demo) - - In the tree control support expanding/unexpanding items by clicking +/- button before each item if the item contains children. Use delay when processing click events as we did with other controls. Support Keyboard/Mouse. | Features |
| 61 | In the tree demo I don’t see nested items where I can click parent nodes to show/hide children | Bug report + screen shot |
| 62 | Now the tree control is great, with respect to the tab control demo looks like a mess as in the image | Bug report + screen shot |
| 63 | Too much better but I still see strange text in the background in the Tabs demo | Bug report + screen shot |
| 64 | We still have the problem, looks like this now: | Bug report + screen shot |
| 65 | When we draw windows and move them, we notice flickering. What about adding a buffering system to the library. Each draw operation go to a buffer, like array that store the character, color, position, etc. and once draw operations are done in the buffer, we reflect these operations on screen at once to avoid flickering. if this solution is ok, do it, if you know better solution do it. just avoid flickering | Features |
| 66 | add width method to kernel class so we can have strings with fixed width—Use it in form demo, menu bar demo so displaying messages override old messages and avoid interference | Features |
| 67 | In the Form demo when I click reset button, looks like draw() method needs to be called so I can see the empty controls (i.e., clear values) | Bug report |
| 68 | In the Grid control, selecting a cell draw all of the other cells and leads to flickering, solve this by just redrawing the old cell (that has the focus) and the new cell that will get the focus | Bug report |
| 69 | This is better no flickering when moving between cells using the keyboard, but I see flickering when moving between cells using the mouse | Bug report |
| 70 | Still clicking on a cell using mouse led to flickering. Also, I noticed another problem, changing rows using keyboard doesn’t highlight the row number of the current row, and selecting another row using mouse highlight the next row number instead of current selected row | Bug report |
| 71 | The highlighted row problem is fixed. But still see flickering when selecting a cell using mouse also noticed that when selecting a cell using mouse it’s opened for edit mode directly, I want this happens when double click, i.e., mouse click only select the cell and don’t edit it. Another problem, the line after grid columns headers. have something like || under city cell, i.e., we have extra | that should be dash - | Bug report |
| 72 | The problem of drawing the line after gird header exist | Bug report + screen shot |
| 73 | It looks like this now | Bug report + screen shot |
| 74 | Now it looks correct, Time to solve the mouse click problem, use delay trick, when we click a cell just select it don’t start editing, and avoid flickering as we do with keyboard movement. if we click again on a selected cell then start editing | Bug report |
| 75 | Update the library and add more controls (progress bar, spinner where we increment/decrement a number using buttons and can enter only numbers, vertical/horizonal scrollbars)—Add new demo to the main menu for these controls | Features |
| 76 | It looks like this, I see a lot of ? characters | Bug report + screen shot |
| 77 | It looks very nice now, but sometimes the value of the scroll bar becomes outside range when clicking on it—see image | Bug report + screen shot |
| 78 | the problem of the range in scroll bar still exist, could it be related to text width and overwriting old text | Bug report |
| 79 | In the Grid demo, when we press enter to edit cell, after finishing editing and pressing enter I see flickering where all cells are drawn again, just draw the edited cells. Another problem, In the controls demo which contains progress bars, scrolls bars, we have a vertical scroll bar and a value at the bottom left of it, the value width touches the scroll bar and draw over it, move it 2 spaces to the left to avoid this | Bug report |
| 80 | In the Treeview control, when I use arrows or mouse to change the active node, i see flickering where all nodes are redrawn, just redraw what is necessary (previous node, current node)—I think redraw is required only in specific case where we show/hide node children. | Bug report |
| 81 | Very nice now navigation in the Treeview control using keyboard doesn’t cause flickering, but navigation using the mouse does, it redraws also the two Treeview controls in the demo. please fix this. Also add a new demo where we have the (menu bar demo) and the (tabs pages demo) in one screen | Bug report |
| 82 | In the (Menu + Tabs demo) I noticed two problems. The controls in the tabs accept mouse events which is great, but they don’t accept keyboard events, i.e., I can use the keyboard when activating a control inside a tab. The second problem when using the menu bar and changing the menu the background becomes blue which means blue rectangles are drawn over the tabs and their controls. Find a way to detect which controls that their place intersects with specific rectangle so when changing a menu those controls only are redrawn. which drawing the screen with a blue background for example do this using a specific control (something like Frame control) which have dimensions two to determine when to redraw such controls. this background could come before other controls, because order matters when redrawing controls. | Bug report |
| 83 | The keyboard problem is fixed, but when changing the menu in the menubar I see black background instead of seeing the Tabs behind the menu and their controls. Maybe you need that the method the determine intersections between controls be in something like the kernel class, and the window manager who have access to all controls can use it. I am not sure do what is right to fix the problem | Bug report |
| 84 | This is too much better, but I have the next problems. In (Menu + Tabs) demo, changing the menu while redrawing controls in background, it keeps a strange line after the menu +-----+ which looks like it’s drawn when we display a menu in menu bar. this should be removed. Another problem the (Tabs Demo) which is another option from main menu, no longer support the keyboard events when selecting a control. Another problem (Menubar demo) which is another option from main menu when changing the menu using menubar, the older menu stays in the screen, switching between all menus draws all menus at the same time!—Please fix all of these issues | Bug report |
| 85 | Very nice, now two more issues to fix. The first in the Form Demo, the listbox control suffer from flickering when changing the current item using keyboard or using the mouse, fix the problem as you did for other controls like Grid control or TreeView control. Avoid flickering when using the mouse or the keyboard to change the current item. The second issue in the (Menubar demo) when we change menus, sometimes the nested menu is drawn on the top of label/text in the background, then changing the menu and hiding it doesn’t redraw these labels/text. Find a way to redraw them if their place intersects with the menu | Bug report |
| 86 | Very nice, I discovered two more issues, The first when we click on a textbox the cursor doesn’t appears until we start typing or press one of the arrow keys, I want the cursor to appear directly once we activate a textbox. The second issue the editbox suffer from flickering when using arrows or clicking on a specific line, don’t redraw the editbox if this is not necessary to avoid flickering | Bug report |
| 87 | Very nice the problems are fixed but the textbox problem is fixed only in the form demo, it still exists in (tabs demo) and (menu + tabs demo) where activating a textbox doesn’t show the cursor. | Bug report |
| 88 | The problem is not fixed. Leave it for now, I have a more important problem to fix. The menu bar uses a specific events loop in the demo code. Find a way to have this code in the classes itself (like the events manager or whatever suitable class) where when use menubars as we do in form view sample, just add it as a control or using specific method (addMenuBar) where the main events loop check if we have a menubar then call the specific method that handle its keyboard/mouse events. do the same for other demos that uses custom events loop. The point we want high-level library, the user code (demo writer) shouldn’t start events loops from scratch but call methods that contains these loops | Bug report |
| 89 | very nice, apply the same idea to other functions like controls demo and treeview demo, both have events loops, we need this to be managed by the events manager as we did for the menubar and tabs | Code Structure |
| 90 | (1) Clicking on a node in the tree produce this error: Line 1043 Error (R24): Using uninitialized variable: tree in file demo.ring and pressing a key produce this error: Line 1017 Error (R24): Using uninitialized variable: activetree in file demo.ring—revise methods in events manager maybe you need custom method with custom loop for tree controls (2) Opening controls demo produce this error: Line 1421 Error (R21): Using operator with values of incorrect type | | in file demo.ring (3) In general revise the logic, before previous update things was working but our goal was to use (events manager) instead of custom loops at client code, to fix this think about moving the code that was working before from client code to have its methods in events manager and call such methods when needed, (4) I am just suggesting do the right thing to have good architecture | Bug report (runtime error) |
| 91 | In the window manager demo, moving a window cause huge flickering because all other windows are drawing, also flickering happens when we click on any control in any window. revise drawing logic as we did when we change the current menu in the menubar to draw only controls in the background that needs drawing. | Bug report |
| 92 | Two issues to fix (1) When we maximize a window then minimize it, the maximized window still appears while a new unmaximized window is drawn, fix this while adding a background/shape control to be drawn before all windows. (2) When resizing a window contains listbox and the window size is decreased, the listbox appears outside its parent window. | Bug report |
| 93 | I have the next four issues (1) When we maximized window a window then unmaximize it to restore its original size, in this case draw all windows because during redraw some windows doesn’t appear. (2) In the windows demo—user form—clicking on the Email textbox doesn’t activate it, I can’t use this textbox! (3) I want when I click on a textbox in the form to see the cursor directly (4) Resizing the window then clicking on a textbox or button inside it draws the control outside the window borders! | Bug report |
| 94 | When I resize window then click on textbox or button it’s drawn outside window borders as in this image | Bug report + screen shot |
| 95 | Two issues (1) When we resize a window, the checkbox control is drawn outside the window borders (2) When we maximize a window then click to restore its original size, some windows are drawn and the other windows are not drawn, i.e., looks like the window draw window previous windows that comes before it according to creation and don’t draw windows that comes after it. (3) In the same windows demo when I click on a textbox I don’t see the cursor, just display it when the textbox is activated | Bug report |
| 96 | Too much better many issues are fixed but we have the next issues (1) In the windows demo When we maximize a window then restore it to its original size, the window is hidden, just display all windows in the window system (2) In the tabs demo and in the menubar and tabs demo, clicking on textbox doesn’t show the cursor just display it (3) Revise all other controls in the library to be sure that when we add a control to a movable window then resize this window the control can’t be drawn outside the window borders | Bug report |
| 97 | Two problems (1) When maximize a window then return to its original size we have the same problem (not all windows are visible)—trying drawing everything after setting the new size (2) When we click textbox and start typing i see flickering because of redrawing all of other controls in the window | Bug report |
| 98 | The flickering problem is fixed, but the other problem (maximize window then restore size doesn’t display all windows) is not fixed. I tried moving all windows away (no intersection) then When I maximize the information window then restore its size, only the (status) window is not drawn and the other two windows (select country) and (user form) are drawn. If I maximized the (status window) then restored, it’s size then all windows are drawn correctly. If I maximized (select country window) then restored, it’s size then the status window is hidden/not drawn while other windows are drawn. If I maximized (user form) window then restored its size, only two windows appears (user form window) and (information window) while the (select country) and (status) windows are hidden. I hope that this information are useful for you to solve the drawing bug after restoring window size. Another thing to know about, not sure if useful or not, In Ring the assignment operator and Add() function use copy by value for lists/objects, to do this by reference we use the ref() function. | Bug report |
| 99 | These are constants for colors from RogueUtil library, use them for colors instead of using numbers, revise all of the code: BLACK BLUE GREEN CYAN RED MAGENTA BROWN GREY DARKGREY LIGHTBLUE LIGHTGREEN LIGHTCYAN LIGHTRED LIGHTMAGENTA YELLOW WHITE | Information from Ring documentation |
| 100 | (1) In the windows demo I use (Tab key) to move between windows, but this disable using the Tab key to move between controls in the same window, update the library and use another key like (KEY_F12) to move between windows, so I can use the Tab key to move between controls in the same window. (2) I have a similar problem in the Tabs demo where moving between tab pages is done using Tabs, use KEY_F11 for this purpose so we can use Tab to move between controls in the same tab page. (3) Revise the library code/demo to do any required updates related to these two points. | Features (We replaced F11 with F3 because F11 toggles full screen) |
| 101 | Very nice, A little issue, I noticed when switching focus between controls using Tab that the Label control could get the focus!—Such a control should avoid getting the focus and pass it to the next control or the first control if the label is the last one or keep it only if it’s the only control in the window. The user uses Tab to move between items that accept an action like typing or clicking, etc. the label control is not one of them. | Bug report |
| 102 | I noticed that the demo code calls the Draw() method for each control alone! update the classes/demo code so calling draw once per window or tab page called be enough to draw controls belongs to the window/tab—Be careful to be sure that this doesn’t conflict with other features. | Code Structure |
| 103 | Two issues in the menu bar demo (1) click (format menu) then (font menu) then (select size option) here pressing the Right Arrow doesn’t open the sub menu where we must press Enter to open it and when we press Enter to open the sub menu, pressing the (Left arrow) doesn’t return to the Size option but goes to the (Font option/menu), i.e., two steps backward not just one! (2) When we select (View menu) then (Zoom menu) then press the right arrow to open the sub menu, after this sub menu is opened if we pressed the right arrow again a label from background (Menu bar demo) appears and overwrite the view submenu items. | Bug report |
| 104 | The Tree demo and the Controls demo contain Events Loop, this should be part of the classes as in other demos where we don’t need such a complex logic at library user code. Try to do this in a simple way to avoid interference with other features of introducing bugs. maybe using separate methods. Also take in mind Ring anonymous functions doesn’t capture variables (not closure) so use global variables in event handlers as in other demos when this is necessary | Code Structure |
| 105 | I get the next errors (1) Line 1074 Error (R24): Using uninitialized variable: $tree1 -----------+ | in file demo.ring when opening Tree demo (2) when opening controls demo Line 1502 Error (R24): Using uninitialized variable: $progress1 | | in file demo.ring | Bug report (runtime error) |
| 106 | Thanks, development is done, write a complete tutorial for this library to explain in details how to use it step-by-step. Generate the documentation in txt file and follow sphinix documentation style (Sphinix is a python tool for documentation)—Provide enough examples to cover all library features and controls | Documentation |
| 107 | with respect to the latest version of the code (demo.ring) everything works fine but when I open (menubar + tabs) demo then go and open other demos it becomes slower, specially the windows demo and moving windows becomes very slow, this happens only if I opened the (menubar + tabs) demo, if not opened all demos works very fast even if i closed them then opened them many times. | Bug report |
References
- Zheng, Z.; Ning, K.; Zhong, Q.; Chen, J.; Chen, W.; Guo, L.; Wang, W.; Wang, Y. Towards an understanding of large language models in software engineering tasks. Empir. Softw. Eng. 2025, 30, 50. [Google Scholar] [CrossRef]
- Wang, J.; Huang, Y.; Chen, C.; Liu, Z.; Wang, S.; Wang, Q. Software testing with large language models: Survey, landscape, and vision. IEEE Trans. Softw. Eng. 2024, 50, 911–936. [Google Scholar] [CrossRef]
- Hou, X.; Zhao, Y.; Liu, Y.; Yang, Z.; Wang, K.; Li, L.; Luo, X.; Lo, D.; Grundy, J.; Wang, H. Large language models for software engineering: A systematic literature review. ACM Trans. Softw. Eng. Methodol. 2024, 33, 1–79. [Google Scholar] [CrossRef]
- Fan, A.; Gokkaya, B.; Harman, M.; Lyubarskiy, M.; Sengupta, S.; Yoo, S.; Zhang, J.M. Large language models for software engineering: Survey and open problems. In Proceedings of the 2023 IEEE/ACM International Conference on Software Engineering: Future of Software Engineering (ICSE-FoSE), Melbourne, Australia, 14–20 May 2023; IEEE: Piscataway, NJ, USA, 2023; pp. 31–53. [Google Scholar]
- Ozkaya, I. Application of large language models to software engineering tasks: Opportunities, risks, and implications. IEEE Softw. 2023, 40, 4–8. [Google Scholar] [CrossRef]
- MacNeil, S.; Tran, A.; Hellas, A.; Kim, J.; Sarsa, S.; Denny, P.; Bernstein, S.; Leinonen, J. Experiences from using code explanations generated by large language models in a web software development e-book. In Proceedings of the 54th ACM Technical Symposium on Computer Science Education V. 1, Melbourne, VIC, Australia, 14–20 May 2023; pp. 931–937. [Google Scholar]
- Belzner, L.; Gabor, T.; Wirsing, M. Large language model assisted software engineering: Prospects, challenges, and a case study. In Proceedings of the International Conference on Bridging the Gap Between AI and Reality; Springer Nature: Cham, Switzerland, 2023; pp. 355–374. [Google Scholar]
- Fayed, M.S.; Alohali, Y.A. Ring: A Lightweight and Versatile Cross-Platform Dynamic Programming Language Developed Using Visual Programming. Electronics 2024, 13, 4627. [Google Scholar] [CrossRef]
- Ayouni, M. Beginning Ring Programming; Apress: New York, NY, USA, 2020; Volume 978. [Google Scholar]
- Fayed, M.S. The Ring Programming Language: Innovative and Practical General-Purpose Multi-Paradigm Language (Fayed); LAP Lambert Academic Publishing: Saarbrücken, Germany, 2017; Volume 1. [Google Scholar]
- Fayed, M.S.; Alohali, Y.A. PWCT2: A Self-Hosting Visual Programming Language Based on Ring with Interactive Textual-to-Visual Code Conversion. Appl. Sci. 2025, 15, 1521. [Google Scholar] [CrossRef]
- Fayed, M.S.; Al-Qurishi, M.; Alamri, A.; Hossain, M.A.; Al-Daraiseh, A.A. PWCT: A novel general-purpose visual programming language in support of pervasive application development. CCF Trans. Pervasive Comput. Interact. 2020, 2, 164–177. [Google Scholar] [CrossRef]
- Chin, J.M.; Chin, M.H.; Van Landuyt, C. A String Search Marketing Application Using Visual Programming. E-J. Bus. Educ. Scholarsh. Teach. 2013, 1, 46–58. [Google Scholar]
- Castelberg, D.; Flury, F. Llm Assisted Development. Ph.D. Dissertation, OST Ostschweizer Fachhochschule, St. Gallen, Switzerland, 2024. [Google Scholar]
- Taulli, T. AI-Assisted Programming; O’Reilly Media, Inc.: Sebastopol, CA, USA, 2024. [Google Scholar]
- Michelutti, C.; Eckert, J.; Monecke, M.; Klein, J.; Glesner, S. A Systematic Study on the Potentials and Limitations of LLM-assisted Software Development. In Proceedings of the 2024 2nd International Conference on Foundation and Large Language Models (FLLM), Singapore, 18–20 March 2024; IEEE: Piscataway, NJ, USA, 2024; pp. 330–338. [Google Scholar]
- Sarkar, A.; Gordon, A.D.; Negreanu, C.; Poelitz, C.; Ragavan, S.S.; Zorn, B. What is it like to program with artificial intelligence? arXiv 2022, arXiv:2208.06213. [Google Scholar] [CrossRef]
- Yang, B.; Tian, H.; Pian, W.; Yu, H.; Wang, H.; Klein, J.; Bissyandé, T.F.; Jin, S. Cref: An llm-based conversational software repair framework for programming tutors. In Proceedings of the 33rd ACM SIGSOFT International Symposium on Software Testing and Analysis; ACM: New York, NY, USA, 2024; pp. 882–894. [Google Scholar]
- Kazemitabaar, M.; Ye, R.; Wang, X.; Henley, A.Z.; Denny, P.; Craig, M.; Grossman, T. Codeaid: Evaluating a classroom deployment of an llm-based programming assistant that balances student and educator needs. In Proceedings of the 2024 Chi Conference on Human Factors in Computing Systems; ACM: New York, NY, USA, 2024; pp. 1–20. [Google Scholar]
- Ganesh, S.; Sahlqvist, R. Exploring Patterns in LLM Integration-A Study on Architectural Considerations and Design Patterns in LLM Dependent Applications. Master’s Thesis, Chalmers University of Technology, Göteborg, Sweden, 2024. [Google Scholar]
- Díaz-Pace, J.A.; Tommasel, A.; Capilla, R. Helping novice architects to make quality design decisions using an llm-based assistant. In Proceedings of the European Conference on Software Architecture; Springer Nature: Cham, Switzerland, 2024; pp. 324–332. [Google Scholar]
- Popp, E. AI-Driven Game Development with Gemini 2.5 Pro Can Prompting Alone Lead to a Fully Playable Game? Springer Nature: Cham, Switzerland, 2024. [Google Scholar]
- Issa, B.; Alit, M. LLM-Defined BlackBoxFunction in JavaScript/TypeScript: A Prompt-Driven Framework for Automated Validation and Iterative Improvement; Linnaeus University: Kalmar, Sweden, 2025. [Google Scholar]
- Fortes-Ferreira, M.; Alam, M.S.; Bazilinskyy, P. Vibe Coding in Practice: Building a Driving Simulator Without Expert Programming Skills. In Adjunct Proceedings of the 17th International Conference on Automotive User Interfaces and Interactive Vehicular Applications; ACM: New York, NY, USA, 2025; pp. 60–66. [Google Scholar]
- Ge, Y.; Mei, L.; Duan, Z.; Li, T.; Zheng, Y.; Wang, Y.; Wang, L.; Yao, J.; Liu, T.; Cai, Y.; et al. A survey of vibe coding with large language models. arXiv 2025, arXiv:2510.12399. [Google Scholar] [CrossRef]
- Guttikonda, B.S.; Sachan, R.C.; Veeramachaneni, V. LLM-GA: A hybrid framework to build dynamic websites for optimizing web performance. Int. J. Inf. Technol. 2025. [Google Scholar] [CrossRef]
- Yuan, D.; Yang, G.; Zhang, T. UI2HTML: Utilizing LLM agents with chain of thought to convert UI into HTML code. Autom. Softw. Eng. 2025, 32, 1–24. [Google Scholar] [CrossRef]
- Morland, D.V. Human factors guidelines for terminal interface design. Commun. ACM 1983, 26, 484–494. [Google Scholar] [CrossRef]
- Su, H.; Jiang, S.; Lai, Y.; Wu, H.; Shi, B.; Liu, C.; Liu, Q.; Yu, T. Evor: Evolving retrieval for code generation. In Findings of the Association for Computational Linguistics: EMNLP 2024; Association for Computational Linguistics: Stroudsburg, PA, USA, 2024; pp. 2538–2554. [Google Scholar]
- Joel, S.; Wu, J.J.W.; Fard, F.H. A survey on llm-based code generation for low-resource and domain-specific programming languages. arXiv 2024, arXiv:2410.03981. [Google Scholar] [CrossRef]
- Acher, M.; Duarte, J.G.; Jézéquel, J.-M. On programming variability with large language model-based assistant. In Proceedings of the 27th ACM International Systems and Software Product Line Conference; ACM: New York, NY, USA, 2023; Volume A, pp. 8–14. [Google Scholar]
- Li, W.-D.; Ellis, K. Is programming by example solved by LLMs? In Proceedings of the Advances in Neural Information Processing Systems 37, Vancouver, BC, Canada, 10–15 December 2024; pp. 44761–44790. [Google Scholar]
- Lyu, M.R.; Ray, B.; Roychoudhury, A.; Tan, S.H.; Thongtanunam, P. Automatic programming: Large language models and beyond. ACM Trans. Softw. Eng. Methodol. 2025, 34, 1–33. [Google Scholar] [CrossRef]
- Zhang, H.; Kung, P.-N.; Yoshida, M.; Van den Broeck, G.; Peng, N. Adaptable logical control for large language models. In Proceedings of the Advances in Neural Information Processing Systems 37, Vancouver, BC, Canada, 10–15 December 2024; pp. 115563–115587. [Google Scholar]
- Voboril, F.; Ramaswamy, V.P.; Szeider, S. StreamLLM: Enhancing Constraint Programming with Large Language Model-Generated Streamliners. In Proceedings of the 2025 IEEE/ACM 1st International Workshop on Neuro-Symbolic Software Engineering (NSE); IEEE Computer Society: Los Alamitos, CA, USA, 2025; pp. 17–22. [Google Scholar]
- Katranji, A.; De Vries, A.; Katranji, A.; Zalzaleh, M. Comparative Accuracy of Large Language Models for CPT Coding Assignments from Surgical Procedure Notes; Springer: Cham, Switzerland, 2026. [Google Scholar]
- Eales, A. The observer pattern revisited. In Educating, Innovating & Transforming: Educators in IT: Concise Paper; Wellington Institute of Technology: Wellington, New Zealand, 2005. [Google Scholar]
- Leff, A.; Rayfield, J.T. Web-application development using the model/view/controller design pattern. In Proceedings of the Proceedings Fifth Ieee International Enterprise Distributed Object Computing Conference; IEEE: Piscataway, NJ, USA, 2001; pp. 118–127. [Google Scholar]
- Grove, R.F.; Ozkan, E. The MVC-web design pattern. In Proceedings of the International Conference on Web Information Systems and Technologies; SCITEPRESS: Setúbal, Portugal, 2011; Volume 2, pp. 127–130. [Google Scholar]
- Lazar, G.; Penea, R. Mastering Qt 5: Create Stunning Cross-Platform Applications Using C++ with Qt Widgets and QML with Qt Quick; Packt Publishing Ltd.: Birmingham, UK, 2018. [Google Scholar]
- Kejriwal, S.; Vishal, V.; Gulati, A.; Gambhir, G. A Review of daily productivity growth using todo manager. Int. Res. J. Mod. Eng. Technol. Sci. 2020, 2, 969–974. [Google Scholar]
- Górski, T. Software architecture description in original software publications. Softw. Impacts 2025, 27, 100802. [Google Scholar] [CrossRef]
























| Criteria | Project in [22] | Project in [24] | Proposed Project |
|---|---|---|---|
| Project | 3D brick-building | 3D driving simulator | TUI Framework |
| Prompts Count | 585 | 21 | 107 |
| Natural Language | English | English | English |
| Developer Background | Programmer/Student | Non-Programmer | Programmer |
| Method | Prompt-Driven | Vibe-Coding | Prompt-Driven |
| Programming Language | JavaScript | JavaScript | Ring |
| Libraries | Three.js | Three.js | RogueUtil |
| Lines of Code | Not-Shared | Not-Shared | 7420 |
| AI Technology | Gemini 2.5 Pro | Cursor 1.3.9 | Opus 4.5 |
| ID | Prompt | Type |
|---|---|---|
| 1 | Using RogueUtil library in the Ring programming language (Using RogueUtil—Ring 1.25.0 documentation)—start developing a TUI library written in Ring language, the programming paradigm is object oriented, and I expect it to be event-driven and accept input from the keyboard or the mouse at the same time. At first start with a class called Kernel that abstract RogueUtil functions. Then create class called events that contains the main events loop, enable registering events and objects. Create classes for different widgets like (Windows, Label, TextBox, EditBox, ListBox, Combobox, Checkbox)—Then create a demo program that uses these classes—This should work in the terminal | Features |
| 2 | In Ring the main function comes first | Code Structure |
| 3 | These are the functions provided by RogueUtil library | Information from Ring documentation |
| Index | Phase | Description | Count |
|---|---|---|---|
| 1 | Bootstrapping | Kernel, events, basic widgets | 15 |
| 2 | Controls Expansion | Listbox, Combobox, Grid, MenuBar | 20 |
| 3 | Complex UI Systems | Nested menus, TreeView, Tabs | 25 |
| 4 | Window Manager | Dragging, resizing, z-order, redraw | 35 |
| 5 | Final Polish | Focus rules, optimization, performance | 12 |
| Index | Metric | Value |
|---|---|---|
| 1 | Total prompts | 107 |
| 2 | Feature prompts | 21 (19.63%) |
| 3 | Bug prompts | 72 (67.29%) |
| 4 | Documentation/info prompts | 9 (8.41%) |
| 5 | Architecture prompts | 4 (3.74%) |
| 6 | Documentation generation prompts | 1 (0.93%) |
| 7 | Largest development phase | Window Manager |
| 8 | Most common bug type | Redraw/flicker |
| 9 | Most common feature type | Widgets/controls |
| Index | Metric | Value |
|---|---|---|
| 1 | Demo lines of code | 1614 |
| 2 | Classes lines of code | 5806 |
| 3 | Total lines of code | 7420 |
| 4 | Class count | 28 |
| 5 | Method count | 334 |
| 6 | Average methods per class | 11.93 |
| 7 | Average lines per class | 207.36 |
| 8 | Methods lines of code | 5519 |
| 9 | Average lines per method | 16.52 |
Disclaimer/Publisher’s Note: The statements, opinions and data contained in all publications are solely those of the individual author(s) and contributor(s) and not of MDPI and/or the editor(s). MDPI and/or the editor(s) disclaim responsibility for any injury to people or property resulting from any ideas, methods, instructions or products referred to in the content. |
© 2026 by the authors. Licensee MDPI, Basel, Switzerland. This article is an open access article distributed under the terms and conditions of the Creative Commons Attribution (CC BY) license.
Share and Cite
Fayed, M.S.; Fayed, A.S. Prompt-Driven Development with Claude Code: Developing a TUI Framework for the Ring Programming Language. Electronics 2026, 15, 903. https://doi.org/10.3390/electronics15040903
Fayed MS, Fayed AS. Prompt-Driven Development with Claude Code: Developing a TUI Framework for the Ring Programming Language. Electronics. 2026; 15(4):903. https://doi.org/10.3390/electronics15040903
Chicago/Turabian StyleFayed, Mahmoud Samir, and Ahmed Samir Fayed. 2026. "Prompt-Driven Development with Claude Code: Developing a TUI Framework for the Ring Programming Language" Electronics 15, no. 4: 903. https://doi.org/10.3390/electronics15040903
APA StyleFayed, M. S., & Fayed, A. S. (2026). Prompt-Driven Development with Claude Code: Developing a TUI Framework for the Ring Programming Language. Electronics, 15(4), 903. https://doi.org/10.3390/electronics15040903

