diff --git a/ui-tui/src/components/appChrome.tsx b/ui-tui/src/components/appChrome.tsx
index 3d14f5003b..bffcd6c515 100644
--- a/ui-tui/src/components/appChrome.tsx
+++ b/ui-tui/src/components/appChrome.tsx
@@ -1,6 +1,6 @@
-import { Box, type ScrollBoxHandle, Text } from '@hermes/ink'
+import { Box, Text, type ScrollBoxHandle } from '@hermes/ink'
import { useStore } from '@nanostores/react'
-import { type ReactNode, type RefObject, useCallback, useEffect, useMemo, useState, useSyncExternalStore } from 'react'
+import { useCallback, useEffect, useMemo, useState, useSyncExternalStore, type ReactNode, type RefObject } from 'react'
import { $delegationState } from '../app/delegationStore.js'
import { $turnState } from '../app/turnStore.js'
diff --git a/ui-tui/src/components/appLayout.tsx b/ui-tui/src/components/appLayout.tsx
index 6e4119cfe1..6cb6de59e7 100644
--- a/ui-tui/src/components/appLayout.tsx
+++ b/ui-tui/src/components/appLayout.tsx
@@ -184,7 +184,16 @@ const ComposerPane = memo(function ComposerPane({
{!isBlocked && (
- <>
+
+
+
{composer.inputBuf.map((line, i) => (
@@ -196,15 +205,6 @@ const ComposerPane = memo(function ComposerPane({
))}
-
-
{sh ? (
$
@@ -230,7 +230,7 @@ const ComposerPane = memo(function ComposerPane({
- >
+
)}
{!composer.empty && !ui.sid && ⚕ {ui.status}}
@@ -264,22 +264,28 @@ const StatusRulePane = memo(function StatusRulePane({
return null
}
+ // 'top' sits inline above the input; give it one row of breathing
+ // space above so the transcript (or queue) doesn't butt directly
+ // against the status row. 'bottom' lives at the last row of the
+ // viewport so it needs no margin.
return (
-
+
+
+
)
})