SShortSingh.
Back to feed

Ghost in the Ledger: Open-Weight AI Hunts Hidden Charges in Bank Statements

0
·3 views

A Nigerian developer built Ghost in the Ledger, an open-source tool that reviews bank statements or pasted transaction alerts to surface recurring and hidden spending. Its ghost detection is deterministic code, while an open-weight language model is used only to write short narrative explanations of each finding. Those narratives pass automated checks so that no numbers are invented, and the app supports offline templates, local models through Ollama, or a hosted fallback. The project runs on localhost with no dependencies and is released under the MIT license. It was submitted to the DEV Hacktoberfest Open-Source AI Challenge.

Read the full story at DEV Community

This is an AI-generated summary. ShortSingh links to the original source for the complete article.

Discussion (0)

Log in to join the discussion and vote.

Log in

Related stories

0
ProgrammingDEV Community ·

Stack3 Security Uses TigerGraph to Link Repo, Package, and Wallet Threats

Stack3 Security is a Web3 security platform built at Hacker House Goa for the TigerGraph Open Innovation track. It aims to connect threat signals that are usually investigated separately, such as malicious repositories, suspicious packages, phishing websites, and risky wallet requests. A VS Code extension clones and scans public GitHub repositories in quarantine without executing their code, checking for auto-run configurations, exposed secrets, and risky npm dependencies. A Chrome extension inspects suspicious websites and intercepts wallet requests before they reach MetaMask, while degrading gracefully if unavailable. A central dashboard offers scanning, authentication, and a one-hop threat graph view that shows connected threat intelligence.

0
ProgrammingDEV Community ·

Keep etcd peer and client certificate trust separate before scaling a cluster

etcd is a durable control store used by many Kubernetes and platform deployments, and its peer and client connections access the same state. Because a certificate authenticating a cluster member can act with more authority than an ordinary client certificate, treating them as one broad TLS population weakens the cluster boundary. The guidance recommends separating them through distinct certificate profiles, subject alternative names, issuance policies, and allowed peer names, even when a single CA is used. Operators should verify TLS in both directions on every member, map each client certificate to a specific workload with least-privilege access, and test that peer and client certificates are rejected at the wrong endpoints.

0
ProgrammingDEV Community ·

AutoDAgger lets compact robot policies learn from a teacher with far less data

Researchers introduced AutoDAgger, a method that recovers teacher trajectories during a student policy's own rollouts instead of in a separate data-collection stage. It collects recovery data more than twice as fast as the human-monitored HG-DAgger and removes the need for a person to supervise the process. Using an autonomous reward model to trigger teacher takeovers, a student policy rose from a baseline score of 27.8 to 63.9 after 30 episodes and 77.8 after 90 episodes. The TILDE approach reportedly outperformed all evaluated baselines on three manipulation tasks, though the study tested only those tasks and assumed a reliable reward signal. Its robustness under sparse teacher interventions or noisy rewards remains unresolved.

0
ProgrammingDEV Community ·

kanna-di: A Compile-Time Go DI Tool as a Successor to google/wire

Google's wire is no longer accepting new features, leaving Go developers looking for an alternative for compile-time dependency injection. The author introduces kanna-di, which generates plain Go code without runtime imports, like wire. Unlike wire, it requires no provider registration: developers mark a container struct with a //kanna:container annotation, and the tool infers constructors from each field's type and resolves their parameters recursively. Interface implementations are specified with a di:"with=..." tag, and any non-injectable setup, such as opening a database, is written by hand in the composition root. Running go generate then produces a di_gen.go file containing a newServer function that wires all dependencies together.