agenturm 0.1.4__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.
Files changed (86) hide show
  1. agenturm-0.1.4/LICENSE +21 -0
  2. agenturm-0.1.4/PKG-INFO +175 -0
  3. agenturm-0.1.4/README.md +136 -0
  4. agenturm-0.1.4/agenturm.egg-info/PKG-INFO +175 -0
  5. agenturm-0.1.4/agenturm.egg-info/SOURCES.txt +84 -0
  6. agenturm-0.1.4/agenturm.egg-info/dependency_links.txt +1 -0
  7. agenturm-0.1.4/agenturm.egg-info/entry_points.txt +4 -0
  8. agenturm-0.1.4/agenturm.egg-info/requires.txt +14 -0
  9. agenturm-0.1.4/agenturm.egg-info/top_level.txt +1 -0
  10. agenturm-0.1.4/observatory/__init__.py +5 -0
  11. agenturm-0.1.4/observatory/__main__.py +98 -0
  12. agenturm-0.1.4/observatory/ai_summary.py +152 -0
  13. agenturm-0.1.4/observatory/auto.py +212 -0
  14. agenturm-0.1.4/observatory/branding.py +43 -0
  15. agenturm-0.1.4/observatory/client.py +253 -0
  16. agenturm-0.1.4/observatory/core.py +2560 -0
  17. agenturm-0.1.4/observatory/feed_requests.py +65 -0
  18. agenturm-0.1.4/observatory/findings.py +210 -0
  19. agenturm-0.1.4/observatory/integrations/__init__.py +1 -0
  20. agenturm-0.1.4/observatory/integrations/langchain.py +234 -0
  21. agenturm-0.1.4/observatory/integrations/openai_agents.py +186 -0
  22. agenturm-0.1.4/observatory/local_activity.py +296 -0
  23. agenturm-0.1.4/observatory/local_agents.py +960 -0
  24. agenturm-0.1.4/observatory/local_runtime.py +127 -0
  25. agenturm-0.1.4/observatory/local_state.py +86 -0
  26. agenturm-0.1.4/observatory/logs.py +329 -0
  27. agenturm-0.1.4/observatory/metrics.py +305 -0
  28. agenturm-0.1.4/observatory/native_json.py +29 -0
  29. agenturm-0.1.4/observatory/opencode.py +829 -0
  30. agenturm-0.1.4/observatory/otlp_proto.py +210 -0
  31. agenturm-0.1.4/observatory/receiver.py +163 -0
  32. agenturm-0.1.4/observatory/server.py +360 -0
  33. agenturm-0.1.4/observatory/session_status.py +54 -0
  34. agenturm-0.1.4/observatory/shutdown.py +30 -0
  35. agenturm-0.1.4/observatory/storage_derived.py +399 -0
  36. agenturm-0.1.4/observatory/terminal.py +574 -0
  37. agenturm-0.1.4/observatory/terminal_ui.py +2629 -0
  38. agenturm-0.1.4/observatory/themes.py +111 -0
  39. agenturm-0.1.4/observatory/ui_coverage.py +14 -0
  40. agenturm-0.1.4/observatory/ui_diagnostics.py +80 -0
  41. agenturm-0.1.4/observatory/ui_export.py +102 -0
  42. agenturm-0.1.4/observatory/ui_layout.py +39 -0
  43. agenturm-0.1.4/observatory/ui_preferences.py +64 -0
  44. agenturm-0.1.4/observatory/ui_render.py +11 -0
  45. agenturm-0.1.4/observatory/watch.py +107 -0
  46. agenturm-0.1.4/pyproject.toml +58 -0
  47. agenturm-0.1.4/setup.cfg +4 -0
  48. agenturm-0.1.4/tests/test_ai_summary.py +87 -0
  49. agenturm-0.1.4/tests/test_analysis_coverage.py +17 -0
  50. agenturm-0.1.4/tests/test_app_benchmark.py +10 -0
  51. agenturm-0.1.4/tests/test_auto_launcher_e2e.py +138 -0
  52. agenturm-0.1.4/tests/test_brand_media.py +67 -0
  53. agenturm-0.1.4/tests/test_export_coverage.py +40 -0
  54. agenturm-0.1.4/tests/test_feed_concurrency.py +150 -0
  55. agenturm-0.1.4/tests/test_google_adk_otel_e2e.py +234 -0
  56. agenturm-0.1.4/tests/test_javascript_client_e2e.py +125 -0
  57. agenturm-0.1.4/tests/test_langchain_callback_e2e.py +131 -0
  58. agenturm-0.1.4/tests/test_local_ingestion_limits.py +134 -0
  59. agenturm-0.1.4/tests/test_local_runtime.py +72 -0
  60. agenturm-0.1.4/tests/test_native_reader_budgets.py +366 -0
  61. agenturm-0.1.4/tests/test_native_sessions.py +391 -0
  62. agenturm-0.1.4/tests/test_observation_deck.py +524 -0
  63. agenturm-0.1.4/tests/test_observatory.py +1401 -0
  64. agenturm-0.1.4/tests/test_openai_agents_export_e2e.py +180 -0
  65. agenturm-0.1.4/tests/test_opencode.py +422 -0
  66. agenturm-0.1.4/tests/test_otel_export_e2e.py +239 -0
  67. agenturm-0.1.4/tests/test_pydantic_ai_otel_e2e.py +141 -0
  68. agenturm-0.1.4/tests/test_receiver_limits.py +166 -0
  69. agenturm-0.1.4/tests/test_resource_usage.py +70 -0
  70. agenturm-0.1.4/tests/test_session_status.py +64 -0
  71. agenturm-0.1.4/tests/test_session_view.py +391 -0
  72. agenturm-0.1.4/tests/test_shutdown.py +238 -0
  73. agenturm-0.1.4/tests/test_snapshot_unknown_usage.py +21 -0
  74. agenturm-0.1.4/tests/test_statistics_storage_budget.py +18 -0
  75. agenturm-0.1.4/tests/test_storage_derived.py +321 -0
  76. agenturm-0.1.4/tests/test_storage_receiver_hardening.py +179 -0
  77. agenturm-0.1.4/tests/test_summary_coverage.py +16 -0
  78. agenturm-0.1.4/tests/test_summary_scope.py +28 -0
  79. agenturm-0.1.4/tests/test_terminal_branding.py +165 -0
  80. agenturm-0.1.4/tests/test_terminal_only.py +48 -0
  81. agenturm-0.1.4/tests/test_terminal_review.py +162 -0
  82. agenturm-0.1.4/tests/test_terminal_search.py +553 -0
  83. agenturm-0.1.4/tests/test_terminal_themes.py +55 -0
  84. agenturm-0.1.4/tests/test_terminal_usability.py +326 -0
  85. agenturm-0.1.4/tests/test_ui_review_polish.py +217 -0
  86. agenturm-0.1.4/tests/test_ui_status_budget.py +20 -0
