{"id":13696540,"url":"https://github.com/HP4k1h5/agora","last_synced_at":"2025-05-03T17:31:32.859Z","repository":{"id":45023698,"uuid":"283838361","full_name":"hp4k1h5/agora","owner":"hp4k1h5","description":"a command-line ui for market data and algo management. currently integrates with iexcloud for stock and crypto charts 💹 and market data 🗃, and alpaca 🦙 for trading.","archived":true,"fork":false,"pushed_at":"2022-01-13T19:15:07.000Z","size":10293,"stargazers_count":100,"open_issues_count":3,"forks_count":14,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-03-18T03:40:11.028Z","etag":null,"topics":["algo-trading","alpaca","blessed","cli","cryptocurrency","iex","market-data","nodejs","stock","stocks","trading-bot"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/hp4k1h5.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-07-30T17:36:21.000Z","updated_at":"2024-10-04T14:30:39.000Z","dependencies_parsed_at":"2022-09-02T13:10:45.316Z","dependency_job_id":null,"html_url":"https://github.com/hp4k1h5/agora","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hp4k1h5%2Fagora","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hp4k1h5%2Fagora/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hp4k1h5%2Fagora/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hp4k1h5%2Fagora/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hp4k1h5","download_url":"https://codeload.github.com/hp4k1h5/agora/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252226749,"owners_count":21714864,"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","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":["algo-trading","alpaca","blessed","cli","cryptocurrency","iex","market-data","nodejs","stock","stocks","trading-bot"],"created_at":"2024-08-02T18:00:42.265Z","updated_at":"2025-05-03T17:31:30.864Z","avatar_url":"https://github.com/hp4k1h5.png","language":"JavaScript","funding_links":[],"categories":["Other resources"],"sub_categories":["Open source"],"readme":"# agora\n\n## ⚠️ Deprecation Warning ⚠️\n\nThis package is now deprecated.\n\nThe main goal of this project was to provide a full trading and algo management application in the terminal. When this app was fully functioning, it was able to provide a range of interesting functionalities. Unfortunately, I have not been able to find the time to maintain the app, and it has fallen into a semi-broken state of disrepair.\n\nThanks for the support and good luck to all.\n\n\u003cspan style=\"display:inline-block; width:50% \"\u003e\n\n\u003e view market info and charts and trade stocks in the terminal\n\n\u003c/span\u003e\n\n\u003cspan style=\"display:inline-block;top:0;float:right;padding:7px;border:3px #ddd solid\"\u003e\n\n###### Terms of Service for IEX data\n\n\u003e [Data provided by IEX Cloud](https://iexcloud.io)\n\n\u003c/span\u003e\n\n##### !!warning agora is in _alpha_ and subject to change ⚠\n\n[contributions](./.github/CONTRIBUTING.md) and [bug\nreports](https://github.com/HP4k1h5/agora/issues/new?assignees=HP4k1h5\u0026labels=bug\u0026template=bug_report.md\u0026title=basic)\nare _welcome_\n\n![screenshot of a terminal window displaying a stock chart, active\ngainers/losers, and stock related news](img/agora.png)\n\u003e the workspace used to generate this image is defined in\n\u003e [docs/example-configs/dense.json](docs/example-configs/dense.json)\n\n##### table of contents\n\n- [CHANGELOG](#CHANGELOG)\n- **[installation](#installation)**\n- **[usage](#usage)**\n  - [getting started](#getting-started)\n  - [**workspaces**, focus and windows](#workspaces,-focus-and-windows)\n  - [**commands**](#commands)\n- [🦙 trading](#🦙-alpaca-trading)\n  - [**bots**](#bots)\n- [**config.json**](#config\\.json)\n- [thanks!](#thanks)\n\n## CHANGELOG latest\n\n## v0.1.3\n- [crypto book and quote](README.md/#crypto), use prefix `¢`\n- help menu bugfix\n\n---\n\n## installation\n\n### requirements\n\n- [nodeJs](https://nodeJs.org) ✅ tested with `v14.8.0`\n\n1) download or clone this repo\n    1) either run `yarn global add @hp4k1h5/agora`  OR  `npm i -g @hp4k1h5/agora`.\n    2) or run `git clone https://github.com/HP4k1h5/agora.git` and get\n      dependencies by running `yarn` in this directory, or `npm i`.\n\n2) add a **publishable** iex api key\n    1) either export an ENV var named [IEX_PUB_KEY](#register)  \n    ex. `export IEX_PUB_KEY=pk_Y0urIeXaPipUbl15h4bLeKEY` locally or in your\n    `.bashrc` equivalent.\n    2) or set the `IEX_PUB_KEY` in `config.json` in this repo, or the default\n    config location; on a mac, this will be `~/.config/agora/config.json`.\n    *You will have to create the directory with e.g.* `mkdir\n    ~/.config/agora`, and then copy over your config with e.g. on a mac\n    ```bash\n    cp  ~/.config/yarn/global/node_modules/@hp4k1h5/agora/config.json ~/.config/agora\n    ```\n\n    **examples**\n\n    in `.bashrc` equivalent or from the command line\n\n    ```bash\n    export IEX_PUB_KEY=\"yourIEXpublishablekey\"\n    export IEX_SECRET_KEY=\"yourIEXsecretkey\" # optional\n    ```\n\n    or in config.json\n\n    ```json\n    {\n      \"IEX_PUB_KEY\": \"yourIEXpublishablekey\",\n      \"IEX_SECRET_KEY\": \"yourIEXsecretkey     # optional\"\n    }\n    ```\n\n    See **[config.json](#config\\.json)** for configuration tips and example configs.\n\n3) If you installed globally, you should be able to use the shell alias\n   `agora` from anywhere. If you encounter problems or want a more\n   comprehensive tutorial, please see [tutorial](docs/TUTORIAL.md).\n\n#### optional\n\n- iex account info  \n    In order to see iex account information also set the `IEX_SECRET_KEY` in the\n    same manner as above. See [account](#@-account).\n\n- \u003cspan style=\"background:#222; color:#ece\"\u003e🦙 alpaca account integration.\u003c/span\u003e  \n    See [🦙 trading](#🦙-alpaca-trading).\n\n#### register\n\n**for a free [iex account](https://iexcloud.io/cloud-login#/register)** and\ncopy the **publishable** api key. These typically start with `pk`\n\n#### note about iex message usage\n\n\u003e if you receive \u003cspan style=\"color:red\"\u003e\"Payment required\"\u003c/span\u003e error\n\u003e messages, this is iexcloud telling you that your remaining message allotment\nis insufficient for the data request you are making. You can visit your\n[iexcloud console](https://iexcloud.io/console/usage) or type `@` from the repl\nfor more information. If you wish to make the most use of your 500,000 free\nmonthly iex messages, avoid longer time-range graph queries. For example,\na 1-year chart costs roughly 12,590 messages (~252 trading days * 50\nmessages/day). Intraday time ranges such as `:1d` or `:100min` are free, i.e.\nincur no message cost. See [iex api\ndocumentation](https://alpaca.markets/docs/api-documentation/) to learn more\nabout endpoint pricing.\n\n## usage\n\n### getting started\n\nPlease consult the [tutorial](docs/TUTORIAL.md#getting-started).\n\n### workspaces and components\n\nPlease consult the\n[tutorial](docs/TUTORIAL.md#workspaces-and-components).\n\n### commands\n\n#### `help` or `h`\n\nTyping `help` or `h` brings up a help menu. If you include another command\nname after, command-specific help is returned to the repl. Type `x` in the\nrepl to close the help menu  \n**examples**\n```fortran\nhelp $      --\u003e show help for stock prefix command\nh :         --\u003e show help for time prefix command\nh #         --\u003e show help for chart command\nh           --\u003e show general help\n```\n\n#### `quit` or `exit`\n\nTyping `quit`, `exit` or `Ctrl-c` will exit the app\n\n#### \u003ckbd\u003eleft\u003c/kbd\u003e  \u003ckbd\u003eright\u003c/kbd\u003e switch workspaces\n\nUse left and right arrow-keys to switch between workspaces. By default,\nagora comes with several workspaces. Depending on you terminal and trading\npreferences, these can be configured in `config.json`. See [configuring\nworkspaces](#configuring-workspaces)\n\n#### `\u003e` return to repl\n\nIf the repl is not focused, hit `\u003e` to return to repl. The last active window\nwill be the target of the commands entered unless a window prefix-command has\nbeen issued.\n\n#### `esc`\n\nFrom the repl, hit `esc` to return to the focus rotation.\n\n#### `[` window prefix\n\nTyping a `[` followed immediately by a window id, or one of the keywords `all`\nor `new` will target the window(s) with the command. Window ids are found in the\ntop-left corner of each targetable window.  \n**examples**\n```fortran\n[4 # :max $tm  --\u003e display max-time chart of $tm in the fourth window\n$aa [all       --\u003e update all targetable windows with stock symobl $aa\n[2 x           --\u003e close the second window\n= [new         --\u003e open a new watchlist window\n```\n\n#### `x` close window\n\nTyping an x will close the active window. May be combined with window prefix\nto target a specific window.\n**examples**\n```c\n[4  x       --\u003e closes the 4th window\nx           --\u003e closes the active window\n```\n\n#### `?` search\n\nTyping `?` followed by search terms will query stock symbols and company names\nfor approximate (fuzzy) matches. Capitalization and spacing is ignored as are\nquotes and most other non word symbols.\nIf you are searching by key word like \"solar\", consider adding more words to\nnarrow down the result set  \n**examples**  \n```bash\n? electric\n   tlsa    ?  \n?   \"american Motor\" company\n```\n\n#### `$` stock ticker symbol prefix\n\nTyping `$` followed immediately by a stock ticker symbol changes the symbol in\nthe active window. Can be combined with window, technical-indicator and time\nprefixes to update multiple values at the same time  \n**examples**\n```fortran\n$TM              --\u003e update symbol in active component to TSLA\n[2 $BRK.B :1.5h   --\u003e update active symbol to BRK.B and update time to last 90 minutes\n```\n\n#### `¢` crypto symbol prefix\n\nTyping `¢` followed immediately by a valid crypto/currency pair changes the\ninstrument in the active window. Can be combined with window,\ntechnical-indicator and time prefixes to update multiple values at the same\ntime \n\n**examples** \n```\n¢BTCUSD ^   --\u003e update active window to a book of BTC/USD\n\" ¢ethusd   --\u003e update active window to a quote of ETH/USD\n``` \n\n#### `:` time range prefix\n\nTyping `:` followed immediately by a combination of the following parameters\nwill change the currently active time range and update the currently active\nwindow. This will only apply to chart windows.  \n**valid time ranges** `1d, 5d, 5dm, 1m, 1mm, 3m, 6m, ytd, 1y, 5y, max`  OR  \nnumeric values affixed with `min` or `h`, see examples.  \nCan be combined with time prefix to update multiple values at the same time  \n**examples**\n```bash\n:100min        --\u003e update time to last 100 minutes\n:6.5h [4       --\u003e update time to last trading day in the fourth window\n:5dm  $x       --\u003e update time to last 5 days minute-averaged and update stock\n                   to X\n```\n\n#### `#` chart command\n\nTyping `#` brings up the price/volume chart display in the targeted window.\nYou may also set time, stock symbol, and\n[technical-indicator](#%-technical-indicator-prefix) by including those\nprefix-commands in the query.  \n**examples**\n```c\n# :1dm $t     --\u003e change the active window to a 1 day 5-minutes chart of $t\n\n[2 # %wma     --\u003e change the second window to a chart with\n                  weighted-moving-average overlay\n```\n\n#### `^` book command\n\nTyping `^` or `book` will bring up the order book for the active symbol.  \n**examples**\n```fortran\n$de ^ poll6e4       --\u003e change the symbol in the active window to $de order\n                       book and poll every minute\nbook $aa [3         --\u003e order book for $aa in the third window\n```\n\n![rainbow colored order book for $tsla, showing active\npolling](./img/book.png)\n\n#### `!` news command\n\nTyping `!` brings up the news display with up to the latest 20 results\nrelevant to the active symbol. Use mouse to scroll the table. Use `tab` or\n`esc` to return to repl. Can be combined with stock prefix to update multiple\nvalues at the same time  \n**examples**\n```bash\n$de !          # show news and update active stock to DE\n! $ibm [3      # show news and update stock to ibm in window 3\n```\n\n#### `=` watchlist command\n\nTyping `=` brings up the watchlist display. Use mouse to scroll the table. Use\n`tab` or `esc` to return to repl.  ![watchlist display for\nagora](img/multi-chart.png). Watchlist is in the top-left corner. Use mouse\nto scroll. This workspace is defined in\n[dense.json](docs/example-configs/dense.json)\n\u003e note: Key values `open high low close` are only available to iex premium\n\u003e data subscribers and during non-market hours to other api consumers  \n\nIf the watchlist expands beyond its defined boundaries and is occluding other\ncomponents, try rotating through your other components with `tab` or\n`Shift-tab`. Alternatively, use the arrow-keys 'right' and then 'left' to\nreset the workspace\n\n\u003e 🐴 set watchlist to string value \"alpaca\" to source your alpaca watchlists.\n\n**examples**\n```bash\n= [4\n```\n\n#### `\u0026` profile command\n\nTyping `\u0026` brings up a profile of the active symbol in the targeted window.\nUse mouse to scroll components.\n![profile display](img/profile.png)  \n**examples**\n```bash\n$qcom \u0026\n```\n\n#### `*` list command\n\nTyping `*` brings up a list of gainers/losers/active/etc in the targeted\nwindow. List can be customized in `config.json`.\n**examples**\n```bash\n*\n```\n\n#### `\"` quote command\n\nTyping `\"` displays a real-time quote for the active symbol in the targeted\nwindow.  \n**examples**\n```bash\n[4 \" $r\n```\n\n#### `poll` (interval in milliseconds)\n\nComponents can update themselves periodically either by calling `poll`\nfollowed immediately by a number greater than 10, or by setting the `pollMs`\nkey for the component in `config.json` to a number greater than 10, which\nequals 100 requests/s, which is the max allowable by iex's rate limits.\nscientific notation (i.e. `poll1e3`) is allowed.\n\nIf you poll multiple components at 10 ms intervals, you will quickly exceed\niex's rate limit which is based on ip, and therefore anything lower than 100,\nis inadvisable, since you may have multiple polling components at the same\ntime.\n\nAll polls are cleared when switching workstations. For now, you will have to\nmanually restart them. Try `[all poll1.5e3` to set all components polling at\n1.5 second intervals. This is the same as calling `[all poll1500`. Use `[all\npoll` to stop all components polling.\n\n**examples**\n```bash\n[3 poll60000              --\u003e poll the 3rd window every 60 seconds\npoll [2                   --\u003e stop polling in window 2\n[new ^ $aapl poll1000     --\u003e open a new book window with $aapl\n                              polling every 1 second\npoll6e4 [3                --\u003e poll the 3rd window every minute (60,000\n                              milliseconds)\n[all poll                 --\u003e STOP all windows from polling\n[all poll1000             --\u003e all components poll at 1 second intervals\n```\n\n#### `%` technical-indicator prefix\n\n\u003e _iex paid subscribers only_  \n\nTyping `%` followed immediately by the abbreviated name of the technical\nindicator will overlay the active chart window with the technical indicator.\nThis will only apply to chart windows.  \n**valid technical indicators** include `bbands, wma, ema, hma`. See [full\nlist](./src/util/technicals.json). Can be combined with time, stock and window\nprefixes to update multiple values at the same time  \n**examples**\n```bash\n%bbands         --\u003e add bollinger bands overlay to current active chart\n[4 $qqq %wma    --\u003e update fourth window with weighted moving average and $qqq\n%               --\u003e % by itself with no indicator name will remove any\n                    indicator from the targeted window\n```\n\n#### `@` account\n\nTyping `@` will bring up the account window if you have set your\n`IEX_SECRET_KEY` in the config.json or as an env var.\n\n![account view showing iex and alpaca account information such as buying power\nand message use](img/account.png)\n\n---\n\n## 🦙 alpaca trading\n\n**⚠ disclaimer: agora's trading integration is in early _alpha_ and it is not\nrecommended for use with real money accounts.** Per the [LICENSE](./LICENSE),\nneither hp4k1h5 nor any contributors to this repository, nor agora make any\nguarantees or claims regarding the status of trades executed via agora.\nPlease consult a financial professional before deciding whether to use agora\nfor live, real-money trading. While trading integration is in development, it\n  is recommended to only use \"paper\" accounts with no real-money value,\n  although the user is free to make their own judgement.\n\n### setup\n\nYou will need an [alpaca trading account](https://app.alpaca.markets/signup).\nAccounts are free as are trades. After signing up you can generate real or\npaper api keys. Use one set of these to set env vars or `config.json` values\nas follows:\n\n```bash\nexport APCA_API_KEY_ID=\"YourAlpacaAPIid\"\nexport APCA_API_SECRET_KEY=\"YourAlpacaSecretKey\"\n```\n\nor\n\n```json\n{\n  \"APCA_API_KEY_ID\": \"YourAlpacaAPIid\",\n  \"APCA_API_SECRET_KEY\": \"YourAlpacaSecretKey\"\n}\n```\n\nThough it is not recommended, you can set `config.json` value\n`\"alpacaAccountType\"` to \"live\" if you wish to trade real-money with agora.\nThe default value is \"paper\". If you have entered \"live\" account keys, you\nwill need to set the value of `\"alpacaAccountType\"` to \"live\" in order for\nthem to work.\n\nAlso see [alpaca config](docs/example-configs/alpaca.json) for a sample\ntrading work station.\n\n## account\n\nif you have entered your information correctly, you should be able to display\nyour account and positions info by typing `@`.\n\n## watchlist\n\nSetting config.json key \"watchlist\" to string value \"alpaca\" will query your\nset of alpaca watchlists. This can be set at the config level, the workspace\nlevel, or on the watchlist component itself.\n\n### bots\n\nAlgo-trading support is under active development. As a first step, there is\na new `bots` component that can display relevant information to your trading\nbots. There is a [bots README](docs/bots/README.md) available in the bots\nfolder, as well as some example bots, like [alpha bot](docs/bots/alpha.js),\na simple mean reversion algorithm.\n\nExport your bots to agora from [bots.js](bot.js).\n\nIf you are using paper keys or are comfortable with this bot trading with your\nmoney, try typing `bots` and then `bots ls` to list bots and then, *if you are\nok with the bot trading on your alpaca account* type `bots start alpha $spy`\nin the repl. The first command displays the bots component. The second lists\nthe available bots and the third starts alpha bot which is based on a\nmean-reversion algorithm, targeting `$SPY`. You'll see that the bot can print\nto the repl output window, and the bot component, which offers some default\ntext formatting, as well as a place to dump more persistent messages.\n\n![agora workspace with bots window and other data components](img/bots.png)\n\u003e The above image was generated using the config found at\n[docs/example-configs/alpaca.json](docs/example-configs/alpaca.json) \n\nIn the above image, there is a bots component in the upper-right hand corner of\nthe screen. The bots are also able to dump text to the repl output.\n\nAlso see [alpaca config](docs/example-configs/alpaca.json) for a sample trading\nwork station.\n\n### placing orders\n\nUsers can execute manual trades as follows. All orders must have three\ncomponents:\n\n1) order **side** buy or sell\n    - use the `+` buy-prefix to buy. use the `-` sell-prefix to sell.\n    - selling when you own no shares will be considered a short sale.\n    - underscores and commas are allowed in quantities, i.e. 1_000 = 1,000 =\n        1000\n    - also see `close` and `cancel` commands below\n2) **quantity**\n    - affix the quantity directly to the order side\n3) stock **symbol**\n    - use the stock symbol prefix `$` to designate the instrument\n\n#### order type and time-in-force\n\nOptionally users can set the order type and time-in-force. Orders that include\na `\u003c` limit-prefix, a `\u003e` stop-prefix or both, will be submitted as, `limit`,\n`stop`, or `stop_limit` respectively. If you include the order type with the\norder, your order will be loosely validated for correctness before going out.\nThis means that if you submit a stop_limit order that has incorrect limit vs\nstop prices, alpaca will reject your order, and not this app. However if you\nexplicitly submit a stop_limit without both a stop price and a limit price,\nagora will reject your order before it goes out. Including the prefixes `\u003c\n\u003e`, without explicitly stating what the order type is will automatically\ndecide what order type you are submitting.\n\nOrders that include one of `day, gtc, opg, cls, ioc, fok` will be counted as\nsuch.\n\n**examples**\n```bash\n+100 $tm \u003c130.23     -\u003e buy 100 shares of $tm with a limit price of 130.23\n-50 $qqq \u003c297 \u003e296   -\u003e sell (short) 50 shares of $qqq stop at 296 limit price\n                        297 or better\n$gm gtc +1_000       -\u003e buy 1,000 shares of $GM good-to-cancel\n```\n\n#### `cancel` orders\n\nUse command `cancel` plus one of `all`, `$symbol`, `order_id` or\n`client_order_id` to cancel all orders, all orders for a given symbol, or a\nsingle order.\n\n**examples**\n```bash\ncancel all          -\u003e cancel all open orders\ncancel $tm          -\u003e cancel all open orders for $TM\ncancel 4f447        -\u003e cancel the order starting with id or client id 4f447,\n                        must be length 5\n```\n\n#### `close` positions\n\nUse command `close` plus one of `all` or `$symbol` to close all positions, or the\nposition for a given symbol.\n\n**examples**\n```bash\nclose all          -\u003e cancel all positions\nclose $tm          -\u003e close position in $TM\n```\n\n---\n\n## config.json\n\nBy default agora will look for a config in two places on unix/free-bsd\nsystems. First it will check `~/.config/agora/config.json`, and then it will\nlook in the root directory of this repo, wherever that is installed on your\nsystem. If the path `~/.config/agora/` does not exist, you will have to\ncreate it yourself. You can copy this config and adapt for your own purposes.\nPlease feel free to share handy configurations by submitting an issue or pr.\n\n### configuring workspaces\n\nPlease consult the\n[tutorial](docs/TUTORIAL.md#configuring-workspaces).\n\n---\n\n## thanks\n\nI appreciate your patience as the behavior of the app settles and as i work up\nsome more thorough explanations of the app's behavior.\n\n- this project would not have been possible were it not for the incredible\nefforts of [blessed](https://github.com/chjj/blessed) and\n[blessed-contrib](https://github.com/yaronn/blessed-contrib) authors and\ncontributors. Though these repos are somewhat dormant and agora is using\nforked versions, my heartfelt thanks go to these teams.\n\n- stock search is brought to you by\n  [fuzzysort](https://github.com/farzher/fuzzysort)\n\n- [iex](https://iexcloud.io) for making a robust free market data api\n\n- [alpaca](https://app.alpaca.markets), for their free trading api\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FHP4k1h5%2Fagora","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FHP4k1h5%2Fagora","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FHP4k1h5%2Fagora/lists"}