{"id":43491772,"url":"https://github.com/riceissa/aiwatch","last_synced_at":"2026-02-03T10:10:50.961Z","repository":{"id":41826959,"uuid":"108081483","full_name":"riceissa/aiwatch","owner":"riceissa","description":"Website to track people, organizations, and products (tools, websites, etc.) in AI safety","archived":false,"fork":false,"pushed_at":"2026-01-30T05:18:02.000Z","size":3229,"stargazers_count":24,"open_issues_count":138,"forks_count":12,"subscribers_count":2,"default_branch":"master","last_synced_at":"2026-01-30T16:33:32.808Z","etag":null,"topics":["ai-alignment","ai-safety","aisafety","data-portal","database","dataset","mysql","php"],"latest_commit_sha":null,"homepage":"https://aiwatch.issarice.com/","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc0-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/riceissa.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2017-10-24T05:35:44.000Z","updated_at":"2026-01-29T10:43:37.000Z","dependencies_parsed_at":"2023-12-23T08:19:11.361Z","dependency_job_id":"312cb395-f994-4967-bc1b-5bb0863c6ce6","html_url":"https://github.com/riceissa/aiwatch","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/riceissa/aiwatch","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/riceissa%2Faiwatch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/riceissa%2Faiwatch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/riceissa%2Faiwatch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/riceissa%2Faiwatch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/riceissa","download_url":"https://codeload.github.com/riceissa/aiwatch/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/riceissa%2Faiwatch/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29041051,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-03T10:09:22.136Z","status":"ssl_error","status_checked_at":"2026-02-03T10:09:16.814Z","response_time":96,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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-alignment","ai-safety","aisafety","data-portal","database","dataset","mysql","php"],"created_at":"2026-02-03T10:10:47.159Z","updated_at":"2026-02-03T10:10:50.954Z","avatar_url":"https://github.com/riceissa.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AI Watch and Org Watch\n\nThis is the repository for two related websites:\n\n* [AI Watch](https://aiwatch.issarice.com/) is a website designed to track people and organizations working in AI\nsafety.\n* [Org Watch](https://orgwatch.issarice.com/) is a generalization of AI Watch\nthat covers positions outside of AI safety.\n\nBoth sites use the same code and database, stored in this repository.\n\n## Project layout\n\n- `access-portal/` contains the PHP code for the website.\n- `sql/` contains the data stored in MySQL format.\n\n## Setting up\n\nThis section is only relevant to people who want to run a local instance of AI\nWatch (e.g. for development purposes).\n\nFirst, clone the repo and set up the database:\n\n```bash\ngit clone https://github.com/riceissa/aiwatch.git\ncd aiwatch\nmysql -e \"create database aiwatch\"\nmake read  # read in data from sql/\n```\n\nNow set up the password file to allow PHP to log in to the database:\n\n```bash\ncp access-portal/backend/globalVariables/{dummyPasswordFile.inc,passwordFile.inc}\nvi access-portal/backend/globalVariables/passwordFile.inc  # change to add database login info\n```\n\nIf you're hosting this on a server, make sure to disable public access to the\npassword file.\n\nFinally start the service:\n\n```bash\ncd access-portal\nphp -S localhost:8000\n```\n\nTo get AnchorJS and tablesorter, run:\n\n```bash\nmake fetch_anchorjs\nmake fetch_tablesorter\n```\n\nYou can now visit `http://localhost:8000/` in your browser.\n\n## Basic steps for adding new data\n\nBefore running commands in Git Bash, make sure you are in the AI Watch directory.\nIf you cloned the git repo from your home directory, you can go to the AI Watch\ndirectory by typing the following:\n\n```\ncd ~/aiwatch\n```\n\nThis only needs to be done once every time you open Git Bash, whereas the other\ncommands below must be done every time you want to save changes to git.\n\n1. Open an existing .sql file or make a new .sql file in which to add new data.\n   For example, to add data to 80,000 Hours positions, you can open\n   `sql/positions/80000hours-positions.sql`.\n\n2. Add data to the file (using a text editor such as Notepad) by looking at\n   sources like Wayback Machine for the team\n   page, LinkedIn, blog posts, Facebook, etc.  For the data format, look at the\n   other files in the same directory and copy the format.\n\n   A few things to keep in mind:\n\n   - Date fields must include year, month, and day, so for example\n     `'2016-02-01'`. MySQL will complain if you only add year or month.\n   - The first row of a file shouldn't start with a comma, but all the\n     subsequent rows must start with a comma because of the way rows are\n     separated in MySQL.\n\n3. Once you reach a good stopping point, check for errors in the MySQL syntax.\n   Type:\n\n   ```bash\n   ./reload-db.sh\n   ```\n\n   This will reload all of the data in MySQL. MySQL will complain if there are\n   any errors, and you can fix them. If MySQL says nothing, that means all the\n   data has correct syntax.\n\n   **WARNING:** `reload-db.sh` only reloads files that are explicitly\n   listed in the script, so if you make a new SQL file it will by default not be loaded\n   into the database. If you make a new SQL file, you must add a line similar to the following\n   one in `reload-db.sh`:\n   \n   ```bash\n   winpty \"$MYSQL\" --defaults-extra-file=\"$HOME/.my.cnf\" aiwatch -e \"source sql/positions/80000hours-positions.sql\"\n   ```\n   \n   After you edit and save `reload-db.sh`, you will need to commit changes to Git:\n   \n   ```bash\n   git add reload-db.sh\n   git commit -m \"New SQL file\"\n   ```\n\n4. Stage the file in git. Type\n\n   ```bash\n   git add FILENAME\n   ```\n\n   where `FILENAME` is the name of the file you have been editing. If there are\n   multiple files, you can either type `git add FILENAME1 FILENAME2` or you can\n   type one line for each file.\n\n   To find all files with changes, you can type:\n\n   ```bash\n   git status\n   ```\n\n   Then you can copy the path that is shown there.\n\n5. Commit your changes. There are two ways to do this:\n\n   - Simple way. You can type:\n\n     ```bash\n     git commit -m \"your message here\"\n     ```\n\n     where `your message here` is a summary of the changes you made. For\n     example, you might type:\n\n     ```bash\n     git commit -m \"Add 80,000 Hours team from 2012\"\n     ```\n\n   - Using a text editor (this is better if you want to write a multi-line\n     commit message). You can type:\n\n     ```bash\n     git commit\n     ```\n\n     This will open a text editor for you to type your commit message. In Git\n     Bash, the default text editor is Vim. You can press `i` (which enters\n     insert mode) and then type in your message (e.g. \"Add 80,000 Hours team\n     from 2012\") and then press `Escape`. Then press `:wq` followed by `Enter`\n     (this will save the file and close Vim).\n\n6. Upload your changes to GitHub. You can type:\n\n   ```bash\n   git push\n   ```\n\n7. If you've finished working on an issue, add the `ready_for_review` label on\n   the issue.\n\nSome tricky things to keep in mind:\n\n- An organization might change its team page location, so you might need to\n  find its old team page location in Wayback Machine. To do this, go to the\n  _homepage_ for the organization within Wayback Machine, find an old snapshot,\n  then find the team page within that snapshot.\n- A person might have changed their name over the years. In this case, you will\n  want to use their newest name.\n\nThe very first time you set up Git, you will need to do the following:\n\n- Set name and email for Git.\n- `git checkout -b BRANCHNAME` to start a new branch.\n- `git push --set-upstream origin BRANCHNAME` to set the branch to push to on\n  origin (GitHub).\n\n## Some validation/sanity checking SQL commands\n\nTo be able to run SQL commands, you must first open a MySQL command prompt.\nOpen Git Bash, then type the following (or copy-paste the command; to paste a\ncommand into Git Bash, right click the Git Bash window and select Paste):\n\n```bash\nwinpty \"/c/Program Files/MySQL/MySQL Server 8.0/bin/mysql\" --defaults-extra-file=\"$HOME/.my.cnf\" aiwatch\n```\n\nNow you can type the following SQL commands.  To exit out of MySQL, you can\ntype `Control`-`d`.\n\nThe following command looks at each organization and finds distinct people with\nthe same last name. This will often catch people who use shorted versions of\ntheir name in some contexts (e.g. \"Alex Ray\" and \"Alexander Ray\").\n\n```sql\nselect organization,group_concat(distinct person) from positions group by organization, substring_index(person,' ',-1) having count(distinct person) \u003e 1;\n```\n\nThe following command will find duplicate (organization, person, title)\ncombinations. This often means that the same position has been entered more\nthan once.\n\n```sql\nselect count(*),person,organization,title from positions group by person,organization,title having count(*)\u003e1;\n```\n\nYou can restrict the above to a single organization, say GiveWell, by typing\nthe following instead:\n\n```sql\nselect count(*),person,organization,title from positions where organization='GiveWell' group by person,organization,title having count(*)\u003e1;\n```\n\nThe following command will find all cases where there is more than one\n\"unended\" position for each (person, organization) pair. Since each person\nusually only holds one position at a time, this can often tell you of positions\nthat are missing an `end_date` that should be added.\n\n```sql\nselect organization,person,group_concat(title) from positions where end_date is NULL group by person,organization having count(*) \u003e 1 order by organization;\n```\n\nThe following command flags organizations whose last position date\n(i.e. the latest date out of all `start_date` and `end_date` values)\nis later than the last major data update date:\n\n```sql\nselect o.organization, o.last_major_data_update_date, group_concat(p.person, ': ', greatest(p.start_date, p.end_date) separator '; ') as violations from organizations o inner join positions p on o.organization = p.organization where o.last_major_data_update_date \u003c greatest(p.start_date, p.end_date) group by o.organization, o.last_major_data_update_date;\n```\n\nExample:\n\n![image](https://github.com/riceissa/aiwatch/assets/1450515/ef850420-e1d4-4640-8a17-0beb5f1b4f74)\n\nThe idea here is that if the list of violations for an org grows too long\n(say, 10+ positions), then it becomes pretty obvious that the last major\ndata update date forgot to be changed when the data was updated.\n\n\n## Tips for using Visual Studio Code\n\nMost keyboard shortcuts like copy, paste, save, search, all work as expected.\nBelow are some advanced settings that are useful when doing data entry.\n\n### Sorting lines\n\n1. To sort a block of lines, go to the first line and click on it.\n2. Then type `Control`-`Shift`-`End`.  This will select all lines from the\n   current cursor position until the end of the file.\n3. Now type `Control`-`p` followed by `\u003e` followed by the word `sort` and then\n   choose \"Sort Lines Ascending\" from the menu.\n\n**WARNING**: Be careful when sorting lines to make sure that there are no\ncommented lines or SQL \"rows\" that take up more than one line, as these will be\nsorted incorrectly. Also when sorting a block of SQL \"rows\" for the whole file,\nadd a comma to the first row, then sort, then remove a comma from the first\nrow.\n\n### Word wrapping\n\nTo toggle word wrapping, press `Alt`-`z`.\n\n## Contributing\n\nAll contributions are welcome.  Contributions might take the form of:\n\n- Data collection\n- Code contributions to the website\n- Feature requests/finding bugs\n- Feedback\n\n## License\n\nAll code and data released to the public domain according to\n[CC0 1.0 Public Domain Dedication](https://creativecommons.org/publicdomain/zero/1.0/).\n\n## Notes to self\n\nTo export some organization data from the donations database:\n\n```bash\nmysql donations -e \"select donee,former_name,website,contact_email,country, \\\n    key_people,launch_date,launch_date_precision,launch_date_url, \\\n    facebook_username,instagram_username,medium_username,pinterest_username, \\\n    timelines_wiki_page,tumblr_subdomain,twitter_username,wikipedia_page, \\\n    youtube_username from donees where cause_area REGEXP 'ai risk';\" \\\n    \u003e temp.tsv\n```\n\nFind uncategorized interns:\n\n```mysql\nselect person,title,employment_type from positions\nwhere title regexp 'intern' and (employment_type != 'intern' or employment_type is null);\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Friceissa%2Faiwatch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Friceissa%2Faiwatch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Friceissa%2Faiwatch/lists"}