CodeFrog: Find & Fix Bugs Fast with macOS and Mobile Apps – Vibe & Verify

CodeFrog is a professional, Flutter‑based mobile and desktop app that brings modern development workflows to your pocket. With API integrations with GitHub, Linode, Hetzner, and Sendgrid, secure SSH server management, GitHub PR review integrations, and a powerful Web Testing and Security Scanning toolkit, CodeFrog helps you diagnose, fix, and ship software faster—from anywhere.

CodeFrog is currently in development. I hope to have a macOS release before the end of the year.

Ethical and legal use notice: Only run security scans against systems you own or are explicitly authorized to test. Unauthorized scanning may violate laws and terms of service.


Security Scanning Features

CodeFrog’s security scanners focus on high‑signal, read‑only checks inspired by OWASP guidance and industry best practices.

  • Single‑site security scanner with OWASP‑based checks
  • Bulk security scanner connected to Linode API for DNS with concurrent scanning of multiple targets
  • HTTPS/HTTP automatic fallback with clear indicators
  • Real‑time streaming results as scans complete
  • Critical findings popup alerts
  • Severity‑based filtering (Critical, High, Medium, Low, Info)
  • Live findings display while scanning is in progress
  • HTTP fallback indicators throughout the UI
  • Selectable/copyable URLs and findings
  • “Open in browser” buttons for quick access

What this means in practice:

  • CodeFrog performs safe, read‑only HTTP methods (HEAD/GET/OPTIONS)
  • Results stream in as each target finishes—no need to wait for the entire batch
  • If HTTPS fails, CodeFrog retries over HTTP and clearly marks any fallback usage
  • Critical results trigger a blocking alert so you can prioritize remediation immediately

Export & share:

  • Export findings as JSON/Markdown/CSV
  • Copy‑to‑clipboard for single findings or entire result sets
  • Summary chips by severity filtering in bulk mode

Web Testing & Code Analysis Features

A practical suite for validating web experiences and inspecting network characteristics—all in one place.

  • HTML validation

  • Meta tags analysis

  • Page timing metrics

  • Size analysis

  • Accessibility scanning

  • Open Source Vulnerability scanning (OSV.dev)

  • Static analysis with OpenGrep/Semgrep (macOS desktop)

  • Line counting with configurable exclusions (e.g., *.log files)

  • Secrets scanning with Gitleaks (MIT licensed, bundled)

  • Exclusion of third‑party directories (e.g., Pods) from secrets scans

  • Exclusion of Flutter build artifacts (.dart_tool, build) from scans

  • Selectable/copyable validator results with “Copy All Errors” action

  • Display of zero‑count severities in bulk scanner

  • “Scan first N unscanned” functionality for incremental scanning

Highlights:

  • Accurate timing breakdown (DNS, TCP connect, TLS handshake, TTFB, download)
  • Resource inventory with compressed/uncompressed size insights
  • Meta tags validator for Open Graph and Twitter Card with quick previews

GitHub Integration

