{"id":37227308,"url":"https://github.com/janeapp/riffer","last_synced_at":"2026-06-10T21:01:02.206Z","repository":{"id":329309129,"uuid":"1119195894","full_name":"janeapp/riffer","owner":"janeapp","description":"The all-in-one Ruby framework for building AI-powered applications and agents.","archived":false,"fork":false,"pushed_at":"2026-06-05T18:52:05.000Z","size":3862,"stargazers_count":11,"open_issues_count":5,"forks_count":5,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-06-05T20:22:33.117Z","etag":null,"topics":["agents","ai","llm","ruby"],"latest_commit_sha":null,"homepage":"http://docs.riffer.ai/","language":"Ruby","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/janeapp.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-12-18T22:39:49.000Z","updated_at":"2026-06-05T13:39:22.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/janeapp/riffer","commit_stats":null,"previous_names":["bottrall/riffer","janeapp/riffer"],"tags_count":44,"template":false,"template_full_name":null,"purl":"pkg:github/janeapp/riffer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/janeapp%2Friffer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/janeapp%2Friffer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/janeapp%2Friffer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/janeapp%2Friffer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/janeapp","download_url":"https://codeload.github.com/janeapp/riffer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/janeapp%2Friffer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34170161,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-10T02:00:07.152Z","response_time":89,"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":["agents","ai","llm","ruby"],"created_at":"2026-01-15T03:20:16.025Z","updated_at":"2026-06-10T21:01:02.200Z","avatar_url":"https://github.com/janeapp.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Riffer\n\nThe all-in-one Ruby framework for building AI-powered applications and agents.\n\n[![Gem Version](https://badge.fury.io/rb/riffer.svg)](https://badge.fury.io/rb/riffer)\n\n## Requirements\n\n- Ruby 3.3, 3.4, or 4.0\n\n## Installation\n\nInstall the released gem:\n\n```bash\ngem install riffer\n```\n\nOr add to your application's Gemfile:\n\n```ruby\ngem 'riffer'\n```\n\n## Quick Start\n\n```ruby\nrequire 'riffer'\n\n# Configure your provider\nRiffer.configure do |config|\n  config.openai.api_key = ENV['OPENAI_API_KEY']\nend\n\n# Define an agent\nclass EchoAgent \u003c Riffer::Agent\n  model 'openai/gpt-5-mini'\n  instructions 'You are an assistant that repeats what the user says.'\nend\n\n# Use the agent\nagent = EchoAgent.new\nputs agent.generate('Hello world')\n```\n\n## Documentation\n\nFor comprehensive documentation, see the [docs](docs/) directory:\n\n- [Overview](docs/01_OVERVIEW.md) - Core concepts and architecture\n- [Getting Started](docs/02_GETTING_STARTED.md) - Installation and first steps\n- [Agents](docs/03_AGENTS.md) - Defining and configuring agents\n- [Agent Lifecycle](docs/04_AGENT_LIFECYCLE.md) - Generate, stream, and responses\n- [Agent Loop](docs/05_AGENT_LOOP.md) - Tool execution flow and stopping\n- [Tools](docs/06_TOOLS.md) - Creating tools for agents\n- [Advanced Tools](docs/07_TOOL_ADVANCED.md) - Timeouts, runtime, and registration\n- [Messages](docs/08_MESSAGES.md) - Message types and formats\n- [Stream Events](docs/09_STREAM_EVENTS.md) - Streaming responses\n- [Configuration](docs/10_CONFIGURATION.md) - Framework configuration\n- [Evals](docs/11_EVALS.md) - Evaluating agent quality\n- [Guardrails](docs/12_GUARDRAILS.md) - Input/output validation\n- [Skills](docs/13_SKILLS.md) - Packaged agent capabilities\n- [MCP](docs/14_MCP.md) - Integrating third-party MCP servers\n- [Serialization](docs/15_SERIALIZATION.md) - Persisting and transferring agent definitions\n- [Providers](docs/providers/01_PROVIDERS.md) - LLM provider adapters\n\n### API Reference\n\nGenerate the full API documentation with:\n\n```bash\nbin/docs\n```\n\nThen open `doc/index.html` in your browser.\n\n## Development\n\nAfter checking out the repo, run:\n\n```bash\nbin/setup\n```\n\nCommon workflows are wrapped in `bin/`. Each is a thin `exec bundle exec …` script — use them\ninstead of typing `bundle exec` yourself:\n\n| Command         | Description                                  |\n| --------------- | -------------------------------------------- |\n| `bin/rake`      | Default task: test + standard + steep:check  |\n| `bin/test`      | Run tests                                    |\n| `bin/lint`      | Check code style (pass `--fix` to auto-fix)  |\n| `bin/typecheck` | Run Steep type checker                       |\n| `bin/rbs`       | Generate RBS type signatures                 |\n| `bin/rbs-watch` | Watch and regenerate RBS files               |\n| `bin/docs`      | Build RDoc HTML                              |\n| `bin/build`     | Build the gem package                        |\n| `bin/console`   | Interactive console                          |\n\n`bin/rake \u003ctask\u003e` is the escape hatch for any rake task without a named wrapper (e.g.\n`bin/rake test:slow`, `bin/rake release`).\n\n### Recording VCR Cassettes\n\nIntegration tests use [VCR](https://github.com/vcr/vcr) to record and replay HTTP interactions. When adding new tests that hit provider APIs, you need to record cassettes with real API keys.\n\nCreate a `.env` file in the project root (it is gitignored):\n\n```bash\nOPENAI_API_KEY=sk-...\nANTHROPIC_API_KEY=sk-ant-...\nAWS_BEDROCK_API_TOKEN=...\n```\n\nThe test helper loads this file automatically via `dotenv`. Then run the specific tests that need new cassettes:\n\n```bash\nbundle exec ruby -Itest test/riffer/providers/open_ai_test.rb\nbundle exec ruby -Itest test/riffer/providers/anthropic_test.rb\nbundle exec ruby -Itest test/riffer/providers/amazon_bedrock_test.rb\n```\n\nVCR records the HTTP interactions to `test/fixtures/vcr_cassettes/` on the first run. Subsequent runs replay from the cassettes without hitting the API. API keys are automatically filtered from recorded cassettes.\n\n## Contributing\n\n1. Fork the repository and create your branch: `git checkout -b feature/foo`\n2. Run tests and linters locally: `bin/rake`\n3. Submit a pull request with a clear description of the change\n\nPlease follow the [Code of Conduct](https://github.com/janeapp/riffer/blob/main/CODE_OF_CONDUCT.md).\n\n## Changelog\n\nAll notable changes to this project are documented in `CHANGELOG.md`.\n\n## License\n\nLicensed under the MIT License. See `LICENSE.txt` for details.\n\n## Maintainers\n\n- Jake Bottrall - https://github.com/bottrall\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjaneapp%2Friffer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjaneapp%2Friffer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjaneapp%2Friffer/lists"}