{"id":20631230,"url":"https://github.com/solidlabresearch/solid-agent","last_synced_at":"2025-09-14T14:47:28.885Z","repository":{"id":154379430,"uuid":"601222007","full_name":"SolidLabResearch/Solid-Agent","owner":"SolidLabResearch","description":"A rule-based intelligent software agent","archived":false,"fork":false,"pushed_at":"2024-04-10T15:05:56.000Z","size":34475,"stargazers_count":11,"open_issues_count":5,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-09-04T23:15:50.416Z","etag":null,"topics":["agent","linked-data","solid"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SolidLabResearch.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-02-13T16:09:15.000Z","updated_at":"2025-07-02T14:00:43.000Z","dependencies_parsed_at":null,"dependency_job_id":"85829cc8-7445-48bd-a628-2f1e7b442ddf","html_url":"https://github.com/SolidLabResearch/Solid-Agent","commit_stats":null,"previous_names":["solidlabresearch/solid-agent"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/SolidLabResearch/Solid-Agent","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SolidLabResearch%2FSolid-Agent","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SolidLabResearch%2FSolid-Agent/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SolidLabResearch%2FSolid-Agent/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SolidLabResearch%2FSolid-Agent/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SolidLabResearch","download_url":"https://codeload.github.com/SolidLabResearch/Solid-Agent/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SolidLabResearch%2FSolid-Agent/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275120746,"owners_count":25409025,"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-09-14T02:00:10.474Z","response_time":75,"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":["agent","linked-data","solid"],"created_at":"2024-11-16T14:11:36.831Z","updated_at":"2025-09-14T14:47:28.830Z","avatar_url":"https://github.com/SolidLabResearch.png","language":"TypeScript","readme":"# Solid Agent\n\n[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.8338025.svg)](https://doi.org/10.5281/zenodo.8338025)\n\n\nThe Solid Agent is a rule-based intelligent software agent.\nIt consists of a network of different actors working together.\nEach actor is (part/combination of) a component of the **hybrid web agent architecture** proposed in [Intelligent software web agents: A gap analysis](https://www.sciencedirect.com/science/article/pii/S1570826821000342) by Sabrina Kirrane.\nThe five components proposed in that architecture are the following:\n* **Interface component**: This component communicates with the environment. It can both _sense_ and _actuate_. The basis communication protocol is HTTP as it is a web agent.\n* **Reactive component**: This component consists of Condition-Action-Rules. As input, it uses a Condition and it returns an Action based on the set of rules.\n* **Deliberative component**: Takes in a goal and as output an action. This is not implemented yet as the Solid Agent does not support goal encoding.\n* **Learning component**: A component that can learn from past experiences to become more effective over time. The Solid Agent does not contain any learning elements yet.\n* **Controller component**: Responsible for interpreting the perceptions from the sensors and passing them to another component (e.g. reactive or deliberative) that can handle such an event.\n  As a result, it retrieves an action/execution plan. It then executes through an execution engine, which might be passed back to the environment via the _actuate_ in the Interface component.\n\nThe Solid Agent consists of multiple independent actors that each implement one or more of these components to form a Minimum Viable Product of a configurable **hybrid web agent**.\nCurrently, the following actors are implemented:\n\n* The **Orchestration Actor**:\n  * _Controller component_: A component that passes events to the _reactive component_.\n    When a conclusion (action to be taken) is retrieved from the _reactive component_, \n    it processes the action and executes it, possibly by passing instructions to other actors so it can be enacted in the environment of the agent.\n  * _Reactive component_: A component that handles events by reasoning over them with **condition-action** rules.\n  * _Interface component_: A component that deals with interactions with the environment.\n   It is used to configure the **Orchestration Actor** and communicate with other actors within the network.\n* The **openHAB Actor**:\n  * _Interface component_: A component that deals with interactions with the environment.\n    It is used to communicate with other actors within the network and to interact with the openHAB platform through its API.\n* The **Solid Actor**:\n  * _Interface component_: A component that deals with interactions with the environment.\n    It is used to communicate with other actors within the network and to interact with the Solid pods through the Solid Protocol.\n\n\nA complete overview of the current Solid Agent Architecture can be seen in the following figure.\n\n![Agent Architecture](./img/23-09-12_Philips-hue-solid(Architecture).png)\n\nThe agent consists of different components that each can stand on their own.\nThis is done to improve modularity and for future research into **Multi-Agent Systems** (MAS). \nAt the moment each actor can be seen as a standalone agent itself with a simple goal. \nMultiple combinations and configurations allow for a multitude of use cases to be prototyped.\n``\n\n## Use cases\n\nCurrently, three use cases have been worked out and configured:\n\n- [Solid Agent](#solid-agent)\n  - [Use cases](#use-cases)\n    - [Synchronising the state Smart Home with a personal data store](#synchronising-the-state-smart-home-with-a-personal-data-store)\n    - [Temporal Usage Control Policy execution for Solid Resources](#temporal-usage-control-policy-execution-for-solid-resources)\n    - [The Solid RDF Resource Synchronisation Use Case](#the-solid-rdf-resource-synchronisation-use-case)\n  - [Cite](#cite)\n  - [Feedback and questions](#feedback-and-questions)\n\n### Synchronising the state Smart Home with a personal data store\n\nThe Solid Protocol, an example of a personal data store, defines how to interact with a Solid pod.\nTo integrate a Smart Home system with Solid, there are a couple of options: \n1. Use a reference implementation (e.g. the [CSS](https://github.com/CommunitySolidServer/CommunitySolidServer) or the [NNS](https://github.com/nodeSolidServer/node-solid-server)) and transform the code so the server speaks to the Smart Home Devices directly\n   * While technically possible, this results in a vendor lock-in. When people want to use a Smart Home solution with Solid, they have to use this specific Solid Server implementation. And this is against the idea of the Solid Protocol: It doesn't matter what server you use. As long as this server follows the protocol, interoperability is guaranteed.\n2. An application can be built that implements smart home integration and the Solid Protocol\n   * The problem here lies in the **availability**. As soon as you are not running the application, the integration will stop.\n\nA third option is to use an **Intelligent Software Web Agent**, which is what we have done here. \u003cbr\u003e\nWe have created an openHAB actor so that the **Solid Agent** can be configured to synchronize the state with the [openHAB](https://www.openhab.org/) platform and a state resource stored on a Solid pod.\u003cbr\u003e\nMore information on how to run the agent yourself and how it's built can be found [here](./documentation/iot/README.md).\n\n### Temporal Usage Control Policy execution for Solid Resources\n\n\nSharing data with other people, apps, and other agents is common in the Solid ecosystem. \nBut you might not always want to share the data forever. \nYou might want to share specific data for a limited amount of time. \n\nFor this reason, the **Solid Agent** is configured to allow end users to give temporary access to a Solid resource.\u003cbr\u003e\nMore information on how to run the agent yourself and how it's built can be found [here](./documentation/ucp/README.md).\n\n### The Solid RDF Resource Synchronisation Use Case\n\nThe Solid Agent is configured to copy the contents of an RDF resource to another RDF resource. \u003cbr\u003e\nSee [DemoSyncAgent](./src/demo/DemoSyncAgent.ts) for more information.\n\n\n## Cite\n\nIf you are using or extending the Solid Agent as part of a scientific publication,\nwe would appreciate a citation of our [article](https://ceur-ws.org/Vol-3632/ISWC2023_paper_406.pdf).\n\n```bibtex\n@inproceedings{slabbinck_iswc_demo_2023,\n  author = {Slabbinck, Wout and Dedecker, Ruben and Rojas Mel\\'endez, Juli\\'an Andr\\'es and Verborgh, Ruben},\n  title = {A Rule-Based Software Agent on Top of Personal Data Stores},\n  booktitle = {Proceedings of the 22nd International Semantic Web Conference: Posters, Demos, and Industry Tracks},\n  year = 2023,\n  month = nov,\n}\n```\n\n## Feedback and questions\n\nDo not hesitate to [report a bug](https://github.com/SolidLabResearch/Solid-Agent/issues).\n\nFurther questions can also be asked to [Wout Slabbinck](mailto:wout.slabbinck@ugent.be) (developer and maintainer of this repository) or [Patrick Hochstenbach](mailto:Patrick.Hochstenbach@UGent.be) (developer and maintainer of [Koreografeye](https://github.com/eyereasoner/Koreografeye)).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsolidlabresearch%2Fsolid-agent","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsolidlabresearch%2Fsolid-agent","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsolidlabresearch%2Fsolid-agent/lists"}