Skip to content

Integrate claude code and codex cli as agentic coding tool#9355

Merged
braver merged 1 commit into
sublimehq:masterfrom
synote:master
May 11, 2026
Merged

Integrate claude code and codex cli as agentic coding tool#9355
braver merged 1 commit into
sublimehq:masterfrom
synote:master

Conversation

@synote

@synote synote commented Mar 30, 2026

Copy link
Copy Markdown
Contributor
  • I'm the package's author and/or maintainer.
  • I have read the docs.
  • I have tagged a release with a semver version number.
  • My package repo has a description and a README describing what it's for and how to use it.
  • My package doesn't add context menu entries. *
  • My package doesn't add key bindings. **
  • Any commands are available via the command palette.
  • Preferences and keybindings (if any) are listed in the menu and the command palette, and open in split view.
  • If my package is a syntax it doesn't also add a color scheme. ***
  • I use .gitattributes to exclude files from the package: images, test files, sublime-project/workspace.

My package is agentic coding tool named TermMate, bringing claude code and codex cli directly into ST.

The entire agent workflow is driven by the Command Palette. The package create a chat view that directly uses native ST Edit view to create a seamless agent chat and command palette experience. It built a clean, generic abstraction layer genfoundry which take a conversational, long-running agent cli(codex, claude) process. It may support more agent cli tool in the future.

The plugin add context menu of Chat with TermMate which can send current context(file name, lines) to chat. Much like vscode copilot, the solution is far more easy to use.

There are similar packages Codex in Package Control. The main difference is that TermMate provides a native, universal multi-agent Interface. This package uses a standard Sublime Text edit tab (ChatView), allowing you to use all native editor features. It's designed to orchestrate multiple agent CLI.

This package may implement most of the features of vscode Agent HQ in the future.

@github-actions

This comment was marked as outdated.

@github-actions

Copy link
Copy Markdown
Contributor

Package Review

Channel Diff

Removed (none), changed (none), added TermMate.

Review for TermMate main-1043eaf-2026.04.09.04.31.02

3 notices:
- Common used command prefix is: term_chat.
- Consider requiring Sublime Text build >= 4171, where the API is available at import time and these initialization restrictions do not apply.
- Tip of main is tagged with 0.1.3. ✅
    Repository: https://github.com/flashmodel/termmate

No failures

1 warnings:
- It looks like you're using platform-dependent code. Make sure you thought about the platform key in your pull request.
    File: chatview.py
    Line: 1343, Column: 39


For more details on the report messages (for example how to resolve them), go to:
https://github.com/packagecontrol/st_package_reviewer/wiki

Comment thread repository/t.json Outdated
@braver

braver commented May 2, 2026

Copy link
Copy Markdown
Collaborator

I'll probably try to do a more thorough code review later, but here's some details at least:

Small typo in your readme:

While TermMate automatically detects most agnet cli installation paths

For any packages like this we always ask to make it crystal clear from the readme when, how, and what data might leave the user's system to be sent to the llm/agent/service.

You probably want your ChatMD syntax to be hidden, ie. only automatically assigned for your package's features and not selectable by users.

You probably want to have specific keybindings for each OS, as in Win/Linux you'd want to bind CTRL+Enter instead, and on macOS CMND+Enter.

@braver braver added the feedback provided The changes and package have been seen by a reviewer label May 2, 2026
@github-actions

This comment was marked as outdated.

@synote

synote commented May 6, 2026

Copy link
Copy Markdown
Contributor Author

Now the keybindings include Default.sublime-keymap for Windows/Linux and Default (OSX).sublime-keymap for mac.
New label "ai" "llm" was added to package which can be more clear for user.

@github-actions

github-actions Bot commented May 9, 2026

Copy link
Copy Markdown
Contributor

This PR adds TermMate.

Review for TermMate main-09b61c0-2026.05.06.12.08.35

- Common used command prefix is: term_chat.
- The package defines binding ['ctrl+enter'] that is also defined in default bindings and masked with a 'context'. Used context key(s): setting.chatview_chat
    File: Default.sublime-keymap
- The package defines binding ['super+enter'] that is also defined in default bindings and masked with a 'context'. Used context key(s): setting.chatview_chat
    File: Default (OSX).sublime-keymap
- Tip of main is tagged with 0.1.5. ✅

No failures

1 warning:
- It looks like you're using platform-dependent code. Make sure you thought about the platform key in your pull request.
    File: chatview.py
    Line: 1370, Column: 39


For more details on the report messages (for example how to resolve them), go to:
https://github.com/packagecontrol/st_package_reviewer/wiki

Repository: https://github.com/flashmodel/termmate

@braver

braver commented May 9, 2026

Copy link
Copy Markdown
Collaborator

@kaste seems you enjoy reviewing these kinds of packages, wanna have a look? 🙂 Nothing really jumps out at me.

Just an extremely minor nitpick: you typically don't need a separator if there are just 2 items in a submenu, example:
Scherm­afbeelding 2026-05-09 om 12 43 27

Any interest in supporting other services? Let's say someone wants to introduce support for the tool they like to use, could you give some guidance on how to contribute that?

@braver braver added the mergeable The channel changes are good but some action from the author is still needed label May 9, 2026
@kaste

kaste commented May 9, 2026

Copy link
Copy Markdown
Contributor

Yeah, sorry.

This all looks good but the architecture/file layout isn't quite there. You define multiple python files at the root. Each python file at the root is observed by ST for changes and is called a plugin.

It is allowed to have multiple plugins in a package, as entry points, but you must not import them from each other. E.g.

from . import plugin
from .genfoundry import (
    ClaudeCodeAgent, CodexAgent, AgentOptions, AssistantMessage, TextBlock,
    PermissionResultAllow, PermissionResultDeny)
from .genfoundry.claude_agent import find_claude_cli
from .genfoundry.codex_agent import find_codex_cli
from .chatprocessor import ClaudeMessageProcessor, CodexMessageProcessor

is not allowed.

All modules/files you import must come from a subdir because we cannot guarantee that all plugins are atomically on the same version/revision (at reload/import time).

That is why you often see a single entrypoint plugin.py and everything else in core/. And plugin.py then basically only does e.g. a from .core import * and has reloader code in it. E.g.

import sys

# kiss-reloader:
prefix = __spec__.parent + "."  # don't clear the base package
for module_name in [
    module_name
    for module_name in sys.modules
    if module_name.startswith(prefix) and module_name != __name__
]:
    del sys.modules[module_name]

(https://github.com/kaste/KissReloader)

That's a bit of a stupid work that copy pasting but hopefully not that complicated.

EDIT: Otherwise LGTM!

@synote

synote commented May 10, 2026

Copy link
Copy Markdown
Contributor Author

The core sublime command files have been moved into a dedicated chatview sub-dir
The package now uses a clean entry point (termmate.py) at the root directory.

@braver

braver commented May 10, 2026

Copy link
Copy Markdown
Collaborator

Don't forget to tag your latest work!

@synote

synote commented May 10, 2026

Copy link
Copy Markdown
Contributor Author

New tag now support latest package layout.
I'll try to provide unified agent message for genfoundry module next phase, thus adding new agent could be more easy. Currently, the core functionality is focused on getting codex and claude up.

@braver braver merged commit 88d7baa into sublimehq:master May 11, 2026
3 checks passed
@braver braver mentioned this pull request May 12, 2026
9 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feedback provided The changes and package have been seen by a reviewer mergeable The channel changes are good but some action from the author is still needed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants