{"repo":"NousResearch/hermes-agent","public_id":"119274","display_label":"skill linter finding formatter bug fixes","summary":"These items address a bug where the skill linter's format_findings() function raised an AttributeError due to LintFinding lacking a .format() method. The fixes restore and correct the finding formatter, including plugin compatibility output rendering.","subsystem":null,"counts":{"members":4,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":1,"attempt_prs":2},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":126164,"merged_at":"2026-09-28T17:21:42+00:00"},"resolution":{"state":"unresolved","by":null},"freshness":{"state":"verified","last_verified_at":"2026-09-28T17:21:42+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.5},"fix_edges":[{"issue_number":119274,"pr_number":126164,"tier":"verified","basis":"superseded_ref","confidence":0.9,"recoverable_from_timeline":false,"pr_merged_at":"2026-09-28T17:21:42+00:00"}],"members":[{"kind":"issue","number":119274,"title":"[Bug]: tools/skill_linter.py: format_findings() raises AttributeError — LintFinding has no .format()","url":null,"state":"closed"},{"kind":"pr","number":119287,"title":"fix(tools): render skill lint findings","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"a5bd246865bd","number":0},{"kind":"pr","value":"#126164","number":126164}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":119289,"title":"fix(skill-linter): restore plugin compat finding formatter","url":null,"state":"closed","close_reason":{"refs":[{"kind":"commit","value":"a5bd246865b","number":0},{"kind":"pr","value":"#126164","number":126164}],"category":"uncategorized","implication":"needs_llm"},"merged":false},{"kind":"pr","number":126164,"title":"Old pre-decomposition import paths are gone: plugin compat layer removed on schedule","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":[".github/workflows/lint.yml","AGENTS.md","COMPAT_MANIFEST.md","acp_adapter/auth.py","acp_adapter/edit_approval.py","acp_adapter/events.py","acp_adapter/server.py","acp_adapter/session.py","agent/agent_init.py","agent/agent_runtime_helpers.py","agent/anthropic_adapter.py","agent/aux_accounting.py","agent/auxiliary_client.py","agent/backend_identity.py","agent/background_review.py","agent/bedrock_adapter.py","agent/bounded_response.py","agent/browser_provider.py","agent/browser_registry.py","agent/codex_runtime.py","agent/coding_context.py","agent/context_compressor.py","agent/conversation_compression.py","agent/conversation_loop.py","agent/credential_sources.py","agent/display.py","agent/error_surface.py","agent/estop.py","agent/file_safety.py","agent/image_gen_provider.py","agent/image_gen_registry.py","agent/learning_graph_render.py","agent/lsp/eventlog.py","agent/lsp/protocol.py","agent/monitoring/cron_health.py","agent/monitoring/emitter.py","agent/monitoring/gateway_health.py","agent/monitoring/gateway_health_export.py","agent/nous_rate_guard.py","agent/outbound_webhooks.py","agent/pet/generate/atlas.py","agent/prompt_builder.py","agent/prompt_cache_boundary.py","agent/proxy_sources/iron_proxy.py","agent/reasoning_effort.py","agent/relay_llm.py","agent/relay_runtime.py","agent/relay_tools.py","agent/review_idle_queue.py","agent/secret_sources/_cache.py","agent/secret_sources/bitwarden.py","agent/secret_sources/command.py","agent/secret_sources/onepassword.py","agent/shell_hooks.py","agent/skill_bundles.py","agent/skill_utils.py","agent/system_prompt.py","agent/terminal_env_registry.py","agent/transcript_repair.py","agent/transcription_provider.py","agent/transcription_registry.py","agent/transports/chat_completions.py","agent/transports/codex.py","agent/transports/codex_app_server.py","agent/tts_registry.py","agent/turn_context.py","agent/turn_retry_state.py","agent/usage_pricing.py","agent/video_gen_provider.py","agent/video_gen_registry.py","agent/web_search_provider.py","agent/web_search_registry.py","apps/desktop/electron/main.ts","apps/desktop/electron/plugin-compat-notice.test.ts","apps/desktop/electron/plugin-compat-notice.ts","cli.py","compat_manifest.json","cron/jobs.py","cron/scheduler.py","cron/scheduler_provider.py","gateway/browser_control_artifacts.py","gateway/browser_control_broker.py","gateway/config.py","gateway/delivery_ledger.py","gateway/disk_status.py","gateway/hosted_room_discussion.py","gateway/hosted_room_driver.py","gateway/hosted_room_execution_policy.py","gateway/hosted_room_peer.py","gateway/hosted_room_replicas.py","gateway/hosted_rooms.py","gateway/kanban_watchers.py","gateway/memory_status.py","gateway/platforms/helpers.py","gateway/platforms/qqbot/adapter.py","gateway/platforms/qqbot/chunked_upload.py","gateway/platforms/qqbot/keyboards.py","gateway/platforms/signal.py","gateway/platforms/weixin.py","gateway/platforms/yuanbao.py","gateway/platforms/yuanbao_media.py","gateway/platforms/yuanbao_proto.py","gateway/relay/__init__.py","gateway/relay/adapter.py","gateway/relay/auth.py","gateway/response_filters.py","gateway/restart_loop_guard.py","gateway/run.py","gateway/session.py","gateway/slash_access.py","gateway/slash_commands.py","gateway/startup_watchdog.py","gateway/status.py","gateway/sticker_cache.py","gateway/stream_consumer.py","gateway/stream_dispatch.py","gateway/systemd_notify.py","hermes_cli/agent_import.py","hermes_cli/auth.py","hermes_cli/backup.py","hermes_cli/browser_connect.py","hermes_cli/callbacks.py","hermes_cli/checkpoints.py","hermes_cli/cli_info_mixin.py","hermes_cli/commands.py","hermes_cli/config.py","hermes_cli/config_defaults.py","hermes_cli/console_engine.py","hermes_cli/curses_ui.py","hermes_cli/dashboard_auth/audit.py","hermes_cli/dashboard_auth/middleware.py","hermes_cli/dingtalk_auth.py","hermes_cli/doctor.py","hermes_cli/doctor_config.py","hermes_cli/doctor_live.py","hermes_cli/focus_view.py","hermes_cli/foreign_sessions.py","hermes_cli/gateway.py","hermes_cli/gitlock.py","hermes_cli/heartbeat.py","hermes_cli/journey.py","hermes_cli/kanban.py","hermes_cli/kanban_db.py","hermes_cli/kanban_decompose.py","hermes_cli/kanban_diagnostics.py","hermes_cli/local_runtime/binaries.py","hermes_cli/local_runtime/bootstrap.py","hermes_cli/local_runtime/capabilities.py","hermes_cli/local_runtime/catalog.py","hermes_cli/local_runtime/hf_browse.py","hermes_cli/main.py","hermes_cli/mcp_picker.py","hermes_cli/mcp_security.py","hermes_cli/middleware.py","hermes_cli/moa_config.py","hermes_cli/model_setup_flows.py","hermes_cli/model_switch.py","hermes_cli/models.py","hermes_cli/nous_billing.py","hermes_cli/nous_subscription.py","hermes_cli/observability/relay_runtime.py","hermes_cli/observability/relay_shared_metrics.py","hermes_cli/onepassword_secrets_cli.py","hermes_cli/platform_actions.py","hermes_cli/plugin_compat.py","hermes_cli/plugins.py","hermes_cli/plugins_cmd.py","hermes_cli/plugins_cmd_listing.py","hermes_cli/plugins_loader.py","hermes_cli/profile_describer.py","hermes_cli/profile_distribution.py","hermes_cli/profiles.py","hermes_cli/runtime_provider.py","hermes_cli/security_advisories.py","hermes_cli/setup.py","hermes_cli/slack_cli.py","hermes_cli/sqlite_safe_read.py","hermes_cli/status.py","hermes_cli/subcommands/plugins.py","hermes_cli/telegram_managed_bot.py","hermes_cli/tools_config.py","hermes_cli/update_cmd.py","hermes_cli/update_cmd_maint.py","hermes_cli/update_inventory.py","hermes_cli/web_deps.py","hermes_cli/web_routers/cron.py","hermes_cli/web_routers/mcp.py","hermes_cli/web_routers/sessions.py","hermes_cli/web_routers/skills.py","hermes_cli/web_routers/tools.py","hermes_cli/web_server.py","hermes_cli/webhook.py","hermes_cli/win_pty_bridge.py","hermes_logging.py","hermes_state.py","hermes_state_registry.py","hermes_state_search.py","plugins/AGENTS.md","plugins/browser/browser_use/provider.py","plugins/browser/browserbase/provider.py","plugins/browser/firecrawl/provider.py","plugins/context_engine/__init__.py","plugins/cron_providers/__init__.py","plugins/cron_providers/chronos/__init__.py","plugins/cron_providers/chronos/_nas_client.py","plugins/dashboard_auth/basic/__init__.py","plugins/dashboard_auth/drain/__init__.py","plugins/dashboard_auth/nous/__init__.py","plugins/dashboard_auth/self_hosted/__init__.py","plugins/google_meet/audio_bridge.py","plugins/google_meet/meet_bot.py","plugins/google_meet/node/cli.py","plugins/google_meet/node/registry.py","plugins/image_gen/deepinfra/__init__.py","plugins/image_gen/fal/__init__.py","plugins/image_gen/krea/__init__.py","plugins/image_gen/openai/__init__.py","plugins/image_gen/xai/__init__.py","plugins/memory/honcho/__init__.py","plugins/memory/honcho/client.py","plugins/memory/honcho/oauth.py","plugins/memory/honcho/session.py","plugins/memory/mem0/__init__.py","plugins/memory/mem0/_setup.py","plugins/memory/retaindb/__init__.py","plugins/memory/supermemory/__init__.py","plugins/platforms/a2a/protocol.py","plugins/platforms/a2a/security.py","plugins/platforms/a2a/tools.py","plugins/platforms/dingtalk/adapter.py","plugins/platforms/discord/adapter.py","plugins/platforms/feishu/feishu_comment.py","plugins/platforms/google_chat/oauth.py","plugins/platforms/irc/adapter.py","plugins/platforms/line/adapter.py","plugins/platforms/matrix/adapter.py","plugins/platforms/ntfy/adapter.py","plugins/platforms/photon/adapter.py","plugins/platforms/photon/auth.py","plugins/platforms/photon/cli.py","plugins/platforms/raft/adapter.py","plugins/platforms/teams/adapter.py","plugins/platforms/telegram/adapter.py","plugins/platforms/telegram/telegram_ids.py","plugins/platforms/wecom/adapter.py","plugins/spotify/__init__.py","plugins/spotify/client.py","plugins/spotify/tools.py","plugins/teams_pipeline/cli.py","plugins/teams_pipeline/meetings.py","plugins/teams_pipeline/pipeline.py","plugins/teams_pipeline/subscriptions.py","plugins/video_gen/fal/__init__.py","plugins/video_gen/xai/__init__.py","plugins/web/brave_free/provider.py","plugins/web/ddgs/provider.py","plugins/web/exa/provider.py","plugins/web/firecrawl/provider.py","plugins/web/keenable/provider.py","plugins/web/parallel/provider.py","plugins/web/searxng/provider.py","plugins/web/tavily/provider.py","plugins/web/xai/provider.py","providers/__init__.py","run_agent.py","scripts/check_compat_pointers.py","tests/agent/test_run_agent.py","tests/evals/test_codebase_navigability.py","tests/fixtures/resolution_allowlist.json","tests/hermes_cli/test_compat_manifest_targets.py","tests/hermes_cli/test_plugin_compat_notice.py","tests/hermes_cli/test_plugin_compat_scan_cache.py","tests/scripts/test_check_compat_pointers.py","tests/scripts/test_compat_inventory.py","tests/tools/test_plugin_compat_warning.py","tools/apply_layout_tool.py","tools/approval.py","tools/async_delegation.py","tools/browser_camofox_state.py","tools/browser_dialog_tool.py","tools/browser_supervisor.py","tools/browser_tool.py","tools/clarify_gateway.py","tools/close_preview_tool.py","tools/code_execution_tool.py","tools/code_kernel_remote.py","tools/computer_use/__init__.py","tools/computer_use/cua_backend.py","tools/computer_use/permissions.py","tools/computer_use/tool.py","tools/cronjob_tools.py","tools/delegate_tool.py","tools/delegation_live_log.py","tools/delegation_output_schema.py","tools/discord_tool.py","tools/drive_preview_tool.py","tools/env_probe.py","tools/environments/base.py","tools/environments/managed_modal.py","tools/environments/modal_utils.py","tools/environments/vercel_sandbox.py","tools/feishu_doc_tool.py","tools/feishu_drive_tool.py","tools/file_operations.py","tools/file_tools.py","tools/focus_pane_tool.py","tools/fuzzy_match.py","tools/image_generation_tool.py","tools/managed_tool_gateway.py","tools/mcp_oauth.py","tools/mcp_schema_cache.py","tools/mcp_tool.py","tools/memory_tool.py","tools/microsoft_graph_client.py","tools/open_preview_tool.py","tools/openrouter_client.py","tools/path_security.py","tools/preview_tool.py","tools/process_registry.py","tools/react_to_message_tool.py","tools/read_extract.py","tools/read_preview_tool.py","tools/read_terminal_tool.py","tools/read_window_tool.py","tools/send_message_tool.py","tools/skill_ledger.py","tools/skill_linter.py","tools/skill_manager_tool.py","tools/skill_usage.py","tools/skillevaluator_scan.py","tools/skills_guard.py","tools/skills_hub.py","tools/skills_sync.py","tools/skills_sync_client.py","tools/skills_tool.py","tools/slash_confirm.py","tools/terminal_scope.py","tools/terminal_tool.py","tools/tool_result_storage.py","tools/tool_search.py","tools/transcription_tools.py","tools/tts_tool.py","tools/url_safety.py","tools/vision_tools.py","tools/voice_mode.py","tools/web_result_cache.py","tools/web_tools.py","tools/website_policy.py","tools/write_approval.py","tools/yuanbao_tools.py","toolsets.py","tui_gateway/AGENTS.md","tui_gateway/compute_host.py","tui_gateway/hosted_room_driver.py","tui_gateway/hosted_room_service.py","tui_gateway/mcp_rpc_helpers.py","tui_gateway/methods_browser_control.py","tui_gateway/methods_prompt.py","website/docs/developer-guide/gateway-session-lifecycle.md","website/docs/developer-guide/plugins/index.md"]}],"trust":{"default_tier":"verified","includes_suggested":false}}