{"id":17146141,"url":"https://github.com/codenamev/agentic","last_synced_at":"2026-04-27T05:33:58.844Z","repository":{"id":255213806,"uuid":"848922285","full_name":"codenamev/agentic","owner":"codenamev","description":"A simple Ruby command-line tool to build and run AI Agents in a plan-and-execute fashion.","archived":false,"fork":false,"pushed_at":"2025-06-05T12:35:13.000Z","size":407,"stargazers_count":24,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-11T14:40:52.475Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/codenamev.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.txt","code_of_conduct":"CODE_OF_CONDUCT.md","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-08-28T16:46:22.000Z","updated_at":"2026-02-02T21:08:49.000Z","dependencies_parsed_at":"2024-08-28T17:16:44.489Z","dependency_job_id":null,"html_url":"https://github.com/codenamev/agentic","commit_stats":null,"previous_names":["codenamev/agentic"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/codenamev/agentic","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codenamev%2Fagentic","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codenamev%2Fagentic/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codenamev%2Fagentic/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codenamev%2Fagentic/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/codenamev","download_url":"https://codeload.github.com/codenamev/agentic/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codenamev%2Fagentic/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32324548,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T23:26:28.701Z","status":"online","status_checked_at":"2026-04-27T02:00:06.769Z","response_time":128,"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":[],"created_at":"2024-10-14T21:07:56.222Z","updated_at":"2026-04-27T05:33:53.832Z","avatar_url":"https://github.com/codenamev.png","language":"Ruby","funding_links":[],"categories":["Ruby"],"sub_categories":[],"readme":"# Agentic\n\nA Ruby gem for building and running AI agents in a [plan-and-execute](https://blog.langchain.dev/planning-agents/#plan-and-execute) fashion. Agentic provides a simple command-line tool and library to build, manage, deploy, and run purpose-driven AI agents using OpenAI's LLM API.\n\n## What's New in v0.2.0\n\n🚀 **Agent Self-Assembly System** - Agents can now dynamically construct themselves based on task requirements\u003cbr\u003e\n🎯 **Capability System** - Rich specification and versioning system for agent capabilities\u003cbr\u003e\n💾 **Persistent Agent Store** - Save and reuse agents across sessions\u003cbr\u003e\n🔧 **Enhanced CLI** - Comprehensive command-line interface with agent and capability management\u003cbr\u003e\n📊 **Learning System** - Agents improve over time through execution history analysis\u003cbr\u003e\n🎨 **Real-time Feedback** - Progress bars, spinners, and colorized output for better user experience\u003cbr\u003e\n\n## Demo Video\n\n\u003cdiv\u003e\n    \u003ca href=\"https://www.loom.com/share/278bc1749f68480fa8a0a3a6658a0291\"\u003e\n      \u003cp\u003eAgentic Gem v0.2.0 Release - Watch Video\u003c/p\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://www.loom.com/share/278bc1749f68480fa8a0a3a6658a0291\"\u003e\n      \u003cimg style=\"max-width:300px;\" src=\"https://cdn.loom.com/sessions/thumbnails/278bc1749f68480fa8a0a3a6658a0291-2146dcc57ee7b47f-full-play.gif\"\u003e\n    \u003c/a\u003e\n  \u003c/div\u003e\n\n## Installation\n\nInstall the gem and add to the application's Gemfile by executing:\n\n```bash\n$ bundle add agentic\n```\n\nIf bundler is not being used to manage dependencies, install the gem by executing:\n\n```bash\n$ gem install agentic\n```\n\n## Usage\n\n### Command-Line Interface\n\nAgentic comes with a rich command-line interface featuring colored output, spinners for long-running tasks, and progress tracking:\n\n```bash\n# Display version information\n$ agentic version\n\n# Configuration Management\n$ agentic config init                               # Initialize configuration\n$ agentic config init --global                      # Initialize global configuration\n$ agentic config list                               # List all configuration settings\n$ agentic config get model                          # Get a specific configuration value\n$ agentic config set api_token=your_openai_api_key  # Set your OpenAI API token\n$ agentic config set model=gpt-4o-mini             # Configure the default model\n\n# Plan Creation and Execution\n$ agentic plan \"Generate a market research report on AI trends\"          # Create a plan\n$ agentic plan \"Write a blog post about Ruby\" --save plan.json           # Save plan to file\n$ agentic plan \"Research quantum computing\" --output json                # Output in JSON format\n$ agentic plan \"Analyze market trends\" --model gpt-4o                    # Use a specific model\n$ agentic plan \"Create documentation\" --execute                          # Create and execute immediately\n$ agentic plan \"Research topics\" --no-interactive                        # Skip interactive prompts\n\n$ agentic execute --plan plan.json                  # Execute a saved plan\n$ agentic execute --from-stdin                      # Read plan from stdin\n$ agentic execute --max-concurrency 5               # Limit concurrent tasks\n$ agentic execute --file results.json               # Save results to specific file\n\n# Agent Management\n$ agentic agent list                                # List available agents\n$ agentic agent list --detailed                    # List with detailed information\n$ agentic agent create \"ResearchAgent\" \\            # Create a new agent\n    --role=\"Research Assistant\" \\\n    --purpose=\"Conduct thorough research\" \\\n    --capabilities=text_generation,web_search\n$ agentic agent show \"ResearchAgent\"                # Show agent details\n$ agentic agent build \"ResearchAgent\"               # Build an agent from storage\n$ agentic agent delete \"ResearchAgent\"              # Delete an agent\n\n# Capability Management\n$ agentic capabilities list                         # List available capabilities\n$ agentic capabilities show text_generation         # Show capability details\n$ agentic capabilities search generation            # Search for capabilities\n```\n\nThe CLI provides real-time feedback with spinners for long-running operations, colored status updates, and detailed progress tracking. It supports both global and project-specific configuration, allowing you to customize the behavior for different projects.\n\n### Programmatic API\n\nTo use Agentic in your Ruby code:\n\n#### Basic Usage\n\n```ruby\nrequire 'agentic'\n\n# Configure your OpenAI API key\nAgentic.configure do |config|\n  config.access_token = 'your_openai_api_key'\nend\n\n# Create a TaskPlanner instance with a goal\nplanner = Agentic::TaskPlanner.new(\"Write a blog post about Ruby on Rails\")\n\n# Generate the plan\nplan = planner.plan\n\n# Display the plan\nputs plan.to_s\n\n# Or access the structured data\nplan.tasks.each do |task|\n  puts \"Task: #{task.description}\"\n  puts \"Agent: #{task.agent.name}\"\nend\n```\n\n#### Working with Agents\n\n```ruby\n# Create an agent with specific configuration\nagent = Agentic::Agent.build do |a|\n  a.name = \"ResearchAgent\"\n  a.role = \"Research Assistant\"\n  a.instructions = \"Conduct thorough research on the given topic\"\nend\n\n# Configure the LLM\nconfig = Agentic::LlmConfig.new(\n  model: \"gpt-4o-mini\",\n  temperature: 0.7\n)\n\n# Create a task\ntask = Agentic::Task.new(\n  description: \"Research the latest trends in Ruby on Rails\",\n  agent_spec: {\n    \"name\" =\u003e \"ResearchAgent\",\n    \"description\" =\u003e \"An agent that performs research\",\n    \"instructions\" =\u003e \"Research the given topic thoroughly\"\n  }\n)\n\n# Execute the task with the agent\nresult = task.perform(agent)\n\n# Check the result\nif result.successful?\n  puts \"Task completed successfully!\"\n  puts result.output\nelse\n  puts \"Task failed: #{result.failure.message}\"\nend\n```\n\n#### Plan Orchestration\n\n```ruby\n# Create an orchestrator\norchestrator = Agentic::PlanOrchestrator.new(\n  concurrency_limit: 5,\n  continue_on_failure: true\n)\n\n# Add tasks to the orchestrator\ntasks.each do |task|\n  orchestrator.add_task(task)\nend\n\n# Create an agent provider\nagent_provider = Agentic::DefaultAgentProvider.new\n\n# Execute the plan\nresult = orchestrator.execute_plan(agent_provider)\n\n# Process the results\nif result.successful?\n  puts \"Plan executed successfully!\"\nelse\n  puts \"Plan execution had issues: #{result.status}\"\n  result.results.each do |task_id, task_result|\n    if task_result.failed?\n      puts \"Task #{task_id} failed: #{task_result.failure.message}\"\n    end\n  end\nend\n```\n\n## Extension System\n\nAgentic includes a powerful Extension System to help integrate with external systems and customize the framework's behavior. The Extension System consists of three main components:\n\n### Domain Adapters\n\nDomain Adapters let you customize Agentic's behavior for specific domains like healthcare, finance, or legal:\n\n```ruby\n# Create a domain adapter for healthcare\nadapter = Agentic::Extension.domain_adapter(\"healthcare\")\n\n# Add domain-specific knowledge\nadapter.add_knowledge(:terminology, {\n  terms: [\"patient\", \"diagnosis\", \"treatment\"],\n  specialty: \"cardiology\"\n})\n\n# Create a custom prompt adapter\nprompt_adapter = -\u003e(prompt, context) {\n  specialty = context[:domain_knowledge][:terminology][:specialty]\n  \"#{prompt} [Adapted for #{context[:domain]} #{specialty}]\"\n}\n\n# Register the adapter\nadapter.register_adapter(:prompt, prompt_adapter)\n\n# Apply adaptation to a prompt\nadapted_prompt = adapter.adapt(:prompt, \"Describe the symptoms\")\n# =\u003e \"Describe the symptoms [Adapted for healthcare cardiology]\"\n```\n\n### Protocol Handlers\n\nProtocol Handlers standardize connections to external systems and APIs:\n\n```ruby\n# Get the protocol handler\nhandler = Agentic::Extension.protocol_handler(\n  default_headers: { \"User-Agent\" =\u003e \"AgenticApp/1.0\" }\n)\n\n# Create and register a protocol implementation\nhttp_protocol = Object.new\ndef http_protocol.send_request(endpoint, options)\n  # Implement HTTP request logic\n  { status: 200, body: \"Response data\" }\nend\n\n# Register the protocol\nhandler.register_protocol(:http, http_protocol, { timeout: 30 })\n\n# Send a request\nresponse = handler.send_request(:http, \"/api/data\", {\n  method: \"GET\",\n  headers: { \"Accept\" =\u003e \"application/json\" }\n})\n```\n\n### Plugin Manager\n\nThe Plugin Manager handles third-party extensions and their lifecycle:\n\n```ruby\n# Get the plugin manager\nmanager = Agentic::Extension.plugin_manager\n\n# Register a plugin\nplugin = MyPlugin.new\nmanager.register(\"my_plugin\", plugin, { version: \"1.0.0\" })\n\n# Get and use a plugin\nif plugin = manager.get(\"my_plugin\")\n  result = plugin.call(arg1, arg2)\nend\n\n# Disable a plugin\nmanager.disable(\"my_plugin\")\n```\n\n## Agent Specification and Task Definition\n\nAgentic provides structured representations for agents and tasks through several key value objects:\n\n### Agent Specification\n\nThe AgentSpecification defines the requirements for an agent:\n\n```ruby\n# Create an agent specification\nagent_spec = Agentic::AgentSpecification.new(\n  name: \"ResearchAgent\",\n  description: \"An agent that performs research\",\n  instructions: \"Research the given topic thoroughly\"\n)\n\n# Convert to a hash representation\nhash = agent_spec.to_h\n\n# Create from a hash representation\nagent_spec_from_hash = Agentic::AgentSpecification.from_hash(hash)\n```\n\n### Task Definition\n\nThe TaskDefinition defines a task to be performed by an agent:\n\n```ruby\n# Create a task definition\ntask_def = Agentic::TaskDefinition.new(\n  description: \"Research AI trends\",\n  agent: agent_spec\n)\n\n# Convert to a hash representation\nhash = task_def.to_h\n\n# Create from a hash representation\ntask_def_from_hash = Agentic::TaskDefinition.from_hash(hash)\n```\n\n### Execution Plan\n\nThe ExecutionPlan represents a plan with tasks and expected answer format:\n\n```ruby\n# Create an expected answer format\nexpected_answer = Agentic::ExpectedAnswerFormat.new(\n  format: \"PDF\",\n  sections: [\"Summary\", \"Trends\", \"Conclusion\"],\n  length: \"10 pages\"\n)\n\n# Create an execution plan\nplan = Agentic::ExecutionPlan.new([task_def], expected_answer)\n\n# Convert to a formatted string\nputs plan.to_s\n\n# Convert to a hash representation\nhash = plan.to_h\n```\n\n### Agent Configuration\n\nThe AgentConfig provides a configuration object for agents:\n\n```ruby\n# Create an agent configuration\nconfig = Agentic::AgentConfig.new(\n  name: \"ResearchAgent\",\n  role: \"Research Assistant\",\n  backstory: \"You are an expert researcher with decades of experience\",\n  tools: [\"web_search\", \"document_processor\"],\n  llm_config: Agentic::LlmConfig.new(model: \"gpt-4o-mini\")\n)\n\n# Access configuration properties\nputs config.name\nputs config.role\n\n# Convert to a hash representation\nhash = config.to_h\n```\n\n## Agent Capabilities System\n\nAgentic features a powerful Capability System that enables dynamic agent composition, self-assembly, and persistence. The system allows agents to be constructed with precisely the capabilities they need for specific tasks, and to be stored for future reuse.\n\n### Capability Registry\n\nThe capability registry manages capability specifications and providers:\n\n```ruby\n# Define a capability specification\ntext_gen_capability = Agentic::CapabilitySpecification.new(\n  name: \"text_generation\",\n  description: \"Generates text based on a prompt\",\n  version: \"1.0.0\",\n  inputs: {\n    prompt: { type: \"string\", required: true, description: \"The prompt to generate text from\" }\n  },\n  outputs: {\n    response: { type: \"string\", description: \"The generated text\" }\n  }\n)\n\n# Create a provider for the capability\ntext_gen_provider = Agentic::CapabilityProvider.new(\n  capability: text_gen_capability,\n  implementation: -\u003e(inputs) { { response: \"Generated text for: #{inputs[:prompt]}\" } }\n)\n\n# Register the capability with the system\nAgentic.register_capability(text_gen_capability, text_gen_provider)\n```\n\n### Agent Assembly Engine\n\nThe assembly engine dynamically constructs agents based on task requirements:\n\n```ruby\n# Define a task\ntask = Agentic::Task.new(\n  description: \"Generate a report on AI trends\",\n  agent_spec: Agentic::AgentSpecification.new(\n    name: \"Report Generator\",\n    description: \"An agent that generates reports\",\n    instructions: \"Generate a comprehensive report on the topic\"\n  ),\n  input: {\n    topic: \"AI trends in 2023\",\n    format: \"markdown\"\n  }\n)\n\n# Assemble an agent for the task\nagent = Agentic.assemble_agent(task)\n\n# The agent will automatically have capabilities like \"text_generation\"\n# based on the task requirements\n```\n\n### Agent Persistence\n\nAgents can be stored and retrieved for future use:\n\n```ruby\n# Store an agent for future use\nagent_id = Agentic.agent_store.store(agent, name: \"report_generator\")\n\n# Later, retrieve the agent by name\nstored_agent = Agentic.agent_store.build_agent(\"report_generator\")\n\n# Or retrieve by ID\nstored_agent = Agentic.agent_store.build_agent(agent_id)\n\n# List all stored agents\nagents = Agentic.agent_store.all\n```\n\n### Capability Composition\n\nCapabilities can be composed into higher-level capabilities:\n\n```ruby\nregistry = Agentic.agent_capability_registry\n\n# Compose multiple capabilities into a new one\nregistry.compose(\n  \"comprehensive_report\",\n  \"Generates a comprehensive report with research and formatting\",\n  \"1.0.0\",\n  [\n    { name: \"text_generation\", version: \"1.0.0\" },\n    { name: \"data_analysis\", version: \"1.0.0\" }\n  ],\n  -\u003e(providers, inputs) {\n    # Implementation that uses both capabilities\n    analysis = providers[1].execute(data: inputs[:data])\n    report = providers[0].execute(prompt: \"Generate a report on: #{analysis[:summary]}\")\n    { report: report[:response], analysis: analysis }\n  }\n)\n\n# Use the composed capability\nagent.add_capability(\"comprehensive_report\")\nresult = agent.execute_capability(\"comprehensive_report\", { data: { ... } })\n```\n\n## Learning System\n\nAgentic features a Learning System that enables agents to improve over time by capturing execution metrics, recognizing patterns, and optimizing strategies. The Learning System consists of three main components:\n\n### Execution History Store\n\nThe ExecutionHistoryStore captures and stores execution metrics and performance data:\n\n```ruby\n# Create a history store\nhistory_store = Agentic::Learning::ExecutionHistoryStore.new(\n  storage_path: \"~/.agentic/history\",\n  anonymize: true,\n  retention_days: 30\n)\n\n# Record task execution metrics\nhistory_store.record_execution(\n  task_id: \"task-123\",\n  agent_type: \"research_agent\",\n  duration_ms: 1500,\n  success: true,\n  metrics: { tokens_used: 2000, quality_score: 0.85 }\n)\n\n# Query execution history\nresearch_tasks = history_store.get_history(agent_type: \"research_agent\", success: true)\n\n# Calculate metrics\navg_tokens = history_store.get_metric(:tokens_used, { agent_type: \"research_agent\" }, :avg)\n```\n\n### Pattern Recognizer\n\nThe PatternRecognizer analyzes execution history to identify patterns and optimization opportunities:\n\n```ruby\n# Create a pattern recognizer\nrecognizer = Agentic::Learning::PatternRecognizer.new(\n  history_store: history_store,\n  min_sample_size: 10\n)\n\n# Analyze agent performance\npatterns = recognizer.analyze_agent_performance(\"research_agent\")\n\n# Analyze correlations between properties\ncorrelation = recognizer.analyze_correlation(:duration_ms, :tokens_used)\n\n# Get optimization recommendations\nrecommendations = recognizer.recommend_optimizations(\"research_agent\")\n```\n\n### Strategy Optimizer\n\nThe StrategyOptimizer generates improvements for prompts, parameters, and task sequences:\n\n```ruby\n# Create a strategy optimizer\noptimizer = Agentic::Learning::StrategyOptimizer.new(\n  pattern_recognizer: recognizer,\n  history_store: history_store,\n  llm_client: llm_client # Optional, for LLM-enhanced optimizations\n)\n\n# Optimize a prompt template\nimproved_prompt = optimizer.optimize_prompt_template(\n  \"Research the topic: {topic}\",\n  \"research_agent\"\n)\n\n# Optimize LLM parameters\nimproved_params = optimizer.optimize_llm_parameters(\n  { temperature: 0.7, max_tokens: 2000 },\n  \"research_agent\",\n  optimization_strategy: :balanced\n)\n\n# Generate performance report\nreport = optimizer.generate_performance_report(\"research_agent\")\n```\n\n### Integrating with Plan Orchestrator\n\nThe Learning System can be automatically integrated with the PlanOrchestrator:\n\n```ruby\n# Create the learning system\nlearning_system = Agentic::Learning.create(\n  storage_path: \"~/.agentic/history\",\n  llm_client: llm_client,\n  auto_optimize: false\n)\n\n# Create a plan orchestrator\norchestrator = Agentic::PlanOrchestrator.new\n\n# Register the learning system with the orchestrator\nAgentic::Learning.register_with_orchestrator(orchestrator, learning_system)\n\n# The orchestrator will now automatically record execution metrics\n```\n\n## Configuration\n\n### Setting up the OpenAI API Key\n\nYou can configure the OpenAI API key in several ways:\n\n1. Environment variable:\n   ```bash\n   export OPENAI_ACCESS_TOKEN=\"your_api_key\"\n   ```\n\n2. Configuration file:\n   Create `.agentic.yml` in your project directory or home directory:\n   ```yaml\n   api_token: \"your_api_key\"\n   model: \"gpt-4o-mini\"\n   ```\n\n3. In your Ruby code:\n   ```ruby\n   Agentic.configure do |config|\n     config.access_token = \"your_api_key\"\n   end\n   ```\n\n### LLM Configuration\n\nYou can customize the LLM behavior:\n\n```ruby\nconfig = Agentic::LlmConfig.new(\n  model: \"gpt-4o-mini\",\n  max_tokens: 500,\n  temperature: 0.7,\n  top_p: 1.0,\n  frequency_penalty: 0,\n  presence_penalty: 0\n)\n\n# Use in TaskPlanner\nplanner = Agentic::TaskPlanner.new(\"Write a blog post\", config)\n\n# Or with LlmClient directly\nclient = Agentic::LlmClient.new(config)\n```\n\n## Development\n\nAfter checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.\n\n### Running Tests\n\nAgentic includes a comprehensive test suite with both unit tests and integration tests. To run all tests:\n\n```bash\nrake spec\n```\n\nTo run specific test categories:\n\n```bash\n# Run just integration tests\nrspec spec/integration/\n\n# Run a specific integration test file\nrspec spec/integration/plan_orchestrator_integration_spec.rb\n\n# Run with verbose output\nrspec spec/integration/ --format documentation\n```\n\nThe integration tests cover real-world scenarios including:\n- Complex orchestration patterns with dependencies\n- Learning system's pattern recognition capabilities\n- Agent specification and task definition interactions\n- Timeout and retry behaviors\n- Error handling in complex scenarios\n\nTo install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).\n\n## Contributing\n\nBug reports and pull requests are welcome on GitHub at https://github.com/codenamev/agentic. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/codenamev/agentic/blob/main/CODE_OF_CONDUCT.md).\n\n## License\n\nThe gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).\n\n## Code of Conduct\n\nEveryone interacting in the Agentic project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/codenamev/agentic/blob/main/CODE_OF_CONDUCT.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodenamev%2Fagentic","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcodenamev%2Fagentic","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodenamev%2Fagentic/lists"}