ttime is a local terminal wrapper that keeps one shared context and delegates work to the official codex and claude CLIs.
The important constraint is auth:
- Safe and durable: run the first-party CLIs as subprocesses and let each one use its own stored subscription login.
- Not durable: extracting or replaying subscription credentials in your own custom network client.
That distinction matters because Anthropic explicitly says Claude subscription OAuth is for native Claude applications and that third-party developers must not route requests through Claude plan credentials on behalf of users. OpenAI's Codex CLI also supports ChatGPT-plan login directly in the official client. See the linked sources below.
- Auto-opens the session for the current project when launched from any directory
- Stores global state and per-session history under
~/.ttime/ - Still provides a session chooser when you launch with
--picker - Provides a full-screen terminal UI with three panes:
- Claude (top-left) – live streaming output from Claude Code
- Codex (bottom-left) – live streaming output from Codex
- Activity (right) – system log, mode changes, errors
- Uses a single input bar with three modes you cycle with Tab:
- ASK – free-text prompt that goes straight to the active agent
- CMD – ttime commands (
help,agent,mode,bookmark,cd, ...) - SHELL – raw shell line with output streamed into the Activity pane; use
! <cmd>from CMD mode for real-terminal passthrough
- Supports
cd,pwd,ls, and path bookmarks (from CMD mode) - Supports
agent auto,agent codex, oragent claude - Supports
mode planandmode edit - Supports local web search and page fetch commands that feed results into shared context
- Streams each agent's output to its own pane in real time
- Auto-falls-back to the other agent on usage-limit / rate-limit errors for single-agent runs
- Integrates codex-delegator – Claude Code can automatically delegate complex tasks to Codex
- Delegates through the installed
codexandclaudebinaries only
Your app becomes the source of truth for state:
- Filesystem context: current directory and bookmarks
- Conversation context: canonical transcript that gets injected into each provider call
- Safety policy:
planmode keeps Codex inread-onlysandbox and Claude inplanpermission mode
That gives you "same context" without pretending the two providers share a backend session.
Each session keeps its own transcript, bookmarks, and last-used working directory under ~/.ttime/, while actual file operations still run in the active project directory.
Run from the repo:
python3 ttime.pyInstall a global launcher:
chmod +x /Users/keonili/ttime/ttime.py
mkdir -p ~/.local/bin
ln -sf /Users/keonili/ttime/ttime.py ~/.local/bin/ttimeThen run it from any project directory:
ttimeBy default, ttime detects the current project root. Inside a git repository it uses the git top-level directory; otherwise it uses the current directory. If a matching session already exists, it opens it and sets the active cwd to the directory you launched from. If no matching session exists, it creates one automatically.
Open a specific session directly:
ttime --session defaultOpen the session picker explicitly:
ttime --pickerUse the line-oriented fallback:
ttime --plainCore commands:
help
status
pwd
cd ~/src/project
ls
agent auto
agent codex
agent claude
mode plan
mode edit
bookmark add app ~/src/my-app
bookmark go app
bookmark list
history
clear-history
login-status
web search codex cli web search
web open https://github.com/openai/codex
! claude auth login --claudeai
refresh
exit
If a line does not match a built-in command, it is treated as a prompt for the active agent.
Local CLI passthrough:
! <command> Run a local command in the real terminal
codex ... Runs locally automatically
claude ... Runs locally automatically
Web commands:
web search ... Search the web locally and store results in shared context
web open ... Fetch a page locally and store an excerpt in shared context
TUI controls:
Startup selector:
Up / Down Move through sessions
Enter Open selected session
n Create a session
e Edit a session
d Delete a session
q Quit
Main UI:
Tab Cycle input mode (ASK -> CMD -> SHELL)
Enter Submit the current input line
Esc Cancel the currently running agent
F1 Help
F2 Cycle agent
F3 Toggle plan/edit
F5 Re-render
F6 Auth status
Ctrl+C Cancel running agent and quit
Auth setup:
codex loginInside ttime, switch to CMD mode and run:
! claude auth login --claudeai
If codex-delegator is installed at ~/.claude/skills/codex-delegator and the codex binary is in PATH, Claude Code's prompt automatically includes delegation instructions. When Claude encounters a complex, persistent, or algorithm-heavy problem, it can invoke codex exec --full-auto to get a fresh perspective. The Codex pane will show direct Codex output when ttime drives it in agent codex mode.
Install the skill:
git clone https://github.com/eddiearc/codex-delegator.git ~/.claude/skills/codex-delegator- Interactive terminal apps still need the real terminal passthrough — use
! <command>from CMD mode for auth flows, editors, pagers, or TUIs. - Codex streaming is based on
codex exec --jsonevent lines plus the final output file, so progress output is informative but not perfectly polished. - Local web commands use DuckDuckGo Lite plus direct page fetches.
- When Claude delegates to Codex via the skill, the delegated Codex output appears within Claude's own stream, not the Codex pane. The Codex pane shows output only when ttime directly runs Codex in
agent codexmode.
- OpenAI Codex CLI README: https://github.com/openai/codex
- OpenAI Help Center, "Use Codex with your ChatGPT plan": https://help.openai.com/de-de/articles/11369540-codex-mit-ihrem-chatgpt-plan-verwenden
- Claude Code docs, legal/compliance auth restrictions: https://code.claude.com/docs/en/legal-and-compliance
- Claude Code docs, MCP server support: https://code.claude.com/docs/en/mcp