Turn PR feedback into action with lightweight, mobile‑friendly workflows.

  • PR comments viewer with CodeRabbit integration
  • Easy export of GitHub PR comments into Augment Code markdown task list format
  • Task titles prefixed with PR number and comment number (e.g., “PR#45 Comment #123: task title”)
  • Bulk selection and delete/re‑import functionality for GitHub tasks
  • Filtering for unresolved comments only
  • Hide/expand first comment by default
  • Import options (first/5/10/all comments)
  • Structured AI suggestion parsing with title and description sections
  • Export/post all remaining raw comment texts when lacking AI summary

Benefits:

  • Create actionable tasks from PR comments in seconds
  • Keep review context portable across devices and sessions
  • Maintain signal by filtering unresolved items and hiding nitpicks by default

Servers Screen Features

Manage and monitor your development infrastructure securely.

  • At‑a‑glance server statistics dashboard showing all servers simultaneously
  • Real‑time disk space monitoring with cron job setup
  • SSH connection pooling (one login per unique server)
  • Server management with RSA 4096‑bit SSH keys
  • Secure private key storage via Flutter Secure Storage

Why it matters:

  • Strong, key‑based authentication by default (RSA‑4096)
  • Minimal re‑authentication thanks to connection pooling
  • Early warning on low‑disk conditions—right inside the app

API Integrations & Automation Value

CodeFrog connects to your ecosystem to eliminate manual tasks and coordinate workflows.

Hetzner API

  • SSH key management
  • Server statistics retrieval

Linode API

  • Automated domain discovery for bulk security scanning
  • DNS record enumeration
  • Website target generation from domain records

SendGrid API

  • Disk space notification service (low-disk alerts via email)

GitHub API

  • PR comments retrieval and parsing
  • Issue/comment status management (resolve/unresolve)
  • Task import automation
  • Integration with Augment Code workflow

Each integration replaces multi‑tool manual steps with streamlined, in‑app actions. The result: fewer context switches and faster cycles from feedback to fix.


Architecture and Privacy at a Glance

  • Flutter + Dart with Riverpod for reactive state
  • Read‑only scanners; no active exploitation or credential use
  • Hybrid data model: local SQLite (drift) for session data; secure storage for secrets
  • HTTPS/HTTP fallback clearly indicated; TLS verification on by default
  • Accessibility and WCAG AA contrast targets across the UI

Getting Started

  1. Open CodeFrog and navigate to Web Testing → Security Scan
  2. Enter a URL or switch to Bulk mode to scan multiple targets
  3. Watch live results stream in; use filters and “Open in browser” to inspect quickly
  4. Export findings and copy summaries directly to issues or tasks

For GitHub PR workflows, open the PR viewer to import comments as tasks, filter unresolved discussions, and keep your reviews moving—wherever you are.


A safer, faster path from feedback to fix

With practical, read‑only checks and tight integrations, CodeFrog turns security scanning and web diagnostics into a fast, mobile‑ready workflow. Combine it with GitHub PR tooling and server management to close the loop—from detection to resolution—without leaving your device.

I created a React Native macOS project for using Executorch on device AI

There was a project for Android and iOS but not macOS, so I open sourced my work getting Executorch working in my upcoming app AlienTavern.

Check it out:

https://github.com/greenrobotllc/react-native-executorch-macos

I discovered this song I like:

https://open.spotify.com/track/4FcnVk4OypGKh1LJ27ojtj?si=hydpgZh-Qtiu1YOo2PDc_w

I thought I would be upfront about it… On greenrobot.com there was a publicly available sql file available for a very long time. I removed it.

On greenrobot.com there was a publicly available sql file for a very long time. (not linked anywhere) I removed it. It was from a database backup that for some reason was in public html from I think my time making apps in the facebook app platform days. I have scanned servers manually and also built an automated security scanner and believe there are no more files publicly that shouldn’t be.

I’m sorry. Thanks for websafety.ninja for notifying me there was a vulnerability but not to confirm exactly what it was. It convinced me to scan what was being served and build an automated security scanner for all my domains. This server did not contain any passwords. I used Facebook login for all my apps during that period. I do not collect credit card data. In the future my apps will be more secure I hope. During that time period I developed apps more on the server than locally due to FBML feature from Facebook. I now have switched to local machines for dev and utilize code review from CodeRabbit going forward for most stuff.

Edit: Thinking back, I can’t remember ever putting a file in the web root like that file. I have complained previously about my phone being hacked with a Pegasus like virus that sent horrendous and scary texts I didn’t write and a mac virus that popped up a White House tweet while I was viewing Donald Trump’s tweets. I’d be happy to describe phone hacking more, I have a pinned post on this blog blog.greenrobot.com, but I think it could be that the hackers had access to my computer as well as phone, and in that case they could have had access to my greenrobot.com server as well. If anyone can refer me to someone really technical to talk to about my Pegasus hacking virus please let me know. It’s really disappointing to think about it.

Edit2: I think the file was from a database backup. I didn’t look at the file. I just moved it out of web root.

Edit3: Posted this on LinkedIn, Twitter, Facebook:

Either I messed up and put a sql data file in web root at some point or whoever hacked my phone, mac, or hacked my server and re-added a safety link to greenrobot.com years ago (not me, while I was on a call with ex coworker) did it

I notice I got a photo like from a seymoursayless, then on this photo only I see a less.

I’m not totally sure why this happened but I did delete a tweet and instead send as dm containing an idea I previously told AugmentCode was top secret. The less is not visible on any other of my photos. I am not suggesting AI did it to me. I guess I will calm down and post less stuff online for a bit at least. I showed my Mom this, it’s a little scary.

Update: all instagram photos clicked from notifications have less after the text. Less scared now.

ExecuTorch on macOS with XNNPACK: from OperatorMissing to fast inference

This is a write‑up of what finally made ExecuTorch 1.0.0 LLMs run fast on macOS with the XNNPACK backend, after days of chasing Error::OperatorMissing and build issues.

TL;DR

  • Exported with export_llm using XNNPACK + TorchAO 8da4w
  • Built and included kernels_torchao.xcframework (TorchAO ops) in the app
  • Ensured ExecuTorch’s static operator registrations run at runtime by linking the static libs with -Wl,-force_load,<libpath> (per lib)
  • Avoided duplicate linking by not also adding those .xcframeworks in the “Link Binary With Libraries” build phase
  • Removed -all_load (caused huge duplicate symbols) and fixed malformed linker flags
  • Built via the Xcode workspace (Pods) instead of the standalone project

Symptoms

  • Loading an XNNPACK PTE failed with: Error::OperatorMissing (20)
  • The PTE contained llama::custom_sdpa.out and llama::update_cache.out, but runtime registry didn’t have them
  • Portable model also failed prefill with Error::NotSupported (16) before fixes
  • Adding -all_load “fixed” registrations but exploded into thousands of duplicate symbols (Skia, etc.)

Root cause

ExecuTorch’s custom operators (e.g. LLM llama::* ops, TorchAO ops) are registered via static initializers created by EXECUTORCH_LIBRARY(...). When linking static libraries inside .xcframeworks on Apple, those initializers may not be pulled in unless you force the linker to load the objects that contain them.

If you simply add the .xcframeworks and no code references the contained symbols, the linker can drop them — the registrations don’t execute — and you get OperatorMissing at runtime.

The fix (linker + layout)

  1. Choose a single, consistent way to link
  • Do NOT both:
    • add the ExecuTorch .xcframeworks to the target’s “Link Binary With Libraries” phase, and
    • also -force_load their inner static .a libs in Other Linker Flags.
  • Pick one. We picked -force_load for the inner .a files and removed the .xcframework items from “Link Binary With Libraries” to avoid duplicates.
  1. Force‑load the specific static libraries that contain registrations

For our XNNPACK + LLM + TorchAO build, we needed to force‑load at least these libs (adjust path roots if different):

-Wl,-force_load,$(SRCROOT)/ExecuTorchFrameworks/executorch.xcframework/macos-arm64/libexecutorch_macos.a
-Wl,-force_load,$(SRCROOT)/ExecuTorchFrameworks/executorch_llm.xcframework/macos-arm64/libexecutorch_llm_macos.a
-Wl,-force_load,$(SRCROOT)/ExecuTorchFrameworks/kernels_llm.xcframework/macos-arm64/libkernels_llm_macos.a
-Wl,-force_load,$(SRCROOT)/ExecuTorchFrameworks/kernels_optimized.xcframework/macos-arm64/libkernels_optimized_macos.a
-Wl,-force_load,$(SRCROOT)/ExecuTorchFrameworks/kernels_quantized.xcframework/macos-arm64/libkernels_quantized_macos.a
-Wl,-force_load,$(SRCROOT)/ExecuTorchFrameworks/kernels_torchao.xcframework/macos-arm64/libkernels_torchao_macos.a
-Wl,-force_load,$(SRCROOT)/ExecuTorchFrameworks/backend_xnnpack.xcframework/macos-arm64/libbackend_xnnpack_macos.a
-Wl,-force_load,$(SRCROOT)/ExecuTorchFrameworks/threadpool.xcframework/macos-arm64/libthreadpool_macos.a

Notes:

  • Use the single‐token -Wl,-force_load,<path> form in Xcode’s “Other Linker Flags”. It’s much less error‑prone than manually sprinkling -Xlinker tokens.
  • Do not use -all_load — it can pull in everything and cause thousands of duplicate symbols with other deps (e.g., Skia).
  1. Add header search paths (if you import ObjC headers from ExecuTorch)
$(SRCROOT)/ExecuTorchFrameworks/executorch.xcframework/macos-arm64/Headers
$(SRCROOT)/ExecuTorchFrameworks/executorch_llm.xcframework/macos-arm64/Headers
  1. Build with the workspace
  • Use AlienTavernMobile.xcworkspace (or your workspace) so CocoaPods products resolve. Building only the .xcodeproj can mislead with unrelated missing libs (e.g., DoubleConversion) and isn’t how the app is normally linked.

TorchAO: include kernels_torchao

When exporting with TorchAO 8da4w, the graph includes torchao::quantize_affine/dequantize_affine/choose_qparams etc. Those kernels are not in kernels_quantized — you need kernels_torchao too.

How we built the Apple frameworks (including TorchAO):

cd <executorch_checkout>
./scripts/build_apple_frameworks.sh --Release --torchao

Then we copied the XCFramework(s) into the app’s tree (e.g., ExecuTorchFrameworks/) and added the -force_load entry for kernels_torchao as shown above.

Verifying the operators

Two good checks that caught the issue:

  1. Inspect the PTE to list operators in the plan (Python, optional):
  • Convert PTE flatbuffer to JSON and inspect the operator table
  • Cross‑check whether those ops should be provided by kernels you linked (e.g., TorchAO, LLM custom ops)
  1. Inspect the runtime registry at startup (C++):
  • Log whether the registry contains the ops you need (e.g., llama::custom_sdpa.out, llama::update_cache.out)
  • If missing, your registrations didn’t run — a linking/initializer issue

Common pitfalls we hit

  • Malformed OTHER_LDFLAGS: a stray -Xlinker token on its own makes Xcode treat it as an input path (…/mobile/macos/-Xlinker not found)
  • Using -all_load: caused 6k+ duplicate symbols via transitive static libs (Skia, etc.)
  • Adding .xcframeworks to the Frameworks phase AND also -force_loading their libs: double‑linking and duplicate symbols
  • Forgetting to include kernels_torchao when exporting with TorchAO 8da4w
  • Building the .xcodeproj instead of the workspace: spurious CocoaPods missing‑lib warnings

Minimal troubleshooting checklist

  1. Confirm the PTE contains only ops you know are provided by the set of ExecuTorch libs you’re linking
  2. At runtime, log registry_has_op_function("llama::custom_sdpa.out") and registry_has_op_function("llama::update_cache.out")
  3. If missing, fix linking so static initializers run:
    • Remove .xcframeworks from “Link Binary With Libraries” for the ExecuTorch libs you will -force_load
    • Add -Wl,-force_load,<path> for each required .a inside those .xcframeworks
    • Remove -all_load and fix any stray -Xlinker tokens
  4. Ensure kernels_torchao is included when using TorchAO quantization
  5. Build the workspace, not the project

Why this works

The EXECUTORCH_LIBRARY(namespace, name, fn) macros emit static initializers that register kernels when their object files are linked and loaded. If the linker never pulls in the object containing the initializer, the registration never runs. -force_load guarantees the linker brings in those objects even if nothing directly references them, and the registrations execute.

Suggested docs improvements

  • Provide a “linker recipe” for Apple static linking that includes:
    • The list of .a libs to include for common scenarios (portable, XNNPACK, LLM, TorchAO)
    • A warning against mixing the Frameworks phase with -force_load for the same .xcframework
    • Use of -Wl,-force_load,<path> and avoiding -all_load
  • Add an explicit note that TorchAO exports require kernels_torchao at runtime
  • Include a small runtime snippet to validate op registration (e.g., registry_has_op_function)
  • Include a “PTE inspection” tip for debugging OperatorMissing (flatbuffer → JSON → list ops)

References

  • ExecuTorch 1.0.0
  • XNNPACK backend
  • TorchAO 8da4w export path via export_llm
  • GitHub issue: https://github.com/pytorch/executorch/issues/14809

Video of it running: https://www.youtube.com/shorts/KHXUIlop-1w

Why Cutting SNAP Benefits During the Shutdown Is a Moral and Economic Crisis

As the government shutdown continues, 42 million Americans face an unthinkable reality: no food assistance in November. The USDA has confirmed it will not issue SNAP benefits if the impasse persists, and has explicitly stated it won’t use its $6 billion contingency fund to bridge the gap. This isn’t just a policy failure—it’s a moral catastrophe unfolding in real time.

The Human Cost of Political Gridlock

SNAP (the Supplemental Nutrition Assistance Program) isn’t an abstract line item in a federal budget. It’s the difference between a child eating breakfast before school or going hungry. It’s a senior citizen on a fixed income being able to afford both medication and groceries. It’s a working parent stretching a paycheck that doesn’t quite cover rent and food.

When 42 million people suddenly lose access to food assistance, we’re not talking about statistics. We’re talking about neighbors, coworkers, and family members facing an impossible choice between paying utilities and feeding their children. We’re talking about food banks that are already stretched thin being overwhelmed by desperate families. We’re talking about a humanitarian crisis on American soil.

The Stark Contrast in Priorities

What makes this situation particularly galling is the context in which it’s happening. While millions of Americans are being told there’s no money to help them eat, we’re simultaneously witnessing government spending on projects that seem to exist in an entirely different moral universe. The construction of luxury ballrooms and vanity projects continues while families wonder how they’ll make it through Thanksgiving.

This isn’t about partisan politics—it’s about fundamental priorities. A nation that can find funding for palatial construction projects but claims it cannot feed its most vulnerable citizens has lost sight of its basic moral obligations.

The Economic Ripple Effect

Beyond the immediate humanitarian crisis, cutting SNAP benefits would trigger devastating economic consequences. SNAP isn’t just a lifeline for recipients—it’s an economic multiplier that benefits entire communities. Every dollar in SNAP benefits generates approximately $1.50 to $1.80 in economic activity, according to USDA research.

Small grocery stores in low-income neighborhoods depend on SNAP dollars to stay afloat. When those benefits disappear, we’re not just hurting families—we’re threatening the viability of local businesses, eliminating jobs, and accelerating food desert conditions in vulnerable communities. The economic damage will extend far beyond November, potentially triggering a cascade of closures and job losses that will take years to recover from.

Why a Strong Safety Net Matters for National Stability

Some argue that government assistance creates dependency, but history tells a different story. SNAP and similar programs aren’t just charitable impulses—they’re investments in social stability and economic resilience. When people can’t feed their families, desperation follows. Crime increases. Health crises escalate. Emergency rooms fill with people suffering from malnutrition-related conditions, shifting costs to a more expensive part of our healthcare system.

Countries with strong social safety nets consistently show lower rates of social unrest, better health outcomes, and more stable economies. The question isn’t whether we can afford to maintain SNAP—it’s whether we can afford not to.

The Slippery Slope We’re On

If we allow 42 million Americans to go without food assistance in November 2025, we set a dangerous precedent. What happens in December? What happens the next time there’s a budget impasse? Once we’ve normalized the idea that the most vulnerable among us can be used as bargaining chips in political negotiations, we’ve crossed a line that will be difficult to uncross.

This moment will define us. Future generations will look back and ask how we allowed this to happen—or how we came together to prevent it.

What You Can Do

This crisis demands immediate action:

Contact your representatives: Call, email, or visit the offices of your senators and congressional representatives. Make it clear that allowing SNAP benefits to lapse is unacceptable and that you’ll hold them accountable at the ballot box.

Support local food banks: Organizations like Feeding America and local food pantries will be on the front lines if SNAP benefits disappear. They need donations and volunteers now more than ever.

Amplify the voices of those affected: Share stories from your community about what SNAP means to real families. Humanize this crisis by putting faces and names to the statistics.

Demand budget transparency: Ask why funding for certain projects continues while nutrition assistance faces cuts. Push for clarity on spending priorities.

Vote: Remember this moment when election day comes. Support candidates who treat food security as the non-negotiable issue it should be.

The Bottom Line

We are one of the wealthiest nations in human history. We have the resources to ensure no one goes hungry. Whether we have the political will and moral courage to do so is the question before us right now.

Allowing 42 million Americans to lose food assistance isn’t an inevitable consequence of budgetary constraints—it’s a choice. And it’s a choice that speaks volumes about who we are as a nation and what we value.

The time to act is now. Before November arrives. Before families face empty cupboards. Before we normalize a level of cruelty that should be unthinkable in a nation as prosperous as ours.

Our silence is complicity. Our action is imperative. The question is simple: What side of history will we be on?

Encryption registration guidance sought

Have any of my colleagues registered with the government because you shipped an app that includes encryption? Could you ask around for me if not you yourself doing it? My MacOS, iOS, and Android app uses PointyCastle through Dart Flutter for SSH capability. I had AI produce a doc outlining what to do.

Here is an excerpt from the instructions for registering:

Submit Annual License Exception ENC Self-Classification Report

Reporting Period: Report covers January 1 – December 31 of each calendar year

Deadline: Report must be received by BIS and the ENC Encryption Request Coordinator by February 1 of the following year

Format Requirements: Prepare report per Supplement No. 8 to Part 742 in CSV format including:
Product Name
Model Number
Manufacturer
ECCN (Export Control Classification Number)
Authorization Type
Item Type
Submitter Name
Telephone Number
E-Mail Address
Mailing Address
Non-U.S. Components
Non-U.S. Manufacturing Locations

No New Products: If no new products qualify for reporting, send a “no changes” email notification

Submission Methods:

Electronic: Send as attachment to crypt-supp8@bis.doc.gov and enc@nsa.gov with subject line “self-classification report”

Mail: Send to BIS and ENC addresses as listed in the applicable rule


Have you done this? Would love some help!

I launched my gun stopper drone web game

Check it out:

https://game.gunstopperdrone.com

Single player, race against the clock to defuse a dangerous situation using a drone against an armed attacker.

Playable on desktop or mobile.

I hope this game is inspiration for a real life drone that can tase. I couldn’t figure out the FAA regulations so I made a game to start with.