AI 资讯
# We Are Not Building a Product. We Are Building the Foundation.
Founder Journal #1 — The Beginning of NAEOS "Great software isn't built on great code alone. It's built on great foundations." The AI Revolution Is Here In just a few years, artificial intelligence has transformed the way software is built. Today, developers can ask AI to generate functions, refactor code, write tests, explain bugs, and even build entire applications. Tools like ChatGPT, Claude Code, GitHub Copilot, Cursor, Gemini CLI, and many others have fundamentally changed software development. The question is no longer: "Can AI write code?" The answer is clearly yes . The real question has become: "Can AI engineer software?" And that is a very different challenge. Writing Code Is Easy. Engineering Software Is Hard. Generating code is only one small part of software engineering. A production-ready system requires much more: Understanding business requirements Software architecture Coding standards Documentation Security policies Testing strategies Version control CI/CD Deployment Observability Team collaboration Long-term maintainability These are not isolated tasks. They form a connected engineering system. Most AI tools today excel at generating code, but they still rely heavily on humans to provide context, rules, and architectural direction. Without those, AI becomes inconsistent. The Hidden Cost of Every New Project Every time I started a new software project, I noticed the same pattern. Before writing meaningful business logic, I spent hours—or even days—recreating the engineering foundation. I had to: Decide on the architecture. Create folder structures. Define coding conventions. Write prompt libraries. Configure AI agents. Build documentation. Establish workflows. Create engineering rules. Configure quality gates. Explain the project to AI over and over again. The project changed. The technology changed. The AI model changed. But the engineering work kept repeating. Again. And again. And again. AI Can Remember Conversations. But Projects Need More Than
AI 资讯
Creating my own shell for unix
Building Astra: A Modern Shell in Rust I've been working on a personal project called Astra , an interactive shell written in Rust. The goal isn't to replace every existing shell overnight. Instead, I'm building a clean, modular foundation that's easy to understand, extend, and contribute to. Some of the features currently in development include: Interactive shell loop Customizable prompt system TOML-based configuration Built-in themes Git-aware prompt Command history Tab completion Alias support Plugin framework (early development) Alongside the shell itself, I'm also putting together the surrounding ecosystem—documentation, packaging, examples, tests, and GitHub automation—so contributors have a solid starting point. This project has been a chance to learn more about Rust, shell design, and how larger open-source projects are organized. It's still early, but it's reached the point where the foundation is in place and I'm beginning to focus on expanding features, improving reliability, and increasing test coverage. Check out the project here: astra-shell / astra-shell A custom shell for mac OS! █████████████░░░░░░░░ 65% Astra Shell A modern shell built in Rust for Unix-like systems, with macOS as the primary development platform. Astra is an interactive command-line environment focused on a clean interface, customization, and a better terminal experience. It combines the power of traditional Unix shells with a modern prompt system, configuration, and extensibility. Warning Astra Shell has not gone through extensive testing yet. Wait until the first stable release before using it as your primary shell. Table of Contents Features Screenshots Installation Requirements Usage Themes Why Astra? Contributing License Status Features Interactive Rust shell Configurable prompt engine Multiple built-in themes Git-aware prompt information Command history Tab completion Alias support TOML configuration Built-in shell commands Modular architecture Plugin framework (in developmen
AI 资讯
We Built a Signal Protocol Messenger. Then We Checked If It Was Legal in 5 Jurisdictions.
TL;DR: We checked Halonyx — our self-hosted E2EE messenger implementing X3DH + Double Ratchet — against the EU's Chat Control, US EARN IT Act, India's IT Rules 2021, the UK's Online Safety Act + Investigatory Powers Act, and the UN Cybercrime Convention. Here's the honest answer for each. When you implement end-to-end encryption from scratch, you spend a lot of time thinking about cryptographic threat models. Key substitution attacks. OPK exhaustion. WebRTC IP leakage. The adversaries you model are largely technical. At some point, you have to model a different kind of adversary: the legal one. We built Halonyx — a self-hostable E2EE messenger implementing the Signal Protocol (X3DH key exchange, Double Ratchet, Safety Numbers, WebTorrent P2P file transfer). The server architecturally cannot read your messages — not by policy, but because it holds no decryption keys and no plaintext. We wrote a STRIDE threat model across 17 attack surfaces. We did not write a legal threat model. So we did. This is what we found across five jurisdictions. None of this is legal advice. All of it is current as of July 2026, in a policy landscape that is actively moving. Quick Architecture Recap Before the jurisdiction breakdown, a one-paragraph recap of what Halonyx actually does, because the architecture is what determines the legal exposure. The relay server stores and forwards only AES-256-GCM ciphertext. It holds no private keys, performs no cryptographic operations on behalf of users, and has no mechanism to identify message content or originators. User identity is a pseudonymous 256-bit USID — the server stores only SHA-256(USID) . Files transfer peer-to-peer via WebTorrent; the server receives only a magnet URI. This architecture — which we call Federated Relay Architecture (FRA) — is what creates the legal situation described below. 1. European Union — Chat Control / CSAR Current status: No conflict with anything currently in force. The EU's Child Sexual Abuse Regulation (CSAR),
AI 资讯
How I Processed 666K Pages of Flattened PDFs into a Full Text Search Engine
In 2017 the National Archives and Records Administration (NARA) released the JFK files in an unsearchable manner 🔍. I tried doing manual research 🕵🏻. I relied on their provided CSV file of metadata to look for relevant documents to discover something - but I was looking for a needle in the haystack. I didn't know where to begin - but at the very least, I wanted to be able to search the contents therein. At least the National Archives allowed me to bulk download the PDFs. From that, I was able to birth the Apario Writer . In 2020, I began with rails new phoenixvault 🐦🔥 and I proceeded on a Zoom call with DJ Nicke - a former animator at Disney - to watch me build the proof of concept of the crowd sourcing declass utility that I envisioned. You see, when I was 7 years old, I had a dream after watching a space focused science program on TV that involved me sitting at the home computer, but interacting with an advanced interface that would help me uncover the mysteries of the day and time of the era. In Stargate SG-1, this concept was explored with the Tolan where Nareem was shocked to discover what Teal'c found in the records buried within a full text interface. Connecting it back to the JFK files released by NARA, they were unsearchable. Agenda on why aside, what could I do about it? This proof of concept grew into a SaaS platform that cost me $7,000 per month to operate over 12 bare meta servers in a private cloud using ESXi. This interface worked, but it was going to be replaced by a cost saving solution architected from the ground up in Go to reduce the dependency graph of the SaaS solution down to a single binary . In order to do this, I needed to create a pipeline. Looking at the SaaS model, I had a series of sidekiq jobs that compiled the assets. In order to improve the performance of that process, running off from Ruby code, I needed to build a new binary from the ground up using Go. I took the course on YouTube from Matt Holiday called Programming In Go and wa
AI 资讯
Two coding agents editing the same issue, no merge conflict. Here is how git refs make that work
Run two AI coding agents on the same repo and the first thing that breaks is not the code. It is coordination. Agent A starts refactoring auth. Agent B, running in parallel, has no idea and starts the same thing. Neither remembers what it did last session, because each one boots fresh with an empty context window. The usual fixes are worse than the problem: a state file in the repo pollutes every diff and conflicts on merge, and an external issue tracker means API tokens, rate limits, and a hard dependency on the network for something that should be local. So I built grite : an issue tracker that lives inside your git repository as an append-only event log, with deterministic CRDT merging so two writers never conflict. No server. No database. No merge conflicts. Just git. The core idea: issues are events, git refs are the log Grite does not store issues as files in your working tree. It stores them as an append-only write-ahead log inside a git ref, refs/grite/wal . Every action, a create, a comment, a label change, is one immutable CBOR-encoded event appended to that log. Your working tree stays completely clean. The only tracked file grite ever writes is AGENTS.md , and that is on purpose, so agents discover the tool automatically. Because the state lives in a git ref, it travels with your code. It branches when you branch. It merges when you merge. It syncs when you git push . If you can push to a remote, you can sync issues. There is no new account, no new infrastructure, no new protocol to learn. How it works Three layers, cleanly separated. The git WAL is the source of truth. Events are appended as CBOR chunks, each identified by a content-addressed EventId that is a BLAKE2b hash of the event body. Content addressing is what makes the log tamper-evident: change one byte of an event and its ID no longer matches, which breaks the chain. Signing is optional Ed25519 per event, so you can prove which actor created what. The materialized view is a sled embedded key-
AI 资讯
Every EnvCastError Tells You How to Fix It: Designing Error Messages as a Feature
int(os.environ.get("PORT", "8080")) fails constantly in ways that waste your time: ValueError: invalid literal for int() with base 10: 'abc' . No variable name. No hint about what a valid value looks like. You grep the codebase for PORT to even find where the read happened. specenv is a zero-runtime-dependency Python library for typed environment variable loading — casting, validation, schema grouping, prefix namespacing. All of that is useful, but none of it is the actual design decision worth writing about. The decision that shaped everything else was: every error must name the variable and say how to fix it, unconditionally, with no opt-out. Decision 1: The error message is generated at the failure site, not templated afterward It would be easy to build one generic EnvCastError(var_name, raw_value, target_type) and format a message from those three fields in __str__ . specenv doesn't do that — each cast failure builds its own message inline, at the point where the specific failure is known: if cast_type is int : try : return int ( raw ) except ValueError : raise EnvCastError ( f ' Cannot cast { name } = { raw !r} to int. \n ' f ' → Set { name } to a valid integer (e.g. { name } =8080) ' ) from None if cast_type is bool : ... raise EnvCastError ( f ' Cannot cast { name } = { raw !r} to bool. \n ' f ' → Set { name } to one of: 1/0, true/false, yes/no, on/off ' ) The generic version would produce "Cannot cast PORT='abc' to int" and stop there. The inline version gets to add (e.g. PORT=8080) for ints, 1/0, true/false, yes/no, on/off for bools, a namespaced hint for prefixed variables — because at the point of failure, you know exactly what a correct value looks like for that type, and a generic formatter three calls up the stack doesn't. The cost is a few lines of duplication across _caster.py 's type branches. That's a fair trade for every single error message being genuinely actionable instead of generically accurate. Decision 2: Missing-and-required collapses to t
AI 资讯
Building a Timing Utility That Can't Corrupt Its Own Stats — Even When Your Code Throws
Most ad-hoc timing code in Python looks like this: start = time . perf_counter () result = do_work () elapsed = time . perf_counter () - start stats [ name ]. append ( elapsed ) It works, until do_work() raises. Then the line that records the timing never runs, the exception propagates, and the one call that was probably slowest — the one that failed — is silently missing from your stats. If you're using timing data to find what's expensive, the failing case is exactly the one you can least afford to lose. timerx is a small, dependency-free Python timing library — a decorator, a context manager, and named stopwatches, all backed by one stats store. The one rule that shapes the whole implementation: a timing gets recorded whether or not the timed code raised. Decision 1: finally , everywhere, no exceptions to the rule @functools.wraps ( target ) def wrapper ( * args : Any , ** kwargs : Any ) -> Any : started = self . _clock () try : return target ( * args , ** kwargs ) finally : elapsed = self . _clock () - started with self . _lock : self . _record ( label , elapsed ) return wrapper The async wrapper is the identical shape with await added. The context manager ( _Lap ) does the same thing structurally, just split across __enter__ / __exit__ instead of try / finally : def __exit__ ( self , * exc_info : object ) -> bool : if self . _started is None : raise RuntimeError ( " timerx lap exited before it was entered " ) elapsed = self . _timer . _clock () - self . _started with self . _timer . _lock : self . _timer . _record ( self . _name , elapsed ) return False Note the return False — __exit__ deliberately never swallows the exception. It records the timing and lets the exception continue propagating unchanged, because a timing library has exactly one job here: observe, not intervene. A version that suppressed exceptions to "clean up" would be actively dangerous to drop into someone else's codebase. Three entry points — decorator, context manager, stopwatch — and all t
开源项目
🔥 max-sixty / worktrunk - Worktrunk is a CLI for Git worktree management, designed for
GitHub热门项目 | Worktrunk is a CLI for Git worktree management, designed for parallel AI agent workflows | Stars: 5,995 | 12 stars today | 语言: Rust
开源项目
🔥 dani-garcia / vaultwarden - Unofficial Bitwarden compatible server written in Rust, form
GitHub热门项目 | Unofficial Bitwarden compatible server written in Rust, formerly known as bitwarden_rs | Stars: 64,238 | 81 stars today | 语言: Rust
开源项目
🔥 facebook / pyrefly - A fast type checker and language server for Python
GitHub热门项目 | A fast type checker and language server for Python | Stars: 6,817 | 6 stars today | 语言: Rust
开源项目
🔥 breferrari / obsidian-mind - A self-organizing Obsidian vault that gives AI coding agents
GitHub热门项目 | A self-organizing Obsidian vault that gives AI coding agents persistent memory. Claude Code, Codex CLI, Gemini CLI. | Stars: 3,951 | 113 stars today | 语言: TypeScript
开源项目
🔥 microsoft / inshellisense - IDE style command line auto complete
GitHub热门项目 | IDE style command line auto complete | Stars: 10,494 | 116 stars today | 语言: TypeScript
开源项目
🔥 Anionex / banana-slides - 一个基于nano banana pro🍌的原生AI PPT生成应用,迈向"Vibe PPT"; 支持上传任意模板图片,上
GitHub热门项目 | 一个基于nano banana pro🍌的原生AI PPT生成应用,迈向"Vibe PPT"; 支持上传任意模板图片,上传任意素材&智能解析,一句话/大纲/页面描述自动生成PPT,口头修改指定区域、一键导出可编辑ppt - An AI-native slides generator based on nano banana pro🍌 | Stars: 15,301 | 72 stars today | 语言: TypeScript
开源项目
🔥 MarSeventh / CloudFlare-ImgBed - 🏖️ A serverless, open-source file hosting solution built on
GitHub热门项目 | 🏖️ A serverless, open-source file hosting solution built on Cloudflare. Supports image hosting, secure file storage, and personal cloud drive capabilities. | Stars: 5,888 | 36 stars today | 语言: JavaScript
开源项目
🔥 TechyCSR / OpenCluely - OpenCluely is a free, open source Cluely (alternative), buil
GitHub热门项目 | OpenCluely is a free, open source Cluely (alternative), built for technical interviews like DSA, OAs, and CP. It offers an invisible overlay, real-time AI help, Smart Image Processing for question capture, and multi-language support : 100% customizable and private. | Stars: 471 | 55 stars today | 语言: JavaScript
开源项目
🔥 BazedFrog / SongGeneration-Studio - Clean, polished interface for Tencent’s SongGeneration. Crea
GitHub热门项目 | Clean, polished interface for Tencent’s SongGeneration. Create songs from text prompts or reference audio, with batch processing and smart model selection. Minimum Requirement: 10GB of VRAM | Stars: 545 | 39 stars today | 语言: JavaScript
开源项目
🔥 VectifyAI / PageIndex - 📑 PageIndex: Document Index for Vectorless, Reasoning-based
GitHub热门项目 | 📑 PageIndex: Document Index for Vectorless, Reasoning-based RAG | Stars: 34,513 | 222 stars today | 语言: Python
开源项目
🔥 DedSecInside / TorBot - Dark Web OSINT Tool
GitHub热门项目 | Dark Web OSINT Tool | Stars: 4,414 | 35 stars today | 语言: Python
开源项目
🔥 apache / superset - Apache Superset is a Data Visualization and Data Exploration
GitHub热门项目 | Apache Superset is a Data Visualization and Data Exploration Platform | Stars: 73,970 | 23 stars today | 语言: Python
开源项目
🔥 OpenDCAI / DataFlow - Easy Data Preparation with latest LLMs-based Operators and P
GitHub热门项目 | Easy Data Preparation with latest LLMs-based Operators and Pipelines. | Stars: 6,962 | 139 stars today | 语言: Python