{"id":30020385,"url":"https://github.com/gni/devcat","last_synced_at":"2026-01-20T17:32:51.514Z","repository":{"id":308394194,"uuid":"1032716132","full_name":"gni/devcat","owner":"gni","description":"A self-contained snapshot and context tool for your AI development loop.","archived":false,"fork":false,"pushed_at":"2025-08-05T18:26:14.000Z","size":0,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-05T18:38:56.360Z","etag":null,"topics":["ai","ai-agents","aidevelopment","aiworkflow","chatgpt","claude","context","developpement","diff","llm","machine-learning","ollama","openai","qwen-coder","snapshot"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gni.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-08-05T18:02:05.000Z","updated_at":"2025-08-05T18:26:17.000Z","dependencies_parsed_at":"2025-08-05T18:38:58.379Z","dependency_job_id":"aa13e233-4062-4ce0-851e-f6dfaa546c30","html_url":"https://github.com/gni/devcat","commit_stats":null,"previous_names":["gni/devcat"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/gni/devcat","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gni%2Fdevcat","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gni%2Fdevcat/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gni%2Fdevcat/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gni%2Fdevcat/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gni","download_url":"https://codeload.github.com/gni/devcat/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gni%2Fdevcat/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268954637,"owners_count":24335186,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-05T02:00:12.334Z","response_time":2576,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","ai-agents","aidevelopment","aiworkflow","chatgpt","claude","context","developpement","diff","llm","machine-learning","ollama","openai","qwen-coder","snapshot"],"created_at":"2025-08-06T02:01:42.614Z","updated_at":"2025-10-09T01:14:21.014Z","avatar_url":"https://github.com/gni.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DEVCAT\n\nA self-contained snapshot and context tool for your **AI development workflow**.\n\n-----\n\n## Overview\n\nWe've all been there. You're deep in an **LLM project** or **machine learning development**, juggling code, prompts, and a chaotic mess of trial-and-error. Git feels too heavy for these quick, experimental loops. Your terminal history is a graveyard of forgotten commands, and your text editor is a minefield of unsaved changes.\n\nThat's why I made **DevCat**. It's a micro-version control system built for how we actually work. No branches, no commits, just instant, clean snapshots of your project. It's a lifesaver when you need to quickly save a good state, revert to a previous version, or grab a full code context to feed back to an **AI model**. DevCat gets out of your way and gives you a fighting chance in the wild world of **AI development**.\n\n-----\n\n## Features\n\n  - **Snapshot \u0026 Revert**: Take a snapshot of your project with a simple message. This is essential for quickly saving states during **AI model tuning** or **prompt engineering**. Later, you can jump back to any of those snapshots instantly if things go sideways.\n  - **Context Generation**: Ever need to give an **LLM** a full view of a module or your entire project? DevCat concatenates all your relevant code into a single stream, ready for copy/pasting or piping. This is perfect for providing **AI models** with the context they need.\n  - **Diffing**: Compare snapshots to see what changed, or check the difference between your last saved state and your current work.\n  - **Trace Extraction**: Pipe in a stack trace from your application, and DevCat will fetch the exact code snippets from each file reference, giving you instant debugging context.\n  - **Auto-Watch**: Let DevCat handle the saves for you. It can watch your files and automatically create snapshots when it detects changes.\n  - **Zero-Config**: Just download it and run it. No complex setup or remote servers. It just works.\n\n-----\n\n## Installation\n\n[DevCat](https://github.com/gni/devcat) is a Rust binary.\n\n### From Source\n\n```bash\ngit clone https://github.com/gni/devcat.git\ncd devcat\ncargo install --path .\n```\n\n### With cargo\n```bash\ncargo install devcat\n```\n\n-----\n\n## Usage\n\nHere’s a quick rundown of the essential commands.\n\n### `devcat save \u003cmessage\u003e`\n\nSave a new snapshot of the current project state.\n\n```bash\n# Save your current progress\ndevcat save \"refactored the prompt engineering logic\"\n\n# Save a snapshot but exclude the 'data' folder\ndevcat save \"experimenting with new data loaders\" --exclude 'data/'\n```\n\n### `devcat log`\n\nShow a history of all saved snapshots.\n\n```bash\ndevcat log\n```\n\nOutput:\n\n```text\nID  TIMESTAMP              MESSAGE\n--- ---------------------- --------------------------------------------------\n1   2025-08-04 17:01:44    Initial commit\n2   2025-08-04 17:05:21    Refactored the core loop\n3   2025-08-04 17:12:03    Implemented new AI logic\n```\n\n### `devcat` (Default Cat)\n\nThis is the default command. It concatenates all files in the current directory (or a specified path) into a single output. It's perfect for giving context to an LLM.\n\n```bash\n# Send all files in the current directory to your LLM\ndevcat | pbcopy\n\n# Concatenate files from a specific module\ndevcat ./src/my_module\n```\n\n### `devcat --id \u003cid\u003e`\n\nConcatenate all files from a specific snapshot.\n\n```bash\n# Re-run a prompt with the state from snapshot 2\ndevcat --id 2 | some_llm_cli \"debug this\"\n```\n\n### `devcat diff \u003cid1\u003e [id2]`\n\nShow the differences between two snapshots or between a snapshot and your current working directory.\n\n```bash\n# Compare the latest snapshot with your current work\ndevcat diff\n```\n\n### `devcat revert \u003cid\u003e`\n\nRevert the working directory to the state of a specific snapshot.\n\n```bash\n# Revert to a stable state\ndevcat revert 2\n```\n\n### `devcat trace`\n\nPipes in a stack trace and outputs the referenced code snippets.\n\n```bash\n# Get context for a Python stack trace\npython my_script.py 2\u003e\u00261 | devcat trace\n```\n\n### `devcat watch`\n\nStarts a file watcher that automatically creates a new snapshot whenever files are changed.\n\n```bash\n# Don't think about it, just code. DevCat will handle the snapshots.\ndevcat watch\n```\n\n-----\n\n## Configuration\n\nFor now, DevCat is mostly plug-and-play. If you want to permanently exclude files or directories, you can create a `.devcatrc` file in the root of your project.\n\n### `.devcatrc`\n\n```toml\n# Exclude the 'target' and 'node_modules' directories globally\nexclude = [\"target/\", \"node_modules/\"]\n```\n\n-----\n\n## Contributing\n\nDevCat is an open-source project. If you have an idea, a bug report, or a feature request, feel free to open an issue or submit a pull request.\n\n## Authors\n\n[Lucian BLETAN](https://github.com/gni) - initialized project","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgni%2Fdevcat","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgni%2Fdevcat","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgni%2Fdevcat/lists"}