agenturm-0.1.4/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 abhishekash
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,175 @@
1
+ Metadata-Version: 2.4
2
+ Name: agenturm
3
+ Version: 0.1.4
4
+ Summary: Terminal-first monitor for AI agent sessions, MCP calls, OpenTelemetry traces, and errors.
5
+ License-Expression: MIT
6
+ Project-URL: Homepage, https://github.com/abhishekash/agenturm
7
+ Project-URL: Documentation, https://github.com/abhishekash/agenturm/blob/main/docs/usage.md
8
+ Project-URL: Repository, https://github.com/abhishekash/agenturm
9
+ Project-URL: Issues, https://github.com/abhishekash/agenturm/issues
10
+ Project-URL: Changelog, https://github.com/abhishekash/agenturm/releases
11
+ Keywords: agents,observability,opentelemetry,otlp,tracing,mcp,codex,claude-code
12
+ Classifier: Development Status :: 3 - Alpha
13
+ Classifier: Environment :: Console
14
+ Classifier: Framework :: AsyncIO
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: Operating System :: OS Independent
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Programming Language :: Python :: 3.13
21
+ Classifier: Programming Language :: Python :: 3.14
22
+ Classifier: Topic :: Software Development :: Debuggers
23
+ Classifier: Topic :: System :: Monitoring
24
+ Requires-Python: >=3.11
25
+ Description-Content-Type: text/markdown
26
+ License-File: LICENSE
27
+ Requires-Dist: textual<9,>=8.2
28
+ Provides-Extra: auto
29
+ Requires-Dist: opentelemetry-sdk<2,>=1.27; extra == "auto"
30
+ Requires-Dist: opentelemetry-exporter-otlp-proto-http<2,>=1.27; extra == "auto"
31
+ Requires-Dist: openinference-instrumentation-openai>=0.1; extra == "auto"
32
+ Requires-Dist: openinference-instrumentation-anthropic>=0.1; extra == "auto"
33
+ Requires-Dist: openinference-instrumentation-langchain>=0.1; extra == "auto"
34
+ Provides-Extra: langchain
35
+ Requires-Dist: langchain-core<2,>=0.3.9; extra == "langchain"
36
+ Provides-Extra: openai-agents
37
+ Requires-Dist: openai-agents<2,>=0.1.0; extra == "openai-agents"
38
+ Dynamic: license-file
39
+
40
+ <p align="center">
41
+ <a href="https://www.agenturm.dev/">
42
+ <img src="media/brand/hero.svg" alt="Agenturm tower-and-lens logo and the headline: Know what your agents are doing. Local observability for Codex, Claude Code, OpenCode, Pi, and OpenTelemetry agents." width="100%">
43
+ </a>
44
+ </p>
45
+
46
+ <p align="center">
47
+ <strong>Follow Codex, Claude Code, OpenCode, and Pi from one terminal.</strong><br>
48
+ See recorded progress, inspect tool calls, and find what needs your attention.
49
+ </p>
50
+
51
+ <p align="center">
52
+ <a href="https://www.agenturm.dev/#demo"><strong>Try the interactive demo →</strong></a> &nbsp;·&nbsp;
53
+ <a href="docs/usage.md">Documentation</a> &nbsp;·&nbsp;
54
+ <a href="docs/privacy.md">Privacy boundaries</a>
55
+ </p>
56
+
57
+ <p align="center">
58
+ <a href="https://github.com/abhishekash/agenturm/actions/workflows/ci.yml"><img src="https://github.com/abhishekash/agenturm/actions/workflows/ci.yml/badge.svg?branch=main" alt="CI"></a>
59
+ <a href="https://www.agenturm.dev/"><img src="https://img.shields.io/badge/interface-terminal-ffbd69?labelColor=191621" alt="Terminal interface"></a>
60
+ <a href="docs/privacy.md"><img src="https://img.shields.io/badge/data-local_by_default-c5adff?labelColor=191621" alt="Local by default"></a>
61
+ <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-b9afc5?labelColor=191621" alt="MIT license"></a>
62
+ </p>
63
+
64
+ ## The view from your terminal
65
+
66
+ <p align="center">
67
+ <a href="https://www.agenturm.dev/#terminal">
68
+ <img src="media/agenturm-terminal.png" alt="Actual Agenturm terminal showing three synthetic agent sessions, recorded status, recent work, and the selected session's progress." width="100%">
69
+ </a>
70
+ </p>
71
+
72
+ <p align="center"><sub>Actual terminal UI · synthetic example records · <a href="docs/investigation-video.md">Watch the walkthrough</a></sub></p>
73
+
74
+ ## Start here. Stay in your terminal.
75
+
76
+ Requires **Python 3.11+**, Git, and [uv](https://docs.astral.sh/uv/getting-started/installation/).
77
+
78
+ On macOS or Linux, install and launch:
79
+
80
+ ```bash
81
+ curl -fsSL https://www.agenturm.dev/install.sh | bash
82
+ agenturm
83
+ ```
84
+
85
+ [Review the installer](https://www.agenturm.dev/install.sh) before running it. On Windows—or if you prefer to install with uv directly:
86
+
87
+ ```bash
88
+ uv tool install --force git+https://github.com/abhishekash/agenturm
89
+ agenturm
90
+ ```
91
+
92
+ Or try it once without installing the command:
93
+
94
+ ```bash
95
+ uvx --from git+https://github.com/abhishekash/agenturm agenturm
96
+ ```
97
+
98
+ ## Find what needs your attention
99
+
100
+ Start with your recent supported agent sessions. Select a record, inspect the evidence, and follow its trace—all in a keyboard-first terminal interface.
101
+
102
+ | Start with… | Then inspect… |
103
+ | --- | --- |
104
+ | **Agents** — sessions, projects, status, and last update | A session's task, recorded progress, current work, and reported waits |
105
+ | **Activity** — what happened in a session | Recorded prompts, messages, shell commands, file changes, and errors |
106
+ | **MCP calls** — tools and servers | Arguments, responses, failures, duration, and linked execution |
107
+ | **Traces** — how a run fits together | Parent and child operations, model usage, and errors |
108
+ | **Host and metrics** — runtime and reported usage | Known local processes, host details, and recorded OTLP metrics |
109
+
110
+ Recent supported Codex, Claude Code, OpenCode, and Pi records are discovered locally—without restarting your agents. Other supported tools can send telemetry through OpenTelemetry to the local receiver.
111
+
112
+ Agenturm is a monitor, not a controller. Reply to agents and approve requests in their own terminals.
113
+
114
+ ### Keyboard first
115
+
116
+ | Key | Action |
117
+ | --- | --- |
118
+ | `1`–`7` | Switch views |
119
+ | `↑` / `↓`, `Enter` | Select and inspect a record |
120
+ | `/` | Search the current view |
121
+ | `e` | Expand details |
122
+ | `t` | Follow the linked trace |
123
+ | `Esc` / `Alt+←` | Return or navigate back |
124
+ | `c` | Copy details |
125
+ | `d` | Open collection diagnostics |
126
+ | `x` | Preview and export selected evidence |
127
+ | `q` | Quit |
128
+
129
+ ### Four terminal themes
130
+
131
+ Press **Ctrl+P → Theme** to choose **Current** (Alpine Ember), **Bright**, **Dark**, or **Solarized**. The selected palette carries through panels, tables, controls, and evidence inspectors.
132
+
133
+ ## Local by default
134
+
135
+ Supported records and telemetry are stored in local SQLite. The built-in receiver listens on `127.0.0.1:14318`. **Local monitoring and recorded-progress summaries need no account or API key.**
136
+
137
+ Captured messages, commands, and tool results can contain sensitive project information. Recognizable credentials are redacted on a best-effort basis. Use `--metadata-only` to omit native session text, commands, and outputs from future ingestion. [Read what is collected and where it goes](docs/privacy.md).
138
+
139
+ Recorded-progress summaries work locally. Optional AI summaries call your configured provider only when explicitly requested. The documented session evidence can include task and action text; review [AI summary setup and data](docs/usage.md#optional-ai-summaries) before enabling one.
140
+
141
+ ## Integrations and documentation
142
+
143
+ - [Complete usage guide](docs/usage.md) — installation, local discovery, keyboard shortcuts, and troubleshooting.
144
+ - [Integrations guide](docs/frameworks.md) — Pydantic AI, Google ADK, Gemini CLI, and other OTLP agents.
145
+ - [Python integrations and automatic SDK capture](docs/python.md)
146
+ - [JavaScript client](docs/javascript.md)
147
+ - [Receiver and OTLP configuration](docs/receiver.md)
148
+ - [Resource budgets and benchmarking](docs/performance.md)
149
+ - [Capture and privacy boundaries](docs/privacy.md)
150
+ - [Brand and terminal themes](docs/branding.md)
151
+
152
+ For conversational queries over recorded MCP executions, see [SpanHound](https://github.com/abhishekash/spanhound), the companion MCP tool.
153
+
154
+ ## Develop
155
+
156
+ ```bash
157
+ git clone https://github.com/abhishekash/agenturm.git
158
+ cd agenturm
159
+ uv sync
160
+ uv run agenturm
161
+ uv run python -m unittest discover -s tests -v
162
+ ```
163
+
164
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for development and demo production. [Issues](https://github.com/abhishekash/agenturm/issues) and focused pull requests with clear reproductions are welcome.
165
+
166
+ <details>
167
+ <summary>Upgrading from Agent Observatory</summary>
168
+
169
+ Agenturm is the new name. Install from this repository to get the `agenturm` command. Existing Python imports (`observatory`), `OBSERVATORY_*` settings, telemetry keys, and `observatory.db` history continue to work. The previous command is retained as an alias. The source install above works independently of PyPI publication.
170
+
171
+ </details>
172
+
173
+ ---
174
+
175
+ **Agenturm** is open source under the [MIT license](LICENSE). Read more at [agenturm.dev](https://www.agenturm.dev/).
@@ -0,0 +1,136 @@
1
+ <p align="center">
2
+ <a href="https://www.agenturm.dev/">
3
+ <img src="media/brand/hero.svg" alt="Agenturm tower-and-lens logo and the headline: Know what your agents are doing. Local observability for Codex, Claude Code, OpenCode, Pi, and OpenTelemetry agents." width="100%">
4
+ </a>
5
+ </p>
6
+
7
+ <p align="center">
8
+ <strong>Follow Codex, Claude Code, OpenCode, and Pi from one terminal.</strong><br>
9
+ See recorded progress, inspect tool calls, and find what needs your attention.
10
+ </p>
11
+
12
+ <p align="center">
13
+ <a href="https://www.agenturm.dev/#demo"><strong>Try the interactive demo →</strong></a> &nbsp;·&nbsp;
14
+ <a href="docs/usage.md">Documentation</a> &nbsp;·&nbsp;
15
+ <a href="docs/privacy.md">Privacy boundaries</a>
16
+ </p>
17
+
18
+ <p align="center">
19
+ <a href="https://github.com/abhishekash/agenturm/actions/workflows/ci.yml"><img src="https://github.com/abhishekash/agenturm/actions/workflows/ci.yml/badge.svg?branch=main" alt="CI"></a>
20
+ <a href="https://www.agenturm.dev/"><img src="https://img.shields.io/badge/interface-terminal-ffbd69?labelColor=191621" alt="Terminal interface"></a>
21
+ <a href="docs/privacy.md"><img src="https://img.shields.io/badge/data-local_by_default-c5adff?labelColor=191621" alt="Local by default"></a>
22
+ <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-b9afc5?labelColor=191621" alt="MIT license"></a>
23
+ </p>
24
+
25
+ ## The view from your terminal
26
+
27
+ <p align="center">
28
+ <a href="https://www.agenturm.dev/#terminal">
29
+ <img src="media/agenturm-terminal.png" alt="Actual Agenturm terminal showing three synthetic agent sessions, recorded status, recent work, and the selected session's progress." width="100%">
30
+ </a>
31
+ </p>
32
+
33
+ <p align="center"><sub>Actual terminal UI · synthetic example records · <a href="docs/investigation-video.md">Watch the walkthrough</a></sub></p>
34
+
35
+ ## Start here. Stay in your terminal.
36
+
37
+ Requires **Python 3.11+**, Git, and [uv](https://docs.astral.sh/uv/getting-started/installation/).
38
+
39
+ On macOS or Linux, install and launch:
40
+
41
+ ```bash
42
+ curl -fsSL https://www.agenturm.dev/install.sh | bash
43
+ agenturm
44
+ ```
45
+
46
+ [Review the installer](https://www.agenturm.dev/install.sh) before running it. On Windows—or if you prefer to install with uv directly:
47
+
48
+ ```bash
49
+ uv tool install --force git+https://github.com/abhishekash/agenturm
50
+ agenturm
51
+ ```
52
+
53
+ Or try it once without installing the command:
54
+
55
+ ```bash
56
+ uvx --from git+https://github.com/abhishekash/agenturm agenturm
57
+ ```
58
+
59
+ ## Find what needs your attention
60
+
61
+ Start with your recent supported agent sessions. Select a record, inspect the evidence, and follow its trace—all in a keyboard-first terminal interface.
62
+
63
+ | Start with… | Then inspect… |
64
+ | --- | --- |
65
+ | **Agents** — sessions, projects, status, and last update | A session's task, recorded progress, current work, and reported waits |
66
+ | **Activity** — what happened in a session | Recorded prompts, messages, shell commands, file changes, and errors |
67
+ | **MCP calls** — tools and servers | Arguments, responses, failures, duration, and linked execution |
68
+ | **Traces** — how a run fits together | Parent and child operations, model usage, and errors |
69
+ | **Host and metrics** — runtime and reported usage | Known local processes, host details, and recorded OTLP metrics |
70
+
71
+ Recent supported Codex, Claude Code, OpenCode, and Pi records are discovered locally—without restarting your agents. Other supported tools can send telemetry through OpenTelemetry to the local receiver.
72
+
73
+ Agenturm is a monitor, not a controller. Reply to agents and approve requests in their own terminals.
74
+
75
+ ### Keyboard first
76
+
77
+ | Key | Action |
78
+ | --- | --- |
79
+ | `1`–`7` | Switch views |
80
+ | `↑` / `↓`, `Enter` | Select and inspect a record |
81
+ | `/` | Search the current view |
82
+ | `e` | Expand details |
83
+ | `t` | Follow the linked trace |
84
+ | `Esc` / `Alt+←` | Return or navigate back |
85
+ | `c` | Copy details |
86
+ | `d` | Open collection diagnostics |
87
+ | `x` | Preview and export selected evidence |
88
+ | `q` | Quit |
89
+
90
+ ### Four terminal themes
91
+
92
+ Press **Ctrl+P → Theme** to choose **Current** (Alpine Ember), **Bright**, **Dark**, or **Solarized**. The selected palette carries through panels, tables, controls, and evidence inspectors.
93
+
94
+ ## Local by default
95
+
96
+ Supported records and telemetry are stored in local SQLite. The built-in receiver listens on `127.0.0.1:14318`. **Local monitoring and recorded-progress summaries need no account or API key.**
97
+
98
+ Captured messages, commands, and tool results can contain sensitive project information. Recognizable credentials are redacted on a best-effort basis. Use `--metadata-only` to omit native session text, commands, and outputs from future ingestion. [Read what is collected and where it goes](docs/privacy.md).
99
+
100
+ Recorded-progress summaries work locally. Optional AI summaries call your configured provider only when explicitly requested. The documented session evidence can include task and action text; review [AI summary setup and data](docs/usage.md#optional-ai-summaries) before enabling one.
101
+
102
+ ## Integrations and documentation
103
+
104
+ - [Complete usage guide](docs/usage.md) — installation, local discovery, keyboard shortcuts, and troubleshooting.
105
+ - [Integrations guide](docs/frameworks.md) — Pydantic AI, Google ADK, Gemini CLI, and other OTLP agents.
106
+ - [Python integrations and automatic SDK capture](docs/python.md)
107
+ - [JavaScript client](docs/javascript.md)
108
+ - [Receiver and OTLP configuration](docs/receiver.md)
109
+ - [Resource budgets and benchmarking](docs/performance.md)
110
+ - [Capture and privacy boundaries](docs/privacy.md)
111
+ - [Brand and terminal themes](docs/branding.md)
112
+
113
+ For conversational queries over recorded MCP executions, see [SpanHound](https://github.com/abhishekash/spanhound), the companion MCP tool.
114
+
115
+ ## Develop
116
+
117
+ ```bash
118
+ git clone https://github.com/abhishekash/agenturm.git
119
+ cd agenturm
120
+ uv sync
121
+ uv run agenturm
122
+ uv run python -m unittest discover -s tests -v
123
+ ```
124
+
125
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for development and demo production. [Issues](https://github.com/abhishekash/agenturm/issues) and focused pull requests with clear reproductions are welcome.
126
+
127
+ <details>
128
+ <summary>Upgrading from Agent Observatory</summary>
129
+
130
+ Agenturm is the new name. Install from this repository to get the `agenturm` command. Existing Python imports (`observatory`), `OBSERVATORY_*` settings, telemetry keys, and `observatory.db` history continue to work. The previous command is retained as an alias. The source install above works independently of PyPI publication.
131
+
132
+ </details>
133
+
134
+ ---
135
+
136
+ **Agenturm** is open source under the [MIT license](LICENSE). Read more at [agenturm.dev](https://www.agenturm.dev/).
@@ -0,0 +1,175 @@
1
+ Metadata-Version: 2.4
2
+ Name: agenturm
3
+ Version: 0.1.4
4
+ Summary: Terminal-first monitor for AI agent sessions, MCP calls, OpenTelemetry traces, and errors.
5
+ License-Expression: MIT
6
+ Project-URL: Homepage, https://github.com/abhishekash/agenturm
7
+ Project-URL: Documentation, https://github.com/abhishekash/agenturm/blob/main/docs/usage.md
8
+ Project-URL: Repository, https://github.com/abhishekash/agenturm
9
+ Project-URL: Issues, https://github.com/abhishekash/agenturm/issues
10
+ Project-URL: Changelog, https://github.com/abhishekash/agenturm/releases
11
+ Keywords: agents,observability,opentelemetry,otlp,tracing,mcp,codex,claude-code
12
+ Classifier: Development Status :: 3 - Alpha
13
+ Classifier: Environment :: Console
14
+ Classifier: Framework :: AsyncIO
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: Operating System :: OS Independent
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Programming Language :: Python :: 3.13
21
+ Classifier: Programming Language :: Python :: 3.14
22
+ Classifier: Topic :: Software Development :: Debuggers
23
+ Classifier: Topic :: System :: Monitoring
24
+ Requires-Python: >=3.11
25
+ Description-Content-Type: text/markdown
26
+ License-File: LICENSE
27
+ Requires-Dist: textual<9,>=8.2
28
+ Provides-Extra: auto
29
+ Requires-Dist: opentelemetry-sdk<2,>=1.27; extra == "auto"
30
+ Requires-Dist: opentelemetry-exporter-otlp-proto-http<2,>=1.27; extra == "auto"
31
+ Requires-Dist: openinference-instrumentation-openai>=0.1; extra == "auto"
32
+ Requires-Dist: openinference-instrumentation-anthropic>=0.1; extra == "auto"
33
+ Requires-Dist: openinference-instrumentation-langchain>=0.1; extra == "auto"
34
+ Provides-Extra: langchain
35
+ Requires-Dist: langchain-core<2,>=0.3.9; extra == "langchain"
36
+ Provides-Extra: openai-agents
37
+ Requires-Dist: openai-agents<2,>=0.1.0; extra == "openai-agents"
38
+ Dynamic: license-file
39
+
40
+ <p align="center">
41
+ <a href="https://www.agenturm.dev/">
42
+ <img src="media/brand/hero.svg" alt="Agenturm tower-and-lens logo and the headline: Know what your agents are doing. Local observability for Codex, Claude Code, OpenCode, Pi, and OpenTelemetry agents." width="100%">
43
+ </a>
44
+ </p>
45
+
46
+ <p align="center">
47
+ <strong>Follow Codex, Claude Code, OpenCode, and Pi from one terminal.</strong><br>
48
+ See recorded progress, inspect tool calls, and find what needs your attention.
49
+ </p>
50
+
51
+ <p align="center">
52
+ <a href="https://www.agenturm.dev/#demo"><strong>Try the interactive demo →</strong></a> &nbsp;·&nbsp;
53
+ <a href="docs/usage.md">Documentation</a> &nbsp;·&nbsp;
54
+ <a href="docs/privacy.md">Privacy boundaries</a>
55
+ </p>
56
+
57
+ <p align="center">
58
+ <a href="https://github.com/abhishekash/agenturm/actions/workflows/ci.yml"><img src="https://github.com/abhishekash/agenturm/actions/workflows/ci.yml/badge.svg?branch=main" alt="CI"></a>
59
+ <a href="https://www.agenturm.dev/"><img src="https://img.shields.io/badge/interface-terminal-ffbd69?labelColor=191621" alt="Terminal interface"></a>
60
+ <a href="docs/privacy.md"><img src="https://img.shields.io/badge/data-local_by_default-c5adff?labelColor=191621" alt="Local by default"></a>
61
+ <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-b9afc5?labelColor=191621" alt="MIT license"></a>
62
+ </p>
63
+
64
+ ## The view from your terminal
65
+
66
+ <p align="center">
67
+ <a href="https://www.agenturm.dev/#terminal">
68
+ <img src="media/agenturm-terminal.png" alt="Actual Agenturm terminal showing three synthetic agent sessions, recorded status, recent work, and the selected session's progress." width="100%">
69
+ </a>
70
+ </p>
71
+
72
+ <p align="center"><sub>Actual terminal UI · synthetic example records · <a href="docs/investigation-video.md">Watch the walkthrough</a></sub></p>
73
+
74
+ ## Start here. Stay in your terminal.
75
+
76
+ Requires **Python 3.11+**, Git, and [uv](https://docs.astral.sh/uv/getting-started/installation/).
77
+
78
+ On macOS or Linux, install and launch:
79
+
80
+ ```bash
81
+ curl -fsSL https://www.agenturm.dev/install.sh | bash
82
+ agenturm
83
+ ```
84
+
85
+ [Review the installer](https://www.agenturm.dev/install.sh) before running it. On Windows—or if you prefer to install with uv directly:
86
+
87
+ ```bash
88
+ uv tool install --force git+https://github.com/abhishekash/agenturm
89
+ agenturm
90
+ ```
91
+
92
+ Or try it once without installing the command:
93
+
94
+ ```bash
95
+ uvx --from git+https://github.com/abhishekash/agenturm agenturm
96
+ ```
97
+
98
+ ## Find what needs your attention
99
+
100
+ Start with your recent supported agent sessions. Select a record, inspect the evidence, and follow its trace—all in a keyboard-first terminal interface.
101
+
102
+ | Start with… | Then inspect… |
103
+ | --- | --- |
104
+ | **Agents** — sessions, projects, status, and last update | A session's task, recorded progress, current work, and reported waits |
105
+ | **Activity** — what happened in a session | Recorded prompts, messages, shell commands, file changes, and errors |
106
+ | **MCP calls** — tools and servers | Arguments, responses, failures, duration, and linked execution |
107
+ | **Traces** — how a run fits together | Parent and child operations, model usage, and errors |
108
+ | **Host and metrics** — runtime and reported usage | Known local processes, host details, and recorded OTLP metrics |
109
+
110
+ Recent supported Codex, Claude Code, OpenCode, and Pi records are discovered locally—without restarting your agents. Other supported tools can send telemetry through OpenTelemetry to the local receiver.
111
+
112
+ Agenturm is a monitor, not a controller. Reply to agents and approve requests in their own terminals.
113
+
114
+ ### Keyboard first
115
+
116
+ | Key | Action |
117
+ | --- | --- |
118
+ | `1`–`7` | Switch views |
119
+ | `↑` / `↓`, `Enter` | Select and inspect a record |
120
+ | `/` | Search the current view |
121
+ | `e` | Expand details |
122
+ | `t` | Follow the linked trace |
123
+ | `Esc` / `Alt+←` | Return or navigate back |
124
+ | `c` | Copy details |
125
+ | `d` | Open collection diagnostics |
126
+ | `x` | Preview and export selected evidence |
127
+ | `q` | Quit |
128
+
129
+ ### Four terminal themes
130
+
131
+ Press **Ctrl+P → Theme** to choose **Current** (Alpine Ember), **Bright**, **Dark**, or **Solarized**. The selected palette carries through panels, tables, controls, and evidence inspectors.
132
+
133
+ ## Local by default
134
+
135
+ Supported records and telemetry are stored in local SQLite. The built-in receiver listens on `127.0.0.1:14318`. **Local monitoring and recorded-progress summaries need no account or API key.**
136
+
137
+ Captured messages, commands, and tool results can contain sensitive project information. Recognizable credentials are redacted on a best-effort basis. Use `--metadata-only` to omit native session text, commands, and outputs from future ingestion. [Read what is collected and where it goes](docs/privacy.md).
138
+
139
+ Recorded-progress summaries work locally. Optional AI summaries call your configured provider only when explicitly requested. The documented session evidence can include task and action text; review [AI summary setup and data](docs/usage.md#optional-ai-summaries) before enabling one.
140
+
141
+ ## Integrations and documentation
142
+
143
+ - [Complete usage guide](docs/usage.md) — installation, local discovery, keyboard shortcuts, and troubleshooting.
144
+ - [Integrations guide](docs/frameworks.md) — Pydantic AI, Google ADK, Gemini CLI, and other OTLP agents.
145
+ - [Python integrations and automatic SDK capture](docs/python.md)
146
+ - [JavaScript client](docs/javascript.md)
147
+ - [Receiver and OTLP configuration](docs/receiver.md)
148
+ - [Resource budgets and benchmarking](docs/performance.md)
149
+ - [Capture and privacy boundaries](docs/privacy.md)
150
+ - [Brand and terminal themes](docs/branding.md)
151
+
152
+ For conversational queries over recorded MCP executions, see [SpanHound](https://github.com/abhishekash/spanhound), the companion MCP tool.
153
+
154
+ ## Develop
155
+
156
+ ```bash
157
+ git clone https://github.com/abhishekash/agenturm.git
158
+ cd agenturm
159
+ uv sync
160
+ uv run agenturm
161
+ uv run python -m unittest discover -s tests -v
162
+ ```
163
+
164
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for development and demo production. [Issues](https://github.com/abhishekash/agenturm/issues) and focused pull requests with clear reproductions are welcome.
165
+
166
+ <details>
167
+ <summary>Upgrading from Agent Observatory</summary>
168
+
169
+ Agenturm is the new name. Install from this repository to get the `agenturm` command. Existing Python imports (`observatory`), `OBSERVATORY_*` settings, telemetry keys, and `observatory.db` history continue to work. The previous command is retained as an alias. The source install above works independently of PyPI publication.
170
+
171
+ </details>
172
+
173
+ ---
174
+
175
+ **Agenturm** is open source under the [MIT license](LICENSE). Read more at [agenturm.dev](https://www.agenturm.dev/).
@@ -0,0 +1,84 @@
1
+ LICENSE
2
+ README.md
3
+ pyproject.toml
4
+ agenturm.egg-info/PKG-INFO
5
+ agenturm.egg-info/SOURCES.txt
6
+ agenturm.egg-info/dependency_links.txt
7
+ agenturm.egg-info/entry_points.txt
8
+ agenturm.egg-info/requires.txt
9
+ agenturm.egg-info/top_level.txt
10
+ observatory/__init__.py
11
+ observatory/__main__.py
12
+ observatory/ai_summary.py
13
+ observatory/auto.py
14
+ observatory/branding.py
15
+ observatory/client.py
16
+ observatory/core.py
17
+ observatory/feed_requests.py
18
+ observatory/findings.py
19
+ observatory/local_activity.py
20
+ observatory/local_agents.py
21
+ observatory/local_runtime.py
22
+ observatory/local_state.py
23
+ observatory/logs.py
24
+ observatory/metrics.py
25
+ observatory/native_json.py
26
+ observatory/opencode.py
27
+ observatory/otlp_proto.py
28
+ observatory/receiver.py
29
+ observatory/server.py
30
+ observatory/session_status.py
31
+ observatory/shutdown.py
32
+ observatory/storage_derived.py
33
+ observatory/terminal.py
34
+ observatory/terminal_ui.py
35
+ observatory/themes.py
36
+ observatory/ui_coverage.py
37
+ observatory/ui_diagnostics.py
38
+ observatory/ui_export.py
39
+ observatory/ui_layout.py
40
+ observatory/ui_preferences.py
41
+ observatory/ui_render.py
42
+ observatory/watch.py
43
+ observatory/integrations/__init__.py
44
+ observatory/integrations/langchain.py
45
+ observatory/integrations/openai_agents.py
46
+ tests/test_ai_summary.py
47
+ tests/test_analysis_coverage.py
48
+ tests/test_app_benchmark.py
49
+ tests/test_auto_launcher_e2e.py
50
+ tests/test_brand_media.py
51
+ tests/test_export_coverage.py
52
+ tests/test_feed_concurrency.py
53
+ tests/test_google_adk_otel_e2e.py
54
+ tests/test_javascript_client_e2e.py
55
+ tests/test_langchain_callback_e2e.py
56
+ tests/test_local_ingestion_limits.py
57
+ tests/test_local_runtime.py
58
+ tests/test_native_reader_budgets.py
59
+ tests/test_native_sessions.py
60
+ tests/test_observation_deck.py
61
+ tests/test_observatory.py
62
+ tests/test_openai_agents_export_e2e.py
63
+ tests/test_opencode.py
64
+ tests/test_otel_export_e2e.py
65
+ tests/test_pydantic_ai_otel_e2e.py
66
+ tests/test_receiver_limits.py
67
+ tests/test_resource_usage.py
68
+ tests/test_session_status.py
69
+ tests/test_session_view.py
70
+ tests/test_shutdown.py
71
+ tests/test_snapshot_unknown_usage.py
72
+ tests/test_statistics_storage_budget.py
73
+ tests/test_storage_derived.py
74
+ tests/test_storage_receiver_hardening.py
75
+ tests/test_summary_coverage.py
76
+ tests/test_summary_scope.py
77
+ tests/test_terminal_branding.py
78
+ tests/test_terminal_only.py
79
+ tests/test_terminal_review.py
80
+ tests/test_terminal_search.py
81
+ tests/test_terminal_themes.py
82
+ tests/test_terminal_usability.py
83
+ tests/test_ui_review_polish.py
84
+ tests/test_ui_status_budget.py
@@ -0,0 +1,4 @@
1
+ [console_scripts]
2
+ agent-goechala = observatory.__main__:main
3
+ agent-observatory = observatory.__main__:main
4
+ agenturm = observatory.__main__:main
@@ -0,0 +1,14 @@
1
+ textual<9,>=8.2
2
+
3
+ [auto]
4
+ opentelemetry-sdk<2,>=1.27
5
+ opentelemetry-exporter-otlp-proto-http<2,>=1.27
6
+ openinference-instrumentation-openai>=0.1
7
+ openinference-instrumentation-anthropic>=0.1
8
+ openinference-instrumentation-langchain>=0.1
9
+
10
+ [langchain]
11
+ langchain-core<2,>=0.3.9
12
+
13
+ [openai-agents]
14
+ openai-agents<2,>=0.1.0
@@ -0,0 +1 @@
1
+ observatory
@@ -0,0 +1,5 @@
1
+ """Local, framework-independent agent observability service and client."""
2
+
3
+ from .client import Client
4
+
5
+ __all__ = ["Client"]