pcode 0.1.1__tar.gz → 0.1.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pcode-0.1.1 → pcode-0.1.2}/PKG-INFO +35 -26
- {pcode-0.1.1 → pcode-0.1.2}/README.md +28 -19
- {pcode-0.1.1 → pcode-0.1.2}/pyproject.toml +7 -6
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/app.py +214 -29
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/aside_ui.py +2 -1
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/cli.py +3 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/compaction.py +12 -7
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/config.py +19 -7
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/controller.py +53 -8
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/email_remote/listener.py +2 -2
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/extension_guide.md +2 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/host.py +37 -12
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/job_notices.py +3 -1
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/jobs.py +124 -18
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/logins.py +5 -2
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/mcp_notice.py +1 -1
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/meridian_reminders.py +16 -3
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/models.py +11 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/planning.py +1 -1
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/popup_ui.py +13 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/preferences.py +11 -4
- pcode-0.1.2/src/pcode/proctitle.py +60 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/remote.py +78 -18
- pcode-0.1.2/src/pcode/retries.py +36 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/sandbox.py +2 -1
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/sessions.py +196 -8
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/stall_log.py +49 -11
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/steering.py +14 -2
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/stream_display.py +2 -1
- pcode-0.1.2/src/pcode/terminal_text.py +20 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/thinking_markdown.py +3 -1
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/tool_panel.py +37 -5
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/tree_ui.py +2 -1
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/ui.py +8 -27
- pcode-0.1.1/src/pcode/retries.py +0 -28
- {pcode-0.1.1 → pcode-0.1.2}/.gitignore +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/LICENSE +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/__init__.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/_job_supervisor.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/agent.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/anthropic_oauth.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/appearance.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/aside.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/aside_guard.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/auth.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/block.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/browser.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/cache_diagnostics.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/cache_settings.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/cache_warnings.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/claude_sdk/__init__.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/claude_sdk/cli.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/claude_sdk/errors.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/claude_sdk/messages.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/claude_sdk/model.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/claude_sdk/resume.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/claude_sdk/session.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/claude_sdk/session_pool.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/claude_sdk/workspace.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/clipboard.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/code_mode.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/codex_login.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/command_transcript.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/commands.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/completion.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/context_breakdown.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/context_usage.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/conversation_ids.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/conversation_tree.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/copy_ui.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/delegation.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/delta.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/diagnostics.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/edit_preview.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/edit_transcript.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/edit_ui.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/edits.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/email_remote/__init__.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/email_remote/cli.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/email_remote/mailbox.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/email_remote/outbound.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/email_remote/parsing.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/email_remote/render.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/email_remote/state.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/error_report.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/ext.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/extensions/browser.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/extensions/ponytail.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/extensions/sandbox.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/extensions/session_history.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/extensions/web_research.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/file_refs.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/filesystem.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/frame.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/gateway.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/git_diff.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/history.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/history_cursor.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/history_embeddings.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/host_protocol.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/host_ui.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/input_keys.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/inspection.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/inspector_ui.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/isolated_delegation.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/jobs_ui.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/keymap.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/layout_speed.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/links.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/links_ui.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/live.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/llm_proxy.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/mcp.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/mcp_oauth.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/meridian.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/meridian_process.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/meridian_setup.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/model_metadata.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/model_ui.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/native_results.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/oauth_pages.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/output_limits.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/paste.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/path_completion.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/plan_preview.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/plan_sizes.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/prefix_keys.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/profile_benchmark.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/profiling.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/project_trust.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/prompt_keys.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/remote_print.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/remote_profile.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/replay_benchmark.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/repo_context.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/rpc.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/runtime.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/session_naming.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/session_ui.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/shell.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/shell_mode.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/shell_tools.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/skills.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/startup_input.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/stream_events.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/strict_tools.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/syntax.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/syntax_colors.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/task_prompt.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/task_worktrees.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/terminal_notify.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/theme.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/theme_gallery.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/token_accounting.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/tool_display.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/tool_output_limits.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/transcript_log.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/transcript_notice.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/turn.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/usage.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/word_wrap.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/worker_ui.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/workers.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/workspace.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/workspace_filesystem.py +0 -0
- {pcode-0.1.1 → pcode-0.1.2}/src/pcode/worktree.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: pcode
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.2
|
|
4
4
|
Summary: Terminal-native AI coding agent with background jobs, parallel worktrees, forkable sessions, and multi-model support
|
|
5
5
|
Project-URL: Homepage, https://github.com/cruxwell/pcode
|
|
6
6
|
Project-URL: Documentation, https://cruxwell.github.io/pcode/
|
|
@@ -21,29 +21,34 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
21
21
|
Classifier: Programming Language :: Python :: 3.13
|
|
22
22
|
Classifier: Topic :: Software Development
|
|
23
23
|
Requires-Python: >=3.11
|
|
24
|
-
Requires-Dist: filelock<4
|
|
24
|
+
Requires-Dist: filelock<5,>=4
|
|
25
25
|
Requires-Dist: genai-prices<0.2,>=0.1.7
|
|
26
|
-
Requires-Dist: httpx2<3,>=2.13
|
|
26
|
+
Requires-Dist: httpx2<3,>=2.13.1
|
|
27
27
|
Requires-Dist: prompt-toolkit==3.0.53
|
|
28
28
|
Requires-Dist: psutil<8,>=6
|
|
29
|
-
Requires-Dist: pydantic-ai-harness[codemode,coder,exa,playwright]<0.
|
|
30
|
-
Requires-Dist: pydantic-ai-slim[anthropic,bedrock,duckduckgo,google,groq,mcp,openai,web-fetch,xai]<3,>=2.
|
|
31
|
-
Requires-Dist: rich<15
|
|
29
|
+
Requires-Dist: pydantic-ai-harness[codemode,coder,exa,playwright]<0.55,>=0.54.0
|
|
30
|
+
Requires-Dist: pydantic-ai-slim[anthropic,bedrock,duckduckgo,google,groq,mcp,openai,web-fetch,xai]<3,>=2.54.0
|
|
31
|
+
Requires-Dist: rich<16,>=15
|
|
32
32
|
Requires-Dist: websockets<17,>=15.0.1
|
|
33
33
|
Requires-Dist: yappi<2,>=1.7.6
|
|
34
34
|
Provides-Extra: claude
|
|
35
|
-
Requires-Dist: claude-agent-sdk<0.3,>=0.2.
|
|
35
|
+
Requires-Dist: claude-agent-sdk<0.3,>=0.2.164; extra == 'claude'
|
|
36
36
|
Description-Content-Type: text/markdown
|
|
37
37
|
|
|
38
|
-
<img width="
|
|
39
|
-
|
|
38
|
+
<img width="1392" height="1522" alt="pcode in a dark terminal" src="docs/assets/screenshots/pcode-dark.png" />
|
|
39
|
+
|
|
40
|
+
<img width="1392" height="1522" alt="pcode in a light terminal" src="docs/assets/screenshots/pcode-light.png" />
|
|
40
41
|
|
|
41
42
|
# pcode
|
|
42
43
|
|
|
43
|
-
pcode is a terminal-native coding agent
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
pcode is a terminal-native coding agent that lets you change what's visible in
|
|
45
|
+
your scrollback, even after the work is done. Expand commands, output, and diffs
|
|
46
|
+
when you need the details; hide them when you want to read the conversation.
|
|
47
|
+
The same history, with the detail you choose.
|
|
48
|
+
|
|
49
|
+
Long-running commands continue in the background and wake the agent when they
|
|
50
|
+
finish. Run sessions in separate git worktrees, or rewind and branch a
|
|
51
|
+
conversation to try another approach.
|
|
47
52
|
|
|
48
53
|
- **Slow work doesn't block you.** Long commands become background jobs, and a
|
|
49
54
|
finished job wakes the agent, so it can watch tests or CI and fix what fails.
|
|
@@ -51,8 +56,9 @@ tool call stays inspectable.
|
|
|
51
56
|
on one repo at once.
|
|
52
57
|
- **Rewind and fork.** `/tree` returns to any point in a conversation and
|
|
53
58
|
branches from there. Every session is kept, so you can resume or search it.
|
|
54
|
-
- **
|
|
55
|
-
|
|
59
|
+
- **Change your view, not your history.** Show or hide commands, output, and
|
|
60
|
+
diffs throughout the conversation. Hidden output stays available, and `/tools`
|
|
61
|
+
lets you inspect every tool call and its full output.
|
|
56
62
|
|
|
57
63
|
It runs on any model [Pydantic AI](https://ai.pydantic.dev/) supports, or on
|
|
58
64
|
your Claude or ChatGPT subscription.
|
|
@@ -79,23 +85,24 @@ uv tool install 'pcode[claude]'
|
|
|
79
85
|
## Quick start
|
|
80
86
|
|
|
81
87
|
```sh
|
|
82
|
-
|
|
83
|
-
pcode -m openai-codex:gpt-5.6-luna #
|
|
84
|
-
pcode
|
|
88
|
+
pcode -m claude:claude-sonnet-5 # Claude subscription; run /login claude if not signed in
|
|
89
|
+
pcode -m openai-codex:gpt-5.6-luna # ChatGPT subscription (/login openai-codex)
|
|
90
|
+
pcode -m anthropic:claude-sonnet-5 # or any provider, with its API key set
|
|
91
|
+
pcode # reuses the model /model (Ctrl+L) saved; with none, an offline preview
|
|
85
92
|
pcode -C /path/to/repo "Summarize the open TODOs"
|
|
86
93
|
git diff | pcode -p --no-save # non-interactive: reply to stdout
|
|
87
94
|
pcode --continue # resume this directory's newest session
|
|
88
95
|
pcode --theme-preview # offline sample output and the style gallery
|
|
89
96
|
```
|
|
90
97
|
|
|
91
|
-
**
|
|
98
|
+
**The agent edits files and runs shell commands with your permissions and no
|
|
92
99
|
approval prompt.** Read [tool permissions](https://cruxwell.github.io/pcode/tools/#tool-permissions)
|
|
93
100
|
before pointing it at anything you care about.
|
|
94
101
|
|
|
95
102
|
## More
|
|
96
103
|
|
|
97
104
|
- **Your subscription:** Claude runs through Anthropic's own Agent SDK and
|
|
98
|
-
Claude Code login
|
|
105
|
+
Claude Code login (the route Anthropic supports), and ChatGPT through a Codex
|
|
99
106
|
login. See [providers](https://cruxwell.github.io/pcode/providers/).
|
|
100
107
|
- [Email remote control](https://cruxwell.github.io/pcode/email/): send a task
|
|
101
108
|
from Gmail on your phone, reply to keep going, and take the session over at a
|
|
@@ -105,10 +112,10 @@ before pointing it at anything you care about.
|
|
|
105
112
|
`jj` to leave insert mode.
|
|
106
113
|
- `/btw` side questions, background sessions, recall of past sessions, a
|
|
107
114
|
browser the agent can drive, and Python extensions.
|
|
108
|
-
- Pydantic AI's Harness coder
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
115
|
+
- Built on Pydantic AI's Harness coder, with MCP (OAuth and tool search),
|
|
116
|
+
searchable sessions, jobs and worktrees on top. Extensions are plain
|
|
117
|
+
Pydantic AI capabilities. The conversation tree follows
|
|
118
|
+
[pi](https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/docs/tree.md)'s.
|
|
112
119
|
|
|
113
120
|
See [PLAN.md](https://github.com/cruxwell/pcode/blob/master/PLAN.md) for the longer-term direction.
|
|
114
121
|
|
|
@@ -116,21 +123,23 @@ See [PLAN.md](https://github.com/cruxwell/pcode/blob/master/PLAN.md) for the lon
|
|
|
116
123
|
|
|
117
124
|
| Page | What it covers |
|
|
118
125
|
| --- | --- |
|
|
119
|
-
| [Getting started](https://cruxwell.github.io/pcode/getting-started/) | Homebrew and source installs,
|
|
126
|
+
| [Getting started](https://cruxwell.github.io/pcode/getting-started/) | Homebrew, uv and source installs, signing in, `--print`, shell completion |
|
|
120
127
|
| [Scrollback and transparency](https://cruxwell.github.io/pcode/guide/scrollback/) | Guide: what goes into scrollback, `/tools`, `/diffs` |
|
|
121
128
|
| [A shell for long-running work](https://cruxwell.github.io/pcode/guide/shell/) | Guide: background jobs, watching CI |
|
|
122
129
|
| [Parallel agents](https://cruxwell.github.io/pcode/guide/parallel/) | Guide: worktrees, parallel sub-agents, `/agents` |
|
|
123
130
|
| [Extending pcode](https://cruxwell.github.io/pcode/guide/extending/) | Guide: extensions, skills, settings |
|
|
124
|
-
| [Providers and models](https://cruxwell.github.io/pcode/providers/) | Authentication, supported providers, the model picker, reasoning effort, Claude Code,
|
|
131
|
+
| [Providers and models](https://cruxwell.github.io/pcode/providers/) | Authentication, supported providers, the model picker, reasoning effort, Claude Code, proxies |
|
|
125
132
|
| [Configuration](https://cruxwell.github.io/pcode/configuration/) | `pcode config`, per-repository overrides, trusting repository code, the settings table, syntax styles |
|
|
126
133
|
| [Commands and keys](https://cruxwell.github.io/pcode/commands/) | Slash commands, key bindings, vi mode, tmux newlines, status line, `!command`, the diff and tool inspectors |
|
|
127
134
|
| [Keybindings](https://cruxwell.github.io/pcode/keybindings/) | Custom command mappings with `/bind`, Ctrl shortcuts, vi editing, a normal-mode leader, and custom escape sequences such as `jj` |
|
|
135
|
+
| [Terminal setup](https://cruxwell.github.io/pcode/terminal/) | Tab titles, the progress bar, iTerm2 and tmux settings |
|
|
128
136
|
| [Tools](https://cruxwell.github.io/pcode/tools/) | Tool permissions, web search, the browser, code mode |
|
|
129
137
|
| [MCP servers](https://cruxwell.github.io/pcode/mcp/) | Opt-in MCP configuration, OAuth sign-in, deferred tool search |
|
|
130
138
|
| [Working in a repository](https://cruxwell.github.io/pcode/workspace/) | `AGENTS.md`/`CLAUDE.md`, skills as slash commands, one worktree per session |
|
|
131
139
|
| [Sessions and recovery](https://cruxwell.github.io/pcode/sessions/) | Saving, resuming, recalling earlier sessions, checkpoints, retries |
|
|
132
140
|
| [Context, limits and caching](https://cruxwell.github.io/pcode/context/) | Prompt overhead, compaction, output limits, prompt cache notices |
|
|
133
141
|
| [The transcript](https://cruxwell.github.io/pcode/transcript/) | What lands in scrollback: diffs, thinking, errors, command output, `/redraw` |
|
|
142
|
+
| [Email remote control](https://cruxwell.github.io/pcode/email/) | Driving a session from Gmail, the remote profile |
|
|
134
143
|
| [Conversation tree](https://cruxwell.github.io/pcode/conversation-tree/) | `/tree`: rewinding and forking a conversation |
|
|
135
144
|
| [Side questions](https://cruxwell.github.io/pcode/side-questions/) | `/btw`: asking about the running turn without interrupting it |
|
|
136
145
|
|
|
@@ -1,12 +1,17 @@
|
|
|
1
|
-
<img width="
|
|
2
|
-
|
|
1
|
+
<img width="1392" height="1522" alt="pcode in a dark terminal" src="docs/assets/screenshots/pcode-dark.png" />
|
|
2
|
+
|
|
3
|
+
<img width="1392" height="1522" alt="pcode in a light terminal" src="docs/assets/screenshots/pcode-light.png" />
|
|
3
4
|
|
|
4
5
|
# pcode
|
|
5
6
|
|
|
6
|
-
pcode is a terminal-native coding agent
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
pcode is a terminal-native coding agent that lets you change what's visible in
|
|
8
|
+
your scrollback, even after the work is done. Expand commands, output, and diffs
|
|
9
|
+
when you need the details; hide them when you want to read the conversation.
|
|
10
|
+
The same history, with the detail you choose.
|
|
11
|
+
|
|
12
|
+
Long-running commands continue in the background and wake the agent when they
|
|
13
|
+
finish. Run sessions in separate git worktrees, or rewind and branch a
|
|
14
|
+
conversation to try another approach.
|
|
10
15
|
|
|
11
16
|
- **Slow work doesn't block you.** Long commands become background jobs, and a
|
|
12
17
|
finished job wakes the agent, so it can watch tests or CI and fix what fails.
|
|
@@ -14,8 +19,9 @@ tool call stays inspectable.
|
|
|
14
19
|
on one repo at once.
|
|
15
20
|
- **Rewind and fork.** `/tree` returns to any point in a conversation and
|
|
16
21
|
branches from there. Every session is kept, so you can resume or search it.
|
|
17
|
-
- **
|
|
18
|
-
|
|
22
|
+
- **Change your view, not your history.** Show or hide commands, output, and
|
|
23
|
+
diffs throughout the conversation. Hidden output stays available, and `/tools`
|
|
24
|
+
lets you inspect every tool call and its full output.
|
|
19
25
|
|
|
20
26
|
It runs on any model [Pydantic AI](https://ai.pydantic.dev/) supports, or on
|
|
21
27
|
your Claude or ChatGPT subscription.
|
|
@@ -42,23 +48,24 @@ uv tool install 'pcode[claude]'
|
|
|
42
48
|
## Quick start
|
|
43
49
|
|
|
44
50
|
```sh
|
|
45
|
-
|
|
46
|
-
pcode -m openai-codex:gpt-5.6-luna #
|
|
47
|
-
pcode
|
|
51
|
+
pcode -m claude:claude-sonnet-5 # Claude subscription; run /login claude if not signed in
|
|
52
|
+
pcode -m openai-codex:gpt-5.6-luna # ChatGPT subscription (/login openai-codex)
|
|
53
|
+
pcode -m anthropic:claude-sonnet-5 # or any provider, with its API key set
|
|
54
|
+
pcode # reuses the model /model (Ctrl+L) saved; with none, an offline preview
|
|
48
55
|
pcode -C /path/to/repo "Summarize the open TODOs"
|
|
49
56
|
git diff | pcode -p --no-save # non-interactive: reply to stdout
|
|
50
57
|
pcode --continue # resume this directory's newest session
|
|
51
58
|
pcode --theme-preview # offline sample output and the style gallery
|
|
52
59
|
```
|
|
53
60
|
|
|
54
|
-
**
|
|
61
|
+
**The agent edits files and runs shell commands with your permissions and no
|
|
55
62
|
approval prompt.** Read [tool permissions](https://cruxwell.github.io/pcode/tools/#tool-permissions)
|
|
56
63
|
before pointing it at anything you care about.
|
|
57
64
|
|
|
58
65
|
## More
|
|
59
66
|
|
|
60
67
|
- **Your subscription:** Claude runs through Anthropic's own Agent SDK and
|
|
61
|
-
Claude Code login
|
|
68
|
+
Claude Code login (the route Anthropic supports), and ChatGPT through a Codex
|
|
62
69
|
login. See [providers](https://cruxwell.github.io/pcode/providers/).
|
|
63
70
|
- [Email remote control](https://cruxwell.github.io/pcode/email/): send a task
|
|
64
71
|
from Gmail on your phone, reply to keep going, and take the session over at a
|
|
@@ -68,10 +75,10 @@ before pointing it at anything you care about.
|
|
|
68
75
|
`jj` to leave insert mode.
|
|
69
76
|
- `/btw` side questions, background sessions, recall of past sessions, a
|
|
70
77
|
browser the agent can drive, and Python extensions.
|
|
71
|
-
- Pydantic AI's Harness coder
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
78
|
+
- Built on Pydantic AI's Harness coder, with MCP (OAuth and tool search),
|
|
79
|
+
searchable sessions, jobs and worktrees on top. Extensions are plain
|
|
80
|
+
Pydantic AI capabilities. The conversation tree follows
|
|
81
|
+
[pi](https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/docs/tree.md)'s.
|
|
75
82
|
|
|
76
83
|
See [PLAN.md](https://github.com/cruxwell/pcode/blob/master/PLAN.md) for the longer-term direction.
|
|
77
84
|
|
|
@@ -79,21 +86,23 @@ See [PLAN.md](https://github.com/cruxwell/pcode/blob/master/PLAN.md) for the lon
|
|
|
79
86
|
|
|
80
87
|
| Page | What it covers |
|
|
81
88
|
| --- | --- |
|
|
82
|
-
| [Getting started](https://cruxwell.github.io/pcode/getting-started/) | Homebrew and source installs,
|
|
89
|
+
| [Getting started](https://cruxwell.github.io/pcode/getting-started/) | Homebrew, uv and source installs, signing in, `--print`, shell completion |
|
|
83
90
|
| [Scrollback and transparency](https://cruxwell.github.io/pcode/guide/scrollback/) | Guide: what goes into scrollback, `/tools`, `/diffs` |
|
|
84
91
|
| [A shell for long-running work](https://cruxwell.github.io/pcode/guide/shell/) | Guide: background jobs, watching CI |
|
|
85
92
|
| [Parallel agents](https://cruxwell.github.io/pcode/guide/parallel/) | Guide: worktrees, parallel sub-agents, `/agents` |
|
|
86
93
|
| [Extending pcode](https://cruxwell.github.io/pcode/guide/extending/) | Guide: extensions, skills, settings |
|
|
87
|
-
| [Providers and models](https://cruxwell.github.io/pcode/providers/) | Authentication, supported providers, the model picker, reasoning effort, Claude Code,
|
|
94
|
+
| [Providers and models](https://cruxwell.github.io/pcode/providers/) | Authentication, supported providers, the model picker, reasoning effort, Claude Code, proxies |
|
|
88
95
|
| [Configuration](https://cruxwell.github.io/pcode/configuration/) | `pcode config`, per-repository overrides, trusting repository code, the settings table, syntax styles |
|
|
89
96
|
| [Commands and keys](https://cruxwell.github.io/pcode/commands/) | Slash commands, key bindings, vi mode, tmux newlines, status line, `!command`, the diff and tool inspectors |
|
|
90
97
|
| [Keybindings](https://cruxwell.github.io/pcode/keybindings/) | Custom command mappings with `/bind`, Ctrl shortcuts, vi editing, a normal-mode leader, and custom escape sequences such as `jj` |
|
|
98
|
+
| [Terminal setup](https://cruxwell.github.io/pcode/terminal/) | Tab titles, the progress bar, iTerm2 and tmux settings |
|
|
91
99
|
| [Tools](https://cruxwell.github.io/pcode/tools/) | Tool permissions, web search, the browser, code mode |
|
|
92
100
|
| [MCP servers](https://cruxwell.github.io/pcode/mcp/) | Opt-in MCP configuration, OAuth sign-in, deferred tool search |
|
|
93
101
|
| [Working in a repository](https://cruxwell.github.io/pcode/workspace/) | `AGENTS.md`/`CLAUDE.md`, skills as slash commands, one worktree per session |
|
|
94
102
|
| [Sessions and recovery](https://cruxwell.github.io/pcode/sessions/) | Saving, resuming, recalling earlier sessions, checkpoints, retries |
|
|
95
103
|
| [Context, limits and caching](https://cruxwell.github.io/pcode/context/) | Prompt overhead, compaction, output limits, prompt cache notices |
|
|
96
104
|
| [The transcript](https://cruxwell.github.io/pcode/transcript/) | What lands in scrollback: diffs, thinking, errors, command output, `/redraw` |
|
|
105
|
+
| [Email remote control](https://cruxwell.github.io/pcode/email/) | Driving a session from Gmail, the remote profile |
|
|
97
106
|
| [Conversation tree](https://cruxwell.github.io/pcode/conversation-tree/) | `/tree`: rewinding and forking a conversation |
|
|
98
107
|
| [Side questions](https://cruxwell.github.io/pcode/side-questions/) | `/btw`: asking about the running turn without interrupting it |
|
|
99
108
|
|
|
@@ -21,9 +21,9 @@ classifiers = [
|
|
|
21
21
|
]
|
|
22
22
|
requires-python = ">=3.11"
|
|
23
23
|
dependencies = [
|
|
24
|
-
"filelock>=
|
|
24
|
+
"filelock>=4,<5",
|
|
25
25
|
"genai-prices>=0.1.7,<0.2",
|
|
26
|
-
"httpx2>=2.13,<3",
|
|
26
|
+
"httpx2>=2.13.1,<3",
|
|
27
27
|
# Exact: pcode relies on prompt_toolkit internals, and point releases
|
|
28
28
|
# change them. Bump on purpose after tests/test_prompt_toolkit_internals.py
|
|
29
29
|
# and make test-all pass on the new version.
|
|
@@ -34,13 +34,14 @@ dependencies = [
|
|
|
34
34
|
# itself is downloaded on first use, not at install.
|
|
35
35
|
# Harness ships from the pydantic-ai repo with every Pydantic AI release and
|
|
36
36
|
# pins pydantic-ai-slim to the same minor; bump both together.
|
|
37
|
-
"pydantic-ai-harness[exa,coder,codemode,playwright]>=0.
|
|
37
|
+
"pydantic-ai-harness[exa,coder,codemode,playwright]>=0.54.0,<0.55",
|
|
38
38
|
# duckduckgo and web-fetch back the bundled web_research extension when no
|
|
39
39
|
# provider-native search or Exa key is available.
|
|
40
40
|
# google covers both google and google-cloud providers; bedrock pulls boto3.
|
|
41
|
-
"pydantic-ai-slim[anthropic,bedrock,duckduckgo,google,groq,mcp,openai,web-fetch,xai]>=2.
|
|
42
|
-
"rich>=
|
|
41
|
+
"pydantic-ai-slim[anthropic,bedrock,duckduckgo,google,groq,mcp,openai,web-fetch,xai]>=2.54.0,<3",
|
|
42
|
+
"rich>=15,<16",
|
|
43
43
|
# FastMCP 4.x OAuth callback server selects Uvicorn's websockets-sansio protocol.
|
|
44
|
+
# Capped below 17 by google-genai (still <17 as of 2.29), not by pcode.
|
|
44
45
|
"websockets>=15.0.1,<17",
|
|
45
46
|
]
|
|
46
47
|
|
|
@@ -49,7 +50,7 @@ dependencies = [
|
|
|
49
50
|
# (about 95 MB to download, 215 MB installed); the sdist would run whatever
|
|
50
51
|
# `claude` is on PATH instead of the CLI version pcode was verified against.
|
|
51
52
|
claude = [
|
|
52
|
-
"claude-agent-sdk>=0.2.
|
|
53
|
+
"claude-agent-sdk>=0.2.164,<0.3",
|
|
53
54
|
]
|
|
54
55
|
|
|
55
56
|
[project.urls]
|