w3bs.AccountStart building
PACKAGES / gptme (Erik Bjareholt)

gptme

Terminal agent with local tools that writes code, runs shell commands and browses the web.

ThreatCrush · No malware found
INSTALLw3bs install gptme.org/gptme

No w3bs yet? curl -fsSL https://w3bs.org/install.sh | sh

Get started

What to type once it is installed.

  1. w3bs install gptme.org/gptmeInstall gptme and track it for updates
  2. gptmeStart an interactive chat with tool use
  3. gptme '<task>'Start a session with a prompt
  4. gptme -n '<task>'Run fully non-interactively, for scripts and CI
  5. gptme -rResume the most recent conversation

Every option: gptme --help · docs ↗

Malware scan

ThreatCrush found no malware indicators in gptme 0.36.0. The other findings below are ordinary code-review notes, not malware.

Scanned
2026-11-05 04:47 UTC · threatcrush 0.13.30
Files
1752 (installer + github.com/gptme/gptme)
Findings
10 high · 48 medium · 28 low
86 other findings (not malware)
  • high
    outbound request to a non-constant URLsource/gptme/cli/doctor.py:933py-ssrf-outbound-request · CWE-918
  • high
    outbound request to a non-constant URLsource/gptme/cli/doctor.py:1368py-ssrf-outbound-request · CWE-918
  • high
    outbound request to a non-constant URLsource/gptme/eval/suites/practical.py:222py-ssrf-outbound-request · CWE-918
  • high
    outbound request to a non-constant URLsource/gptme/mcp/registry.py:76py-ssrf-outbound-request · CWE-918
  • high
    outbound request to a non-constant URLsource/gptme/server/api_v2.py:244py-ssrf-outbound-request · CWE-918
  • high
    outbound request to a non-constant URLsource/gptme/server/api_v2.py:1109py-ssrf-outbound-request · CWE-918
  • high
    outbound request to a non-constant URLsource/gptme/tools/restart.py:236py-ssrf-outbound-request · CWE-918
  • high
    outbound request to a non-constant URLsource/gptme/util/export.py:61py-ssrf-outbound-request · CWE-918
  • high
    outbound request to a non-constant URLsource/scripts/check_model_freshness.py:128py-ssrf-outbound-request · CWE-918
  • high
    outbound request to a non-constant URLsource/scripts/verify_cloudflare_pages_deep_links.py:46py-ssrf-outbound-request · CWE-918
  • medium
    predictable temporary file pathsource/.github/workflows/self-heal.yml:141insecure-temp-file · CWE-377
  • medium
    predictable temporary file pathsource/.github/workflows/self-heal.yml:303insecure-temp-file · CWE-377
  • medium
    stack trace returned to the callersource/gptme/cli/main.py:1757py-stack-trace-returned · CWE-209
  • medium
    stack trace returned to the callersource/gptme/eval/dspy/prompt_optimizer.py:361py-stack-trace-returned · CWE-209
  • medium
    broken hash algorithmsource/gptme/eval/run.py:650py-weak-hash · CWE-327
  • medium
    deserialisation of untrusted datasource/gptme/lessons/parser.py:349py-unsafe-deserialization · CWE-502
  • medium
    stack trace returned to the callersource/gptme/mcp/client.py:179py-stack-trace-returned · CWE-209
  • medium
    stack trace returned to the callersource/gptme/server/api_v2_agents.py:92py-stack-trace-returned · CWE-209
  • medium
    broken hash algorithmsource/gptme/server/api_v2.py:740py-weak-hash · CWE-327
  • medium
    broken hash algorithmsource/gptme/server/api_v2.py:759py-weak-hash · CWE-327
  • medium
    stack trace returned to the callersource/gptme/server/api_v2.py:2844py-stack-trace-returned · CWE-209
  • medium
    broken hash algorithmsource/gptme/server/artifacts_api.py:197py-weak-hash · CWE-327
  • medium
    stack trace returned to the callersource/gptme/server/client.py:291py-stack-trace-returned · CWE-209
  • medium
    stack trace returned to the callersource/gptme/server/tools_api.py:337py-stack-trace-returned · CWE-209
  • medium
    stack trace returned to the callersource/gptme/server/tools_api.py:354py-stack-trace-returned · CWE-209
  • medium
    stack trace returned to the callersource/gptme/server/workspace_api.py:352py-stack-trace-returned · CWE-209
  • medium
    stack trace returned to the callersource/gptme/server/workspace_api.py:357py-stack-trace-returned · CWE-209
  • medium
    stack trace returned to the callersource/gptme/server/workspace_api.py:441py-stack-trace-returned · CWE-209
  • medium
    stack trace returned to the callersource/gptme/server/workspace_api.py:474py-stack-trace-returned · CWE-209
  • medium
    stack trace returned to the callersource/gptme/server/workspace_api.py:535py-stack-trace-returned · CWE-209
  • medium
    stack trace returned to the callersource/gptme/server/workspace_api.py:538py-stack-trace-returned · CWE-209
  • medium
    stack trace returned to the callersource/gptme/server/workspace_api.py:625py-stack-trace-returned · CWE-209
  • medium
    stack trace returned to the callersource/gptme/server/workspace_api.py:630py-stack-trace-returned · CWE-209
  • medium
    stack trace returned to the callersource/gptme/server/workspace_api.py:692py-stack-trace-returned · CWE-209
  • medium
    stack trace returned to the callersource/gptme/server/workspace_api.py:697py-stack-trace-returned · CWE-209
  • medium
    stack trace returned to the callersource/gptme/tools/convert.py:1085py-stack-trace-returned · CWE-209
  • medium
    stack trace returned to the callersource/gptme/tools/mcp_adapter.py:1237py-stack-trace-returned · CWE-209
  • medium
    deserialisation of untrusted datasource/gptme/tools/python_kernel.py:262py-unsafe-deserialization · CWE-502
  • medium
    stack trace returned to the callersource/gptme/tools/subagent/batch.py:176py-stack-trace-returned · CWE-209
  • medium
    `v-html` bindingsource/gptme/util/export_templates/index.html:138tpl-vue-v-html · CWE-79
  • medium
    unescaped HTML renderingsource/gptme/util/export_templates/main.js:532js-unescaped-html-sink · CWE-79
  • medium
    predictable temporary filesource/scripts/computer_home/mutter_startup.sh:5sh-predictable-temp-path · CWE-377
  • medium
    predictable temporary filesource/scripts/computer_home/novnc_startup.sh:11sh-predictable-temp-path · CWE-377
  • medium
    predictable temporary filesource/scripts/computer_home/tint2_startup.sh:5sh-predictable-temp-path · CWE-377
  • medium
    predictable temporary filesource/scripts/computer_home/x11vnc_startup.sh:9sh-predictable-temp-path · CWE-377
  • medium
    predictable temporary filesource/scripts/computer_home/x11vnc_startup.sh:31sh-predictable-temp-path · CWE-377
  • medium
    broken hash algorithmsource/scripts/treeofthoughts.py:145py-weak-hash · CWE-327
  • medium
    redirect to a non-constant destinationsource/site/next/src/client.ts:12js-open-redirect · CWE-601
  • medium
    unescaped HTML renderingsource/webui/src/components/CodeDisplay.tsx:74js-unescaped-html-sink · CWE-79
  • medium
    unescaped HTML renderingsource/webui/src/components/TabbedCodeBlock.tsx:90js-unescaped-html-sink · CWE-79
  • medium
    dynamic code executionsource/webui/src/utils/consoleProxy.ts:61js-dynamic-code-execution · CWE-95
  • medium
    unescaped HTML renderingsource/webui/src/utils/markdownRenderer.ts:131js-unescaped-html-sink · CWE-79
  • medium
    unescaped HTML renderingsource/webui/src/utils/markdownRenderer.ts:154js-unescaped-html-sink · CWE-79
  • medium
    unescaped HTML renderingsource/webui/src/utils/markdownRenderer.ts:180js-unescaped-html-sink · CWE-79
  • medium
    unescaped HTML renderingsource/webui/src/utils/markdownRenderer.ts:214js-unescaped-html-sink · CWE-79
  • medium
    unescaped HTML renderingsource/webui/src/utils/markdownRenderer.ts:279js-unescaped-html-sink · CWE-79
  • medium
    redirect to a non-constant destinationsource/webui/src/utils/navigation.ts:8js-open-redirect · CWE-601
  • medium
    redirect to a non-constant destinationsource/webui/src/utils/taskApi.ts:229js-open-redirect · CWE-601
  • low
    predictable temporary file pathsource/docs/releases/v0.32.0.md:1211insecure-temp-file · CWE-377
  • low
    Hardcoded Credentialsource/gptme/eval/suites/practical9.py:178secret-generic-credential · CWE-798
  • low
    shell command built from a stringsource/gptme/eval/swe_extra/swe_bench_test_spec.py:137py-shell-command-string · CWE-78
  • low
    shell command built from a stringsource/gptme/eval/swe_extra/swe_bench_test_spec.py:147py-shell-command-string · CWE-78
  • low
    shell command built from a stringsource/gptme/eval/swe_extra/swe_bench_test_spec.py:157py-shell-command-string · CWE-78
  • low
    unescaped HTML renderingsource/site/next/scripts/check-assets.test.mjs:77js-unescaped-html-sink · CWE-79
  • low
    Hardcoded Credentialsource/tauri/src-tauri/src/lib.rs:1191secret-generic-credential · CWE-798
  • low
    predictable temporary file pathsource/tests/test_cli.py:1500insecure-temp-file · CWE-377
  • low
    broken hash algorithmsource/tests/test_eval.py:1264py-weak-hash · CWE-327
  • low
    broken hash algorithmsource/tests/test_eval.py:1265py-weak-hash · CWE-327
  • low
    outbound request to a non-constant URLsource/tests/test_server_bad_input.py:82py-ssrf-outbound-request · CWE-918
  • low
    outbound request to a non-constant URLsource/tests/test_server_bad_input.py:199py-ssrf-outbound-request · CWE-918
  • low
    outbound request to a non-constant URLsource/tests/test_server_bad_input.py:278py-ssrf-outbound-request · CWE-918
  • low
    outbound request to a non-constant URLsource/tests/test_server_startup.py:114py-ssrf-outbound-request · CWE-918
  • low
    Hardcoded Credentialsource/tests/test_shell_redact_secrets.py:24secret-generic-credential · CWE-798
  • low
    JSON Web Tokensource/tests/test_shell_redact_secrets.py:71secret-jwt · CWE-798
  • low
    AWS Access Keysource/tests/test_subagent_unit.py:2872secret-aws-access-key · CWE-798
  • low
    AWS Access Keysource/tests/test_subagent_unit.py:2873secret-aws-access-key · CWE-798
  • low
    deserialisation of untrusted datasource/tests/test_tools_python_kernel.py:436py-unsafe-deserialization · CWE-502
  • low
    deserialisation of untrusted datasource/tests/test_tools_python_kernel.py:451py-unsafe-deserialization · CWE-502
  • low
    predictable temporary file pathsource/tests/test_tools_shell.py:1684insecure-temp-file · CWE-377
  • low
    dynamic code executionsource/tests/test_tools_watch.py:710py-dynamic-code-execution · CWE-95
  • low
    SQL built from a template literal or f-stringsource/tests/test_util_review.py:4050sql-template-interpolation · CWE-89
  • low
    SQL built from a template literal or f-stringsource/tests/test_util_review.py:4071sql-template-interpolation · CWE-89
  • low
    Hardcoded Credentialsource/webui/src/contexts/__tests__/SettingsContext.test.tsx:65secret-generic-credential · CWE-798
  • low
    Hardcoded Credentialsource/webui/src/contexts/__tests__/SettingsContext.test.tsx:66secret-generic-credential · CWE-798
  • low
    unescaped HTML renderingsource/webui/src/utils/__tests__/markdownUtils.test.ts:150js-unescaped-html-sink · CWE-79
  • low
    unescaped HTML renderingsource/webui/src/utils/__tests__/markdownUtils.test.ts:207js-unescaped-html-sink · CWE-79

Badge for your README

ThreatCrush: No malware found

[![ThreatCrush scan](https://w3bs.org/api/packages/gptme.org/gptme/badge.svg)](https://w3bs.org/packages/gptme.org/gptme)