diff --git a/termui/termui.go b/termui/termui.go
index ba08c05..34d6308 100644
--- a/termui/termui.go
+++ b/termui/termui.go
@@ -58,7 +58,7 @@
 	toolUseTmpl = template.Must(template.New("tool_use").Parse(toolUseTemplTxt))
 )
 
-type termUI struct {
+type TermUI struct {
 	stdin  *os.File
 	stdout *os.File
 	stderr *os.File
@@ -93,8 +93,8 @@
 	thinking bool
 }
 
-func New(agent loop.CodingAgent, httpURL string) *termUI {
-	return &termUI{
+func New(agent loop.CodingAgent, httpURL string) *TermUI {
+	return &TermUI{
 		agent:          agent,
 		stdin:          os.Stdin,
 		stdout:         os.Stdout,
@@ -106,7 +106,7 @@
 	}
 }
 
-func (ui *termUI) Run(ctx context.Context) error {
+func (ui *TermUI) Run(ctx context.Context) error {
 	fmt.Println(`🌐 ` + ui.httpURL + `/`)
 	fmt.Println(`💬 type 'help' for help`)
 	fmt.Println()
@@ -122,7 +122,7 @@
 	return nil
 }
 
-func (ui *termUI) LogToolUse(resp *loop.AgentMessage) {
+func (ui *TermUI) LogToolUse(resp *loop.AgentMessage) {
 	inputData := map[string]any{}
 	if err := json.Unmarshal([]byte(resp.ToolInput), &inputData); err != nil {
 		ui.AppendSystemMessage("error: %v", err)
@@ -136,7 +136,7 @@
 	ui.AppendSystemMessage("%s\n", buf.String())
 }
 
-func (ui *termUI) receiveMessagesLoop(ctx context.Context) {
+func (ui *TermUI) receiveMessagesLoop(ctx context.Context) {
 	it := ui.agent.NewIterator(ctx, 0)
 	bold := color.New(color.Bold).SprintFunc()
 	for {
@@ -186,7 +186,7 @@
 	}
 }
 
-func (ui *termUI) inputLoop(ctx context.Context) error {
+func (ui *TermUI) inputLoop(ctx context.Context) error {
 	for {
 		line, err := ui.trm.ReadLine()
 		if errors.Is(err, io.EOF) {
@@ -323,7 +323,7 @@
 	}
 }
 
-func (ui *termUI) updatePrompt(thinking bool) {
+func (ui *TermUI) updatePrompt(thinking bool) {
 	var t string
 
 	if thinking {
@@ -335,7 +335,7 @@
 	ui.trm.SetPrompt(p)
 }
 
-func (ui *termUI) initializeTerminalUI(ctx context.Context) error {
+func (ui *TermUI) initializeTerminalUI(ctx context.Context) error {
 	ui.mu.Lock()
 	defer ui.mu.Unlock()
 
@@ -405,21 +405,21 @@
 	return nil
 }
 
-func (ui *termUI) RestoreOldState() error {
+func (ui *TermUI) RestoreOldState() error {
 	ui.mu.Lock()
 	defer ui.mu.Unlock()
 	return term.Restore(int(ui.stdin.Fd()), ui.oldState)
 }
 
 // AppendChatMessage is for showing responses the user's request, conversational dialog etc
-func (ui *termUI) AppendChatMessage(msg chatMessage) {
+func (ui *TermUI) AppendChatMessage(msg chatMessage) {
 	ui.messageWaitGroup.Add(1)
 	ui.chatMsgCh <- msg
 }
 
 // AppendSystemMessage is for debug information, errors and such that are not part of the "conversation" per se,
 // but still need to be shown to the user.
-func (ui *termUI) AppendSystemMessage(fmtString string, args ...any) {
+func (ui *TermUI) AppendSystemMessage(fmtString string, args ...any) {
 	ui.messageWaitGroup.Add(1)
 	ui.termLogCh <- fmt.Sprintf(fmtString, args...)
 